请选择 进入手机版 | 继续访问电脑版
楼主: Iris2126
7131 12

[程序分享] 【R】支持向量机模型实现 [推广有奖]

  • 1关注
  • 33粉丝

禁止发言

讲师

8%

还不是VIP/贵宾

-

威望
0
论坛币
2800 个
通用积分
32.3924
学术水平
34 点
热心指数
32 点
信用等级
33 点
经验
7201 点
帖子
370
精华
0
在线时间
153 小时
注册时间
2015-12-30
最后登录
2016-11-22

Iris2126 发表于 2016-2-2 11:00:13 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

许多机器学习文章中都提到支持向量机算法的神奇之处。然而,当我用它来处理真实数据以获得较高精度的分类模型时,我偶然发现了几个问题。
本文所提到的模型是基于 R 语言中的包 e1071 所实现的。 首先,你需要安装该软件包并加载之:

  1. install.packages(“e1071”) library(“e1071”)
复制代码


当你处理二分类问题时,SVM 算法的表现非常优异。该方法通过寻找最佳分割线从而将数据分成两个不同的数据集。SVM既可以处理线性分类问题,也可以处理非线性分类问题。其分类器被称为超平面。

变量标准化

在你开始建模前,你需要做的第一件事是:标准化变量数据。SVM 利用这些变量构建分类器从而将数据进行分类,需要注意的是:这些变量越好地刻画你的数据集,你所得到的分类结果将越精确。如果这些变量没有预先被标准化处理,那么绝对值较大的变量将会具有更大的影响力,这意味着某些参数将起主导作用。如果这不是你想要的结果,那么请务必做好数据标准化处理。


参数调整

调整 SVM 算法中的参数也是非常重要的一个步骤,我们需要调整 SVM 算法的参数以获得更优的拟合结果。我们必须明确一点:SVM 算法的表现取决于如何选择最佳参数,即使相当接近的参数值也有可能产生差异巨大的分类结果。因此,为了更好地解决问题,我们需要检验不同参数值下模型的表现情况。R 中有一个非常好的工具—— tune.svm() 。该工具可以利用十折交叉验证法计算不同参数值情况下的分类误差,并返回具有最小分类误差的参数值。

  1. # Example of tune.svm() output:parameters = tune.svm(class~., data = train_set, gamma = 10^(-5:-1), cost = 10^(-3:1))summary(parameters)Parameter tuning of ‘svm’:- sampling method: 10-fold cross validation- best parameters: gamma cost   0.1    1- best performance: 0.1409453- Detailed performance results:   gamma cost     error  dispersion1  1e-05  0.1 0.2549098 0.0106932382  1e-04  0.1 0.2548908 0.0106898283  1e-03  0.1 0.2546062 0.0106856834  1e-02  0.1 0.2397427 0.0103882295  1e-01  0.1 0.1776163 0.0145910706  1e-05  1.0 0.2549043 0.0106912667 1e-03  1.0 0.2524830 0.0106602628 1e-02  1.0 0.2262167 0.0103915029 1e-01  1.0 0.1409453 0.00989874510 1e-05 10.0 0.2548687 0.01069081911 1e-04 10.0 0.2545997 0.01068652512 1e-03 10.0 0.2403118 0.01039416913 1e-02 10.0 0.1932509 0.00998487514 1e-01 10.0 0.1529182 0.013780632
复制代码


参数 gamma 表示超平面的线性平滑度,因此当你使用线性核函数构建 SVM 时,模型中不存在 gamma 参数。我们知道:gamma 越小,超平面越接近于直线,但是如果 gamma 选取过大,超平面将会变得非常弯曲,这会导致过度拟合问题。

同时,我们还可以调整参数 C 来提高模型精度。参数 C 代表 SVM 模型 soft margin 的规模, soft margin 表示超平面周围的灰色区域面积。这意味着位于 soft margin 区域中的点将没有被分类。其中 C 越小,soft margin 的面积越大。

如何预处理数据

R语言中的 svm() 函数需要输入一个矩阵或者数据框格式的数据,如下表所示:其中包含一个分类变量和其他解释变量。

  1. class    f1    f2    f31     0 0.100 0.500 0.9002     0 0.101 0.490 0.9013     0 0.110 0.540 0.8904     0 0.100 0.501 0.8095     1 0.780 0.730 0.0906     1 0.820 0.790 0.1007     1 0.870 0.750 0.0998     1 0.890 0.720 0.089
复制代码

其中class表示分类变量,my_data表示数据集。后续的参数值采用上述方法选择最优值。


检验结果

常见做法是将数据集分成训练集和测试集,其比例为2:1。利用测试集来计算拟合误差。

  1. # 切分数据data_index = 1:nrow(my_data)testindex = sample(data_index, trunc(length(data_index)*30/100))test_set = my_data[testindex,]train_set = my_data[-testindex,]# 拟合模型my_model = svm(class~., data = train_set, kernel = "radial", gamma = 0.1, cost = 1)# 预测结果# test[,-1] 表示剔除class变量my_prediction = predict(my_model, test_set[,-1])
复制代码

注意事项

1.tune.svm() 需要运行一定的时间,具体取决于数据集的大小。但是不管怎么说,这个过程是非常有意义的。

2.SVM 模型的参数优化过程中,我们通常取对数间隔值,从10^-6到10^6。注释

3.如果你的标识变量是数值型变量(如本文中的 0-1 变量),那么你的预测结果将会是一个数值,该数值反映了测试集输出结果和某个类别之间相近程度。如果你想要得到原始的分类结果,你需要在 svm() 中设置 type = C-classification。

4.如果你的数据集的样本个数小于 10,此时你运行 tune.svm() 会出错:

  1. Error in tune(“svm”, train.x = x, data = data, ranges = ranges, …) : ‘cross’ must not exceed sampling size!
复制代码

因此,利用 SVM 建模分析时要确保你的数据集足够大。
原文作者:Renata Ghisloti Duarte de Souza

译者:数据工匠

原文链接:http://datartisan.com/article/detail/75.html


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:支持向量机 向量机 performance parameters Validation R语言实战 R语言教程 R语言学习 支持向量机 建模

本帖被以下文库推荐

Iris2126 发表于 2016-2-2 11:13:07 |显示全部楼层 |坛友微信交流群
消灭零回复

使用道具

cheetahfly 在职认证  发表于 2016-2-2 13:46:40 |显示全部楼层 |坛友微信交流群
支持鼓励一下。

使用道具

Iris2126 发表于 2016-2-3 09:55:15 |显示全部楼层 |坛友微信交流群
cheetahfly 发表于 2016-2-2 13:46
支持鼓励一下。
谢谢

使用道具

Iris2126 发表于 2016-2-17 10:00:06 |显示全部楼层 |坛友微信交流群
来捞一捞帖子

使用道具

weihancool 发表于 2016-2-20 18:45:38 |显示全部楼层 |坛友微信交流群
支持鼓励一下

使用道具

Iris2126 发表于 2016-2-22 10:10:18 |显示全部楼层 |坛友微信交流群
weihancool 发表于 2016-2-20 18:45
支持鼓励一下
谢谢

使用道具

Iris2126 发表于 2016-2-23 16:29:39 |显示全部楼层 |坛友微信交流群

使用道具

Iris2126 发表于 2016-3-1 17:25:59 |显示全部楼层 |坛友微信交流群

使用道具

Iris2126 发表于 2016-3-8 10:56:39 |显示全部楼层 |坛友微信交流群

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 19:49