返回 导航

Python / AI

hangge.com

Python - 机器学习算法库Scikit-Leran使用详解7(SVM分类算法)

作者:hangge | 2022-09-09 08:10

八、SVM 分类算法

1,基本介绍

(1)支持向量机,英文全称“Support Vector Machines”(简称 SVM),它是机器学习中最常用的一种“分类算法”。在深度学习没有普及之前,“支持向量机”可以称的上是传统机器学习中的“霸主”。
(2)建立一个最优决策超平面,使得该平面两侧距离该平面最近的两类样本之间的距离最大化,从而对分类问题提供良好的泛化能力。对于一个多维的样本集,系统随机产生一个超平面并不断移动,对样本进行分类,直到训练样本中属于不同类别的样本点正好位于该超平面的两侧,满足该条件的超平面可能有很多个,SVM 正式在保证分类精度的同时,寻找到这样一个超平面,使得超平面两侧的空白区域最大化,从而实现对线性可分样本的最优分类。

(3)支持向量机的三个重要部件为:最大间隔、高维映射、核函数。而高维映射的核心就是“核函数”,它在支持向量机中承担着两项任务,一是增加空间的维度,二是完成现有数据从原空间到高维空间的映射。
    在 Pyhthon Sklearn 库提供了多种核函数,使用不同的核函数会对最终的分类效果带来不同程度影响,因此要选择使得分类效果最优的核函数。具体核函数如下:
  • linear:选择线性函数;
  • polynomial:选择多项式函数;
  • rbf:选择径向基函数;
  • sigmoid:选择 Logistics 函数作为核函数;
  • precomputed:使用预设核值矩阵,
  • SVC 类默认以径向基函数作为核函数。

2,使用样例

(1)下面我们以 sklearn 库中自带的鸢尾花数据集对 SVM 算法进行简单的应用。
    支持向量机算法被包含在 sklearn.svm 模块中,该模块提供了 7 个常用类,这些不同的类分别应用了不同的核函数,因此它们可以解决不同的问题,比如分类问题、回归问题以及无监督学习中的异常点检测等。下面是对这个7个类的简单介绍:
  • LinearSVC:基于线性核函数的支持向量机分类算法
  • LinearSVR:基于线性核函数的支持向量机回归算法
  • SVC:可选择多种核函数的支持向量机分类算法,通过“kernel”参数可以传入(默认以径向基函数作为核函数)
  • SVR:可选择多种核函数的支持向量机回归算法
  • NuSVC:与 SVC 非常相似,但可通过参数“nu”设置支持向量的数量
  • NuSVR:与 SVR 非常相似,但可通过参数“nu”设置支持向量的数量
  • OneClassSVM:用支持向量机算法解决无监督学习的异常点检测问题
#导入 sklearn 提供的鸢尾花数据
from sklearn.datasets import load_iris
#导入 导入skleran 提供的支持向量机算法
from sklearn.svm import SVC
#导入skleran 提供的分割数据集的方法
from sklearn.model_selection import train_test_split
#导入pandas
import pandas as pd
   
#加载数据集
iris = load_iris()
#分割数据集训练集,测试集
x_train,x_test,y_train,y_test=train_test_split(iris['data'],iris['target'],random_state=0)
#使用SVM.SVC分类算法搭建预测模型,并以径向基函数做为核函数的实现高维映射
model=SVC(kernel='rbf')
#训练模型
model.fit(x_train,y_train)
#训练后用测试集对模型进行评分
print("模型评分:",model.score(x_test,y_test))
print('-----------------------------------------------------')
   
print('测试集前5条数据特征值:')
print(pd.DataFrame(x_test).head(5))
print('-----------------------------------------------------')
print('测试集前5条数据目标值:')
print(pd.DataFrame(y_test).head(5))
print('-----------------------------------------------------')
#使用模型预测
y_predict=model.predict(x_test)
print('使用模型预测测试集前5条数据的目标值:')
print(pd.DataFrame(y_predict).head(5))

(2)运行结果如下:
评论

全部评论(0)

回到顶部