基于python编程实现支持向量机算法SVM,附代码实现

推荐栏目

当我们构建svm模型时,可以设置以下参数。

SVC(C=1.0,cache_size=200,class_weight=None,coef0=0.0,

决策功能形状='ovr

,度=3,gamma='auto '内核='rbf '

max_iter=-1,概率=假,random _ state=无,收缩=真,

tol=0.001,详细=假)

让我们先来看看这些参数的含义:

(1)C:目标函数的惩罚系数C,用于平衡分类区间余量和误分类样本,默认C=1.0;

(2)核:参数为RBF(高斯核)、线性核(线性核函数)、Poly(多项式核函数)、Sigmoid核函数,默认为‘RBF’;

(3)次数:如果核使用多项式核函数,次数决定多项式的最高次幂;

(4)gamma:核函数(' Poly '' RBF '和' Sigmoid ')的系数,默认值为gamma=1/n _ features;

(5)coef0:核函数中的独立项,‘RBF’和‘sigmoid’有效;

(6)概率:是否使用可能性估计(真或假);

(7)收缩:是否进行启发式;

(8) TOL(默认=1e-3):SVM终止标准的精度;

(9)cache_size:使训练所需的内存(以MB为单位)。在大样本的情况下,缓存大小会影响训练速度。所以如果机器内存大,建议用500MB甚至1000MB。默认为200,即200MB。

(10)class_weight:指定每类样本的权重,主要是为了防止训练集在某些类中样本过多,导致训练决策过于偏向这些类。在这里,您可以自己指定每个样品的重量,或者使用“平衡”。如果使用‘平衡’的话,算法会自己计算权重,样本量小的类别对应的样本权重会高一些。当然,如果你的样本类别分布没有明显的偏向,你可以选择默认的' None'(11)verbose而不管这个参数:它和多线程有关,所以你不太明白它的意思;

(12)max_iter:最大迭代次数,默认=1,如果max_iter=-1,无限制;

(13)决策_功能_形状:分类决策

“Ovo”一对一,“ovr”多对多或无,默认值=ovr

OvR(one ve rest)的思路很简单。不管你是多少元分类,我们都可以把它看成二元分类。具体来说,对于K类的分类决策,我们把K类的所有样本作为正例,把除K类以外的所有样本作为负例,然后对它们做二元分类,得到K类的分类模型.得到其他类的分类模型等等。

OV(一对一)是每次从所有T类样本中选择两类样本,也可以归为T1和T2。将所有输出为T1和T2的样本放在一起,以T1为正例,以T2为负例,进行二元分类,得到模型参数。我们总共需要T(T-1)/2个分类。

从上面的描述可以看出,OvR相对简单,但是分类效果相对略差(这里指的是大部分样本的分布,在某些样本分布下OvR可能更好)。OvO分类比较准确,但是分类速度没有OvR快。通常,建议使用OvO来获得更好的分类结果。

(14)random_state:用于概率估计的数据重排的伪随机数发生器的种子。

1)线性核的表达式为:k (x,z)=xzk (x,z)=xz,是普通的内积。LinearSVC和LinearSVR只能用。

2)多项式核是线性不可分SVM常用的核函数之一,其表达式为:k (x,z)=( xzr) DK (x,z)=( xzr) d,其中,r,d ,r,d都需要自己定义,比较麻烦。

3)高斯核,在SVM也叫径向基函数,RBF),是libsvm的默认核函数,也是scikit-learn的默认核函数。表达式为:k (x,z)=exp ( || xz || 2) k (x,z)=exp ( || xz || 2),其中 大于0,需要自己定义。

4)Sigmoid核也是线性不可分SVM中常用的核函数之一。表达式为:k (x,z)=tanh ( xzr) k (x,z)=tanh ( xzr),其中,r,r都需要自己定义参数。

虽然核函数这么多,但其实常用的只有两种,一种是线性核函数,一种是高斯核函数。原因是它们往往效果最好,调参量比较少,不是很麻烦。当我们使用线性核函数时,我们的主要调优目标是C,当我们使用高斯核函数时,我们的主要调优目标是C和gamma。

就是调整两个参数,一个是C,一个是gamma。

c是惩罚系数,即松弛变量的系数。在优化函数中,主要平衡支持向量复杂度和误分类率之间的关系,可以理解为正则化系数。当它更大时,我们的损失函数也会更大,这意味着我们不愿意放弃遥远的离群值。这样我们会有更多的支持向量,也就是说支持向量和超平面的模型会变得更加复杂,容易过拟合。相反,当它很小时,意味着我们不关心那些离群点,我们会选择更少的样本作为支持向量,最终的支持向量和超平面模型会很简单。scikit-learn中的默认值是1。

另一个超参数是RBF核函数的参数。回想一下RBF核函数,它主要定义了单个样本对整个分类超平面的影响。大的时候单个样本对整个分类超平面的影响比较小,不容易被选为支持向量,或者整个模型的支持向量会比较小。套件学习中的默认值为“自动”

其实我们最常做的就是调整这两个参数。下面是实际使用高斯核函数时参数调整的情况。它使用sklearn的打包参考库进行在线参考,也叫暴力参考。

从sklearn导入svm从sklearn.model_selection导入GridSearchCV从sklearn导入metrics导入numpy as np导入pandas as pd导入scip y . io as SiO mat=SiO . loadmat(' ex 6 data 3 . mat ')print(mat . keys())training=PD。DataFrame(mat.get('X '),columns=['X1 '' X2 '])training[' y ']=mat . get(' y ')cv=PD。DataFrame(mat.get('Xval '),columns=['X1 '' X2 '])cv[' y ']=mat . get(' yval ')candidate=[0.01,0.03,0.1,0.3,1,3,10,30,100]combination=[(C,gamma)for C in candidate for gamma in candidate]if _ _ name _ _=' _ _ main _ _ 'parameters={ ' C 'candidate,' gamma' candidate} svc=svm。SVC() clf=GridSearchCV(svc,parameters,n _ jobs=-1)clf . fit(training[[' X1 '' X2']],training[' y '])print(clf . best _ params _)print(clf . best _ score _)ypred=clf . predict(cv[' X1 '' X2 ']])print(metrics . classification _ report(cv[' y '],ypred))

其他教程

保密资格考试题库(中国保密法题库)

2023-1-14 8:22:33

其他教程

民法典隐私权和个人信息保护内容(民法典隐私权和个人信息保护心得)

2023-1-14 8:25:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索