700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 机器学习(MATLAB实现)——SVM支持向量机(一)

机器学习(MATLAB实现)——SVM支持向量机(一)

时间:2020-08-16 16:14:35

相关推荐

机器学习(MATLAB实现)——SVM支持向量机(一)

SVM支持向量机

支持向量机理论概述二分类支持向量机多分类支持向量机libsvm工具箱使用简介训练函数预测函数libsvm参数实例一点拓展参考文献

支持向量机理论概述

核函数用于将支持向量机的点集合映射到更高维的空间,这样就可以将现有空间中的数据点实现用超平面的划分。

常用的核函数如下:

线性核函数: K ( x , x i ) = x T x i K(x,x_i)=x^Tx_i K(x,xi​)=xTxi​;

多项式核函数: K ( x , x i ) = ( γ x T x i + r ) p K(x,x_i)=({\gamma}x^Tx_i+r)^p K(x,xi​)=(γxTxi​+r)p

径向基核函数: K ( x , x i ) = e x p ( − γ ∣ ∣ x − x i ∣ ∣ 2 ) , γ > 0 K(x,x_i)=exp(-{\gamma}||x-x_i||^2),{\gamma}>0 K(x,xi​)=exp(−γ∣∣x−xi​∣∣2),γ>0

两层感知器核函数: K ( x , x i ) = t a n h ( γ x T x i + r ) K(x,x_i)=tanh({\gamma}x^Tx_i+r) K(x,xi​)=tanh(γxTxi​+r)

二分类支持向量机

推导过程略(详见周志华《机器学习》[^2])

构造决策函数: f ( x ) = s g n ( ∑ i = 1 l a i ∗ y i K ( x , x i ) + b ∗ ) f(x)=sgn(\sum_{i=1}^{l}a_i^*y_iK(x,x_i)+b^*) f(x)=sgn(∑i=1l​ai∗​yi​K(x,xi​)+b∗)

多分类支持向量机

构造多分类支持向量机的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多分类。这种方法对于计算复杂度比较高,实现较为困难。另一类是间接法,通过组合多个二分类器来实现多分类器的构造,常见的方法有一对多和一对一两种。

(1)一对多:训练时依次把某个类别的样本归为一类,其它剩余的样本归为另一类,这样k个类别就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。

(2)一对一:在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计 k ( k − 1 ) / 2 k(k-1)/2 k(k−1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别就是该未知样本的类别。

(3)层次支持向量机。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,知道得到一个单独的类别为止。

上述的多分类支持向量机在MATLAB中可以通过fitcecoc实现,这样就可以在仅包含有二分类的MATLAB中实现多级分类。

libsvm工具箱使用简介

训练函数

model=svmtrain(train_label,train_data,options);

输入:

train_data:训练集属性矩阵,大小为nm,n表示样本数,m表示属性数目(维数),数据类型double。

train_label:训练集标签,大小为n1,n表示样本数,数据类型double

options:参数选项。

输出:

model:训练得到的模型,是一个结构体。

预测函数

[predict_label,accuracy/mse,dec_value]=svmpredict(test_label,test_data,model);

输入:

test_data:测试集属性矩阵,大小为Nm,N表示测试集样本数,m表示属性数目(维数),数据类型为double。

test_label:测试集标签,大小为N1,N表示样本数,数据类型为double。注意:如果没有测试集标签,虽然可以用任意的N1向量来代替但是此时输出的accuracy/mse就没有参考价值。

model:svmtrain训练得到的模型

输出:

predict_label:预测的测试集的标签,大小为N1,N表示样本数,数据类型为double.

accuracy/mse:一个3*1的列向量,第一个数表示分类准确率(分类问题使用),第二个数表示mse(回归问题使用),第三个数表示平方相关系数(回归问题使用)。注意:如果测试集的真实标签事先无法得知,次返回值没有参考意义。

dec_value:决策值。

libsvm参数实例

options为一些参数的选项,主要有:

-s svm类型:SVM模型设置类型(默认值为0)

0:C-SVC(C-Support Vector Classification)

1:nu-SVC(nu-Support Vector Classification)

2:one-class SVM

3:epsilon-SVR(epsilon-Support Vector Regression)

4:nu-SVR(nu-Support Vector Regression)

-t 核函数类型:核函数上设置类型(默认值为2)

0:线性核函数 u ′ v u'v u′v

1:多项式核函数 ( r ∗ u ′ v + c o e f 0 ) d e g r e e (r*u'v+coef0)^{degree} (r∗u′v+coef0)degree

2:RBF核函数(也称为高斯核函数) e x p ( − r ∣ u − v ∣ 2 ) exp(-r|u-v|^2) exp(−r∣u−v∣2)

3:sigmoid核函数 t a n h ( r ∗ u ′ v + c o e f 0 ) tanh(r*u'v+coef0) tanh(r∗u′v+coef0)

-d degree:核函数中的degree参数设置(针对多项式核函数默认值为3)

-g r(gama):核函数中的gamma参数函数设置(针对多项式rbf/sigmoid核函数,默认值为属性数目的倒数,即若k为属性数目,则-g参数默认为1/k)

-r coef0:核函数中的coef0参数设置(针对多项式/sigmoid核函数,默认值为0)

-c cost:设置C-SVC,epsilon-SVR和nu-SVR的参数(默认值为1)

-n nu:设置nu-SVC,one-classSVM和nu-SVR的参数(默认值为0.5)

-p epsilon:设置epsilon-SVR中损失函数的值(默认值为0.1)

-m cachesize:设置cache内存大小,以MB为单位(默认值为100)

-e eps:设置允许的终止阈值(默认值为0.001)

-h shrinking:是否使用启发式,0或1(默认值为1)

-wi weight:设置第几类的参数C为weight*C(对于C-SVC中的C,默认值为1)

-v n:n-fold交互检验模式,n为折数,必须大于等于2

下面是自行按照西瓜书中的3 α \alpha α数据集来实现的MATLAB代码:

clc,cleardata=load('xigua3_alpha.txt');ind=find(data(:,4)==0);data(ind,4)=-1;% ind=randi([1,17],17,1);train_data=[data(1:5,:);data(9:14,:)];test_data=[data(6:8,:);data(15:end,:)];model=svmtrain_matlab(train_data(:,4),train_data(:,2:3),'-s 0 -t 0 -c 2');[predict_label,accuracy,~]=svmpredict_matlab(test_data(:,4),test_data(:,2:3),model);

运行结果如下:

model = 包含以下字段的 struct:Parameters: [5×1 double]nr_class: 2totalSV: 10rho: 1.5519Label: [2×1 double]sv_indices: [10×1 double]ProbA: []ProbB: []nSV: [2×1 double]sv_coef: [10×1 double]SVs: [10×2 double]Parameters =003.00000.50000label =1-1nr_class =2totalSV =10nSV =55

据此我们可以分析svmtrain函数的输出内容:

一点拓展

1、MATLAB自带的SVM事先函数仅支持分类问题,不支持回归问题;而libsvm工具箱支持分类和回归问题。

2、MATLAB自带的函数SVM事先函数仅支持二分类问题,不支持多分类问题,libsvm默认采用一对一法支持多分类。

3、libsvm中的最优化问题的解决算法是序列最小最优化算法(SMO),而MATLAB自带的SVM实现函数中有三种解法可供选择:经典二次规划算法(Quadratic Programming)、序列最小最优化算法(SMO)、最小二乘法(Least-Square)。

参考文献

[1] 王小川等. MATLAB神经网络43个案例分析. 北京:北京航空航天大学出版社,.

[2] 周志华. 机器学习. 北京:清华大学出版社,

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。