机器学习之SVM分类器介绍——核函数、SVM分类器的使用

系类文章目录

机器学习算法——KD树算法介绍以及案例介绍

机器学习的一些常见算法介绍【线性回归,岭回归,套索回归,弹性网络】

文章目录

一、SVM支持向量机介绍

1.1、SVM介绍

1.2、几种核函数简介

a、sigmoid核函数

 b、非线性SVM与核函数

重要参数kernel作为SVC类最重要的参数之一,“kernel"在sklearn中可选以下几种选项:​编辑c、kernel=“poly”

d、kernel=“rbf” 和 gamma

二、SVM案例介绍

2.1、利用波斯顿房价数据对SVM支持向量机使用不同核函数处理数据

2.2、利用鸢尾花数据进行SVM分类

总结


前言

本文简单介绍SVM分类器、以及核函数、SVM分类器的应用。以下案例经供参考

一、SVM支持向量机介绍

1.1、SVM介绍

  • SVM是按照监督类学习方式进行运作的。即:数据当中含有目标值。
  • SVM采用监督学习方式,对数据进行二分类(这点跟逻辑回归一样)。但是,SVM和逻辑回归(LR)有有很多不同点。

两者的相同点

  • 二者都是线性分类器
  • 二者都是监督学习算法
  • 都属于判别模型(KNN, SVM, LR都属于判别模型),所谓判别模型就是指:通过决策函数,判别各个样本之间的差别来进行分类。
  • 二者的损失函数和目标函数不一样。
  • 二者对数据和参数的敏感度不同。SVM由于采用了类似于“过度边界”的方式,泛化能力更好

SVM可以作线性分类器,但是在引入核函数(Kernel Method)之后,也可以进行非线性分类

1.2、几种核函数简介

a、sigmoid核函数

 b、非线性SVM与核函数

重要参数kernel & degree & gamma

重要参数kernel
作为SVC类最重要的参数之一,“kernel"在sklearn中可选以下几种选项:
在这里插入图片描述c、kernel=“poly”

  • 方法一:

多项式思维:扩充原本的数据,制造新的多项式特征;(对每一个样本添加多项式特征)

步骤

  1. PolynomialFeatures(degree = degree):扩充原始数据,生成多项式特征;
  2. StandardScaler():标准化处理扩充后的数据;
  3. LinearSVC:使用 SVM 算法训练模型;
  • 方法二:

使用scikit-learn 中封装好的核函数: SVC(kernel=‘poly’, degree=degree, C=C)
**功能:**当 SVC() 的参数 kernel = ‘poly’ 时,直接使用多项式特征处理数据;
:使用 SVC() 前,也需要对数据进行标准化处理

d、kernel=“rbf” 和 gamma

1、高斯核函数、高斯函数
在这里插入图片描述

  • μ:期望值,均值,样本平均数;(决定告诉函数中心轴的位置:x = μ)
  • σ2:方差;(度量随机样本和平均值之间的偏离程度:为总体方差,为变量, 为总体均值, 为总体例数)
  1. 实际工作中,总体均数难以得到时,应用样本统计量代替总体参数,经校正后,样本方差计算公式:$S^2= \sum (X-μ)^2/(n-1) $为样本均值,n为样本例数。
  • σ:标准差;(反应样本数据分布的情况:σ 越小高斯分布越窄,样本分布越集中;σ 越大高斯分布越宽,样本分布越分散)
  • γ = 1 / (2 σ 2 σ^2σ2 ):γ 越大高斯分布越窄,样本分布越集中;γ 越小高斯分布越宽,样本分布越密集;

 超参数 γ 值越小模型复杂度越低,γ 值越大模型复杂度越高

Sigmoid核函数,它在非线性数据上强于两个线性核函数,但效果明显不如rbf,它在线性数据上完全比不上线性的核函数们,对扰动项的抵抗也比较弱,所以它功能比较弱小,很少被用到。

rbf,高斯径向基核函数基本在任何数据集上都表现不错,属于比较万能的核函数。我个人的经验是,无论如何先试试看高斯径向基核函数,它适用于核转换到很高的空间的情况,在各种情况下往往效果都很不错,如果rbf效果不好,那我们再试试看其他的核函数。另外,多项式核函数多被用于图像处理之中

1.线性核,尤其是多项式核函数在高次项时计算非常缓慢
2.rbf和多项式核函数都不擅长处理量纲不统一的数据集

二、SVM案例介绍

2.1、利用波斯顿房价数据对SVM支持向量机使用不同核函数处理数据

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
import warnings#引入警告信息库
warnings.filterwarnings('ignore')#过滤警告信息
#导入波斯顿房价数据
from sklearn.datasets import load_boston
boston = load_boston()
#导入数据集拆分工具
from sklearn.model_selection import train_test_split
#建立训练数据集和测试数据集
X,y = boston.data,boston.target
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state = 8)
#打印训练集与测试集状态
print('train datasets size:',X_train.shape)
print('test datasets size:',X_test.shape)
print('\n')
from sklearn.svm import SVR
for kernel in ['linear','rbf','sigmoid']:
    svr = SVR(kernel = kernel,gamma = 'auto')
    svr.fit(X_train,y_train)
    print(kernel,'核函数的模型训练集得分:{:.3f}'.format(svr.score(X_train,y_train)))
    print(kernel,'核函数的模型测试集得分:{:.3f}\n'.format(svr.score(X_test,y_test)))
#导入数据预处理工具
from sklearn.preprocessing import StandardScaler
#对数据集进行数据预处理
scaler = StandardScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
#用预处理后的数据查询训练模型
for kernel in ['linear','rbf','sigmoid']:
    svr = SVR(kernel = kernel)
    svr.fit(X_train,y_train)
    print('数据预处理后',kernel,'核函数的模型训练集得分:{:.3f}'.format(svr.score(X_train,y_train)))
    print('数据预处理后',kernel,'核函数的模型测试集得分:{:.3f}\n'.format(svr.score(X_test,y_test)))
svr = SVR(C = 100,gamma = 0.1,kernel = 'rbf')
svr.fit(X_train_scaled,y_train)
print('调节参数后的''rbf内核的SVR模型训练集得分:{:.3f}'.format(svr.score(X_train_scaled,y_train)))
print('调节参数后的''rbf内核的SVR模型测试集得分:{:.3f}\n'.format(svr.score(X_test_scaled,y_test)))

程序运行结果:

train datasets size: (379, 13)
test datasets size: (127, 13)


linear 核函数的模型训练集得分:0.709
linear 核函数的模型测试集得分:0.696

rbf 核函数的模型训练集得分:0.145
rbf 核函数的模型测试集得分:0.001

sigmoid 核函数的模型训练集得分:-0.024
sigmoid 核函数的模型测试集得分:-0.027

数据预处理后 linear 核函数的模型训练集得分:0.709
数据预处理后 linear 核函数的模型测试集得分:0.696

数据预处理后 rbf 核函数的模型训练集得分:0.192
数据预处理后 rbf 核函数的模型测试集得分:0.222

数据预处理后 sigmoid 核函数的模型训练集得分:0.059
数据预处理后 sigmoid 核函数的模型测试集得分:0.075

调节参数后的rbf内核的SVR模型训练集得分:0.966
调节参数后的rbf内核的SVR模型测试集得分:0.894

2.2、利用鸢尾花数据进行SVM分类

#使用svm分类器实现鸢尾花数据的分类
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
from matplotlib.colors import ListedColormap
#import warnings#引入警告信息库
#warnings.filterwarnings('ignore')#过滤警告信息
#导入鸢尾花数据集,总共150
from sklearn import datasets
from sklearn import svm
from sklearn.linear_model import LogisticRegression

iris = datasets.load_iris()
x=iris.data[:,:2]
print("Train data size:",np.shape(x))
y=iris.target
plt.figure(2)
for i in range(len(y)):
    if y[i]==0:
        p0=plt.scatter(x[i,0],x[i,1],alpha=1,c='r',marker='s')
    elif y[i]==1:
        p1=plt.scatter(x[i,0],x[i,1],alpha=1,c='b',marker='*')
    else:
        p2=plt.scatter(x[i,0],x[i,1],alpha=1,c='green',marker='o')
plt.legend([p0,p1,p2],['0','1','2'],loc = 'upper left')
plt.title('鸢尾花样本分布图')
plt.show()
print(40*'*')


gamma=50
svc=svm.SVC(kernel='rbf',C=10,gamma=gamma)
svc.fit(x,y)
print('SV number:',svc.support_)
print('SV set:',svc.support_vectors_)
print('SVC score:',svc.score(x,y))
print(40*'*')
logi = LogisticRegression(C=1.0,penalty='l2',solver='sag',max_iter=1000)

svc_linear=svm.SVC(C=1.0,kernel="linear")

svc_poly=svm.SVC(C=1.0,kernel="poly",degree=7)

svc_rbf1=svm.SVC(C=1.0,kernel="rbf",gamma=0.5)

svc_rbf2=svm.SVC(C=1.0,kernel="rbf",gamma=50)
clfs=[logi,svc_linear,svc_poly,svc_rbf1,svc_rbf2]
titles=["逻辑斯蒂回归",'线性回归函数SVM','7阶多项式核函数SVM','RBF核函数(gamma=0.5)','RBF核函数(gamma=50)']

for clf,i in zip(clfs,range(len(clfs))):
    clf.fit(x,y)
    print(titles[i],'在全体样本集上的性能评分:',clf.score(x,y))
print(40*'*')
def plot_decision_regions(X,y,classifier,resolution = 0.01):
    markers = ('s','x','o','^','v')
    colors = ('r','b','green','k','ightgreen')
    #通过ListedColormap从颜色列表创建色度图,为每个分类分配一个颜色
    #用于将数字映射到颜色或者以以为颜色数组进行颜色规格转换
    #用于生成网格矩阵区域,程序中根据属性上下进行自动调整
    cmap = ListedColormap(colors[:len(np.unique(y))])
    x1_min = np.floor(X[:,0].min()-0.5)
    x1_max = np.ceil(X[:,0].max()+0.5)
    x2_min = np.floor(X[:,1].min()-0.5)
    x2_max = np.ceil(X[:,1].max()+0.5)
    #创建网格阵列
    xx1,xx2 = np.meshgrid(np.arange(x1_min,x1_max+resolution,resolution),np.arange(x2_min,x2_max+resolution,resolution))
    #xx1,xx2 = np.meshgrid(np.linspace(x1_min,x1_max,int((x1_max-x1_min)/resolution)),np.linspace(x2_min,x2_max,int((x1_max-x2_min)/resolution)))
    #用predict方法预测相关的网格点的分类标签
    Z = classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T)
    Z = Z.reshape(xx1.shape)
    plt.contourf(xx1,xx2,Z,alpha = 0.3,cmap = cmap)#画出函数的轮廓图
    plt.xlim(x1_min,x1_max)
    plt.ylim(x2_min,x2_max)
    for idx,cl in enumerate(np.unique(y)):
        plt.scatter(x=X[y==cl,0],y=X[y==cl,1],alpha=1.0,c=colors[idx],label=cl)
for clf,i in zip(clfs,range(len(clfs))):
    clf.fit(x,y)
    plt.figure(i)
    plot_decision_regions(x,y,classifier=clf)
    plt.xlabel('Sepal Length')
    plt.ylabel('Sepal width')
    plt.title(titles[i])                
plt.show()

程序运行结果:

Train data size: (150, 2)

****************************************
SV number: [  3   4   6   8  10  13  14  15  16  17  18  21  22  23  24  25  26  27
  28  29  30  31  32  33  34  35  36  37  41  42  43  45  46  47  48  50
  51  52  53  54  56  57  58  59  60  61  62  64  65  67  68  69  70  72
  73  74  75  76  77  78  79  81  82  83  84  85  86  87  88  89  90  91
  92  93  94  95  97  98  99 100 101 102 103 104 105 106 107 108 109 110
 111 112 113 114 115 117 118 119 120 121 122 123 124 125 126 127 128 129
 130 131 132 134 135 136 137 138 139 140 141 142 144 145 146 147 148 149]
PS:此处我省略了一部分结果集
SVC score: 0.9266666666666666
****************************************
逻辑斯蒂回归 在全体样本集上的性能评分: 0.8133333333333334
线性回归函数SVM 在全体样本集上的性能评分: 0.82
7阶多项式核函数SVM 在全体样本集上的性能评分: 0.8266666666666667
RBF核函数(gamma=0.5) 在全体样本集上的性能评分: 0.8266666666666667
RBF核函数(gamma=50) 在全体样本集上的性能评分: 0.8933333333333333
****************************************

总结

以上就是对SVM分类器的部分介绍,希望对初学者有所帮助。

最后欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21501.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从内网护卫到零信任尖兵:腾讯iOA炼成记

腾讯既是企业产品的服务商又是使用者,很多产品最原始的出发点最早只是为了解决腾讯自身某一个需求,经过不断地发展完善和业务场景锤炼,最终进化成一个成熟的企服产品。本系列文章讲述的是这样一组Made in Tencent故事,这是系列的第…

Word批量更改图片环绕方式与=尺寸大小

前提:一份Word文档里面有100张图片,有大有小,需要将100张图片更改为统一大小,宽度与高度均为5厘米,同时环绕方式也需要改成四周型。 默认Word图片的默认环绕方式为嵌入型,需要统一更改为四周型,…

linux 安装 maven 3.8 版本

文章目录 1:maven 仓库官网 2、下载安装包 3、使用:Xftp 上传到你想放的目录 4、解压文件 ​编辑 5、配置环境变量 ​编辑 6、刷新 /etc/profile 文件 7、查看maven 版本 1:maven 仓库官网 Maven – Download Apache Mavenhttps://mave…

Java 基础进阶篇(十五):IO 流总结(全网最全面)

文章目录 前置内容:字符集一、IO 流概述二、字节流2.1 文件字节输入流 FileInputStream2.1.1 案例:每次读取一个字节2.1.2 案例:每次读取一个字节数组2.1.3 案例:读取文件的全部字节 2.2 文件字节输出流 FileOutputStream2.3 文件…

使用Docker Dockerfile构建php LNMP集成开发环境,并运行Thinkphp5

宿主机环境 系统:MAC、Windows10 Docker版本:Docker version 23.0.5 Docker Desktop:Dockerdesktop官方地址 前言 这篇主要介绍如何在Mac、Windows10使用docker搭建LNMP集成开发环境。下面我会写Dockerfile编译安装Nginxphp基础环境。mysql、redis基…

pynvme操作流程

如下操作pynvme运行在fedora上,在其他操作系统尚未做尝试。 步骤一:检查本地windows是否安装ssh 检查方式:windows本地打开windows powershell,输入ssh,若打印usage :ssh等一些信息,则已安装s…

8.防火墙

文章目录 防火墙iptables防火墙介绍基础操作高级操作通用匹配隐含匹配端口匹配:--sport 源端口、--dport 目的端口 TCP标志位匹配:--tcp-flags TCP标志位ICMP类型匹配:--icmp-type ICMP类型 显式匹配多端口匹配IP范围匹配:-m ipra…

基于αβ剪枝算法的五子棋

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上&#xf…

记录:自回归 模型在记忆 全随机序列 的潜变量 统计量爆炸现象

只是一个记录 8层12头512维度的 GPT 模型,使用它来记忆 10000 条 512长度 的无序序列,vocab_size 为100。 模型要自回归生成这些序列,不可能依赖局部推理,必须依赖全局视野,即记住前面的序列。 然后统计 最后一个no…

EasyRecovery16电脑硬盘数据恢复软件功能讲解

硬盘是很常见的存储数据的设备,硬盘中很多重要的数据一旦丢失会很麻烦,不过现在有硬盘数据恢复软件可以自行在家恢复数据。今天的文章就带大家来看看硬盘恢复数据的软件EasyRecovery。 EasyRecovery 是一款专业的数据恢复软件,支持恢复不同存…

nginx实现正向代理

1.下载nginx nginx: download 选择自己需要的版版本下载下来 2.解压文件修改ngixn.conf配置文件 events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout…

VSAN 7 安装部署指南(一)

本文使用三台服务器安装ESXI 7.0 ,并在其中一台ESXI中安装vCenter 7.0。本环境中最终在VMware Workstation虚拟机中做的嵌套虚拟化。每台虚拟机配置两块网卡,一块网卡桥接,一块NAT。三块硬盘,一块100GB作为系统盘,一块…

重新定义新增长,从百果园看ESG如何可持续

当下,企业的增长亟待重新定义。 中国已基本告别人口红利时代,不少行业和企业当前陷入增长困境。原来以规模定义的增长很难实现,一些企业在日常运营中找不到方向和方式,因此需要重新定义“增长”。 最终,在环境恶化、…

Android RecyclerView实现吸顶动态效果,附详细效果图

文章目录 一、ItemDecoration二、实现RecyclerView吸顶效果1、实现一个简单的RecyclerView2、通过ItemDecoration画分割线3、画出每个分组的组名4、实现吸顶效果 完整demo 链接:https://download.csdn.net/download/JasonXu94/87786702 一、ItemDecoration [外链图片转存失败…

猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释

猜谜游戏在编程语言实践都已经和 HelloWord 程序成为必不可少的新手实践环节,毕竟,它能够让我们基本熟悉 for 循环、变量定义、打印、if else 语句等等的使用,当我们基本熟悉该语言基础之后,就要学会其优势方面的程序实践&#xf…

软考算法-算法篇

软考算法 一:故事背景二:分治法2.1 概念2.2 题目描述2.3 代码实现2.4 总结提升 三:回溯法3.1 概念3.2 题目描述3.3 代码实现3.3.1 TreeNode 类3.3.2 将数组处理成二叉树结构并且返回根节点3.3.3 进行搜索 3.4 总结提升 四:回溯法-…

头歌计算机组成原理实验—运算器设计(7) 第7关:6位有符号补码阵列乘法器

第7关:6位有符号补码阵列乘法器 实验目的 帮助学生掌握补码阵列乘法器的实现原理。 视频讲解 实验内容 在 Logisim 中打开 alu.circ 文件,在6位补码阵列乘法器中利用5位阵列乘法器以及求补器等部件实现补码阵列乘法器,实验框架如图所示&a…

【Linux】进程信号

目录 一、信号概念 二、信号捕捉预备知识 三、产生信号 1、通过终端按键 Core Dump 概念 Core Dump 用法 2、系统调用 2.1、kill 2.2、raise 2.3、abort 3、软件条件 4、硬件异常 4.1、除0 4.2、野指针 四、保存信号 1、信号其他相关概念 2、内核中的表示 3、…

【全网首测】5G随身Wi-Fi —— 中兴U50 Pro

说到随身Wi-Fi,大家应该都不陌生。 它是一个专门将移动信号转换成Wi-Fi信号的设备,经常被用于旅行和出差场景,也被人们亲切地称为“上网宝”。 现在,我们已经全面进入了5G时代,随身Wi-Fi也升级迭代,出现了支…

一个有趣的avs编码器(注意,是avs,而不是avs2噢)

本章附件是一个清华大学写的关于avs编解码器: https://download.csdn.net/download/weixin_43360707/87793302 该编码器遵循了stuffing bit: 打开文件夹后,如下: 可以看出这个是个跨平台的工程,提供了windows vs2015的工程文件sln&#x…