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

这篇具有很好参考价值的文章主要介绍了机器学习之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核函数

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

 b、非线性SVM与核函数

重要参数kernel & degree & gamma

重要参数kernel
作为SVC类最重要的参数之一,“kernel"在sklearn中可选以下几种选项:
机器学习之SVM分类器介绍——核函数、SVM分类器的使用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、高斯核函数、高斯函数
机器学习之SVM分类器介绍——核函数、SVM分类器的使用

  • μ:期望值,均值,样本平均数;(决定告诉函数中心轴的位置: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)

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

****************************************
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分类器介绍——核函数、SVM分类器的使用

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

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

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

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

总结

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

最后欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。文章来源地址https://www.toymoban.com/news/detail-439619.html

到了这里,关于机器学习之SVM分类器介绍——核函数、SVM分类器的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python | 机器学习之SVM支持向量机

    ​​​​​​ ​ 🌈个人主页: Sarapines Programmer 🔥 系列专栏: 《人工智能奇遇记》 🔖墨香寄清辞:诗馀墨痕深,梦漫星辰寂。 曲径通幽意犹在,剑指苍穹气势立。 目录结构 1. 机器学习之SVM支持向量机概念 1.1 机器学习 1.2 SVM支持向量机 2. SVM支持向量机算法 2.1 实验目的

    2024年02月05日
    浏览(40)
  • 机器学习之Python使用KNN算法对鸢尾花进行分类

    要求: (1)数据集划分为测试集占20%; (2)n_neighbors=5; (3)评价模型的准确率; (4)使用模型预测未知种类的鸢尾花。 (待预测数据:X1=[[1.5 , 3 , 5.8 , 2.2], [6.2 , 2.9 , 4.3 , 1.3]]) iris数据集有150组,每组4个数据。 第一步:引入所需库 第二步:划分测试集占20% test_size为

    2024年02月08日
    浏览(40)
  • 机器学习——SVM多分类问题

    目录 线性SVM 1.什么是SVM? 线性二分类器的最优超平面 1、超平面 2、最优超平面 3、最优分类面 4、支持向量与支持向量机 非线性SVM   1、常见的核函数 2、SVM案例 3.举例分析 多分类SVM 1. 直接法 2. 间接法   1.什么是SVM? 1、超平面 根据百度百科的解释,超平面是n维欧式空间

    2024年02月03日
    浏览(46)
  • 机器学习之支持向量机(SVM)对乳腺癌数据二分类python实现

    支持向量机(Support Vector Machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。 间隔最大化,就是所有样本点中,离我们分类界限超平面最近的样本点,尽可能的远离超平面。这种思想

    2024年02月03日
    浏览(101)
  • 【Python机器学习】分类器的不确定估计——预测概率

            predict_proba的输出是每个类别的概率,通常比decision_function的输出更容易理解,对于二分类问题,它的形状始终是(n_samples,2)。         可以从结果看到,每行的第一个元素是第一个类别的估计概率,第二个元素是第二个类别的估计概率,两个类别的概率之和始终

    2024年01月20日
    浏览(44)
  • 第29步 机器学习分类实战:支持向量机(SVM)建模

    支持向量机(SVM)建模。 先复习一下参数(传送门),需要调整的参数有: ① kernel:{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’},默认为’rbf’。使用的核函数,必须是“linear”,“poly”,“rbf”,“sigmoid”,“precomputed”或者“callable”中的一个。 ② c:浮点

    2024年02月02日
    浏览(66)
  • 【OpenCV】获取各种分类器的haarcascades_*.XML 文件的详细介绍

      安装 OpenCV并获取xml文件: 首先,请参考Windows下 OpenCV 的下载安装教程(详细)中的步骤,下载 OpenCV。 一旦下载完成,请找到你的 OpenCV 安装路径。以我为例,我的路径是 d:/python/python/Lib/site-packages 。 在该路径下,你将找到一个叫做 cv2 的文件夹。 进入 cv2 文件夹后,你

    2024年02月13日
    浏览(43)
  • python机器学习决策树和SVM向量机算法实现红酒分类

    经典的红酒分类数据集是指UCI机器学习库中的Wine数据集。该数据集包含178个样本,每个样本有13个特征,可以用于分类任务。 具体每个字段的含义如下: alcohol:酒精含量百分比 malic_acid:苹果酸含量(克/升) ash:灰分含量(克/升) alcalinity_of_ash:灰分碱度(以mEq/L为单位)

    2024年02月08日
    浏览(42)
  • 机器学习之分类

    分类任务和回归任务的不同之处在于,分类任务需要做出离散的预测。对于多分类任务的神经网络模型,其输出目标通常会用 one-hot 编码来表示,在输出层中使用 softmax 函数,同时使用分类交叉熵损失函数进行训练。在本博客中,我们将使用 TensorFlow 的底层API实现一个基于全

    2024年02月09日
    浏览(32)
  • 基于机器学习算法:朴素贝叶斯和SVM 分类-垃圾邮件识别分类系统(含Python工程全源码)

    本项目采用朴素贝叶斯和支持向量机(SVM)分类模型作为基础,通过对垃圾邮件和正常邮件的数据进行训练,旨在实现垃圾邮件的自动识别功能。 通过训练这两个分类模型,我们的目标是建立一个高效准确的垃圾邮件识别系统。当接收到新的邮件时,系统将对邮件文本进行预

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包