Python Sklearn库SVM算法应用

SVM 是一种有监督学习分类算法,输入值为样本特征值向量和其对应的类别标签,输出具有预测分类功能的模型,当给该模型喂入特征值时,该模型可以它对应的类别标签,从而实现分类。

Sklearn库SVM算法

下面我看一下 Python 的 Scikit -Learn(简称 Sklearn) 库是如何实现 SVM 算法的。

支持向量机算法被包含在 sklearn.svm 模块中,该模块提供了 7 个常用类,这些不同的类分别应用了不同的核函数,因此它们可以解决不同的问题,比如分类问题、回归问题以及无监督学习中的异常点检测等。下表对它们做了简单的介绍:

SVM算法类别 描述
LinearSVC类 基于线性核函数的支持向量机分类算法
LinearSVR类 基于线性核函数的支持向量机回归算法
SVC类 可选择多种核函数的支持向量机分类算法,通过"kernel"参数可以传入 linear:选择线性函数; polynomial:选择多项式函数; rbf:选择径向基函数; sigmoid:选择 Logistics 函数作为核函数; precomputed:使用预设核值矩阵, SVC 类默认以径向基函数作为核函数。
SVR类 可选择多种核函数的支持向量机回归算法
NuSVC类 与 SVC 类非常相似,但可通过参数"nu"设置支持向量的数量。
NuSVR类 与SVR类非常相似,但可通过参数"nu"设置支持向量的数量。
OneClassSVM类 用支持向量机算法解决无监督学习的异常点检测问题

SVM 主要用于解决二分类的问题,上述表格中最常使用的是 SVC 类。下面对使用该算法的步骤进行总结:

  • 读取数据,将原始数据转化为 SVM 算法所能识别的数据格式;
  • 将数据标准化,防止样本中不同特征数值大小相差较大影响分类器性能;
  • 选择核函数,在不清楚何种核函数最佳时,推荐使用"rbf"(径向基核函数)
  • 利用交叉验证网格搜索寻找最优参数;(交叉验证的目的是防止过拟合,利用网格搜索可以在指定的范围内寻找最优参数)
  • 使用最优参数来训练模型;
  • 测试得到的分类模型。

SVM算法应用

下面使用 SVM 算法对鸢尾花数据集进行分类处理(若想下载鸢尾花数据集可从UCI官方下载)如图所示:

图1:鸢尾花数据集

数据集的中每一行都是一个鸢尾花的观察结果,前四个数据代表鸢尾花的生物属性,比如花萼长度、宽度以及花瓣的长度、宽度,最后一项表示鸢尾花的类别,共三类,分别是山鸢尾(0表示)、色鸢尾(1表示)、维吉尼亚鸢尾(2表示),我们的任务就是对它们进行正确分类,数据集的部分数据展示如下:

图2:鸢尾花数据集

下面使用支持向量机(SVM)算法对鸢尾花数据集进行分类,代码如下所示:

复制代码
  1. from sklearn.datasets import load_iris # 导入鸢尾花数据集
  2. from sklearn.svm import SVC #使用支持向量机算法
  3. import matplotlib.pyplot as plt
  4. 加载鸢尾花数据集,返回特征值 X 以及标签 y

  5. X,y = load_iris(return_X_y=True)
  6. 使用SVM.SVC分类算法搭建预测模型,并以径向基函数做为核函数的实现高维映射

  7. clf = SVC(kernel='rbf')
  8. 训练模型,使用fit喂入数据X,y,即特征值和标签

  9. clf.fit(X, y)
  10. 预测分类

  11. result=clf.predict(X)
  12. print(result)
  13. 对模型进行评分

  14. score=clf.score(X,y)
  15. print(score)
  16. plt.figure()
  17. 分割图1行1列第一个图

  18. plt.subplot(111)
  19. 选择X特征值中的第一列特征值和第三列特征值进行绘图

  20. plt.scatter(X[:,0],X[:,3],c =y.reshape((-1)),edgecolor='k',s=50)
  21. plt.show()

输出结果如下:

复制代码
# 类别预测结果
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2
2 2]
# 模型得分
0.9733333333333334

对分类结果进行可视化展示:

图3:数据可视化

支持向量机算法在分类问题中有着非常出色的表现,它的特点是够解决非线性问题,并且训练模型的时候不必依赖于全部数据,主要使用处于分类边缘的样本点,因此它也适用解决小样本群体的分类问题,并且泛化能力较强。

当然,SVM 也有一些不足之处,比如核函数的寻找难度较大,并且最原始的 SVM 算法只适用于二分类问题。后经过不断的拓展、延伸,目前的 SVM 算法可以解决多分类问题,同时能够解决文本分类问题。

相关推荐
久绊A2 小时前
Python 基本语法的详细解释
开发语言·windows·python
Hylan_J5 小时前
【VSCode】MicroPython环境配置
ide·vscode·python·编辑器
莫忘初心丶5 小时前
在 Ubuntu 22 上使用 Gunicorn 启动 Flask 应用程序
python·ubuntu·flask·gunicorn
计算机小白一个6 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
万事可爱^7 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan
失败尽常态5238 小时前
用Python实现Excel数据同步到飞书文档
python·excel·飞书
2501_904447748 小时前
OPPO发布新型折叠屏手机 起售价8999
python·智能手机·django·virtualenv·pygame
青龙小码农8 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿8 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!9 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode