数据挖掘:Top 10 Algorithms in Data Mining(三)SVM

来源:互联网 发布:知乎离线 编辑:程序博客网 时间:2024/05/18 13:48

     SVM(support vector machine)是一种基于分类间隔(margin)来训练的分类器,它是在1995年左右由Vapnik等人基于VC维而提出的高效分类器,其原理如下图最大化类间间隙。参考出处

      SVM主要用于解决小样本和非线性分类问题。SVM解决非线性问题的办法为通过将原有的非线性可分的空间通过映射转换到高维线性可划分空间中,因此SVM会使得特征空间的维数升高。此处以φ(•) 来表示这种映射函数。则原模式Xk 在高维空间中变为yk=φ(Xk) 。有次可以看出原有的非线性问题变换为寻找合适的映射函数 φ(•)。映射函数的选择通常是根据问题的先验知识来确定,如果算法设计者的知识有限,则可以选择常用的多项式或者高斯函数。理论上可将源特征空间映射到任意高维的线性空间中。

 svn1

保证类别间的边界最大

SVM的训练使用无约束的拉格朗日法。根据原来的极小化目标,可以构造新的函数:

 svn2

其中||∂|| 为极小化目标,问题转换为寻找使得函数L()极小的权向量∂和使其极大的拉格朗日待定因子ak>=0 。最后一项为使样本正确分类的目标。可以使用KT构造法将其转换为极大化形式:

 svn3

以及约束条件:

 svn4

这些方程都可以通过二次规划来求解,除此还有其它经典解法。

      支持向量机的重要优点为可以将分类复杂度与支持向量的个数联系到一起,而使其与映射后的空间的维数无关。这也使得SVM不易出现过拟合。

著名的SVM 工具有台湾大学陈Doctor Chen的libSVM 包。官方站点http://www.csie.ntu.edu.tw/~cjlin/libsvm/上面的介绍为:

LIBSVM : a simple and easy-to-use support vector machines tool for classification (C-SVC, nu-SVC), regression (epsilon-SVR, nu-SVR), and distribution estimation

      该工具包主要由C++实现,还提供了对Python, R, Splus, MATLAB, Perl, Ruby语言的接口,可见接口支持非常丰富。其简单易用,是高校使用最多的一个第三方免费SVM包。Matlab 也有自己的SVM toolbox 但并没有libSVM强大,所以libSVM是高校教师指导新手和学生实验的不2选择(此处不是打广告)。下面给一个matlab使用libSVM的例子(需要将libSVM的相关的库文件和自己的.m放同个目录):

train_num = 5;
[x y z n] = size(YFL);
train_data = YFL(:,:,:,1:train_num);
test_data= YFL(:,:,:,train_num+1:n);
train_label = YLMask(:,:,:,1:train_num);
test_label = YLMask(:,:,:,train_num+1:n);
predict_label = zeros(x,y,z,n−train_num);
%training data
train_data_line = train_data(:,:,:,1);
train_label_line = train_label(:,:,:,1);
train_data_line = reshape(train_data_line,x*y*z,1);
train_label_line = reshape(train_label_line,x*y*z,1);
train_label_line = train_label_line(train_data_line>0);
train_data_line = train_data_line(train_data_line>0);

%train a model with this sample set
model_linear = svmtrain(train_label_line, train_data_line, '−t 0 wi 0.05');
save model_linear model_linear


for i=1:z
test_label_line = test_label(:,:,i,:);
test_data_line = test_data(:,:,i,:);
test_data_line = reshape(test_data_line,x*y*(n−train_num),1);
test_label_line = reshape(test_label_line,x*y*(n−train_num),1);
[predict_label_L, accuracy_L, dec_values_L] = svmpredict(test_label_line, test_data_line, model_linear);
unique(predict_label_L);
predict_label(:,:,i,:) = reshape(predict_label_L, x, y,1,5);
end

   我这里YFL是一个MRI数据矩阵,维度为[128,256,256,10](即10个128*256*256的MRI图像). 在这里我用前5个MRI作训练数据,后面5个作为待分类数据。

更多资料参考:

http://www.support-vector-machines.org 该站点提供了很多SVM相关的资料。包括相关的书记,软件,在各种问题中的应用,以及相关的改进算法。

《Support Vector Machines for Pattern Classification》 Shigeo Abe, 2ed 不错的介绍SVM的书之一,有电子版。深入介绍了SVM的一些复杂使用方式及变形。

http://www.tnove.com

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手指肿胀疼痛变粗怎么办 iphone系统占用内存大怎么办 手机系统占用内存大怎么办 头盔固定配件掉了怎么办 移动4g网络不好怎么办 wifi登录密码忘记了怎么办 电脑登录密码忘记了怎么办 笔记本电脑登录密码忘记了怎么办 信用卡登录密码忘记了怎么办 华为p9后置摄像头模糊怎么办 手机图片文件夹删了怎么办 发票系统导出的xml怎么办 微信支付被限制怎么办 跨行三天不到账怎么办 测速正常但实际很慢怎么办 善领wifi上网慢怎么办 文件太大拷贝不到u盘怎么办 电脑的视频文件不显示缩略图怎么办 无线网连接不上怎么办 路由器wifi密码忘了怎么办 路由器账号密码忘了怎么办 刷卡刷多了钱怎么办 刷卡刷了两次钱怎么办 小米手机强刷后一联网就被锁怎么办 苹果刷机出现的问题怎么办 小米手机解不开图案锁怎么办 小米6无限重启怎么办 小米5一直显示mi怎么办 小米手机电池进入休眠状态怎么办 小米3s开不开机怎么办 小米n充电关机开机不了怎么办? 关机后强制刷机怎么办 红米手机开机画面怎么办 红米note1无法清理数据怎么办 红米2a密码忘记怎么办 线刷也不成功该怎么办 红米2开不了机怎么办 魅族无限重启怎么办 坚果pro无法双清怎么办 usb外置网卡网速慢怎么办? 无线路由器被改密码怎么办