数据挖掘_R_Python_ML(2): Linear Regression vs SVR

在上一篇“数据挖掘: R, Python,Machine Learning,一起学起来!”中,我们介绍了用R进行线性回归的例子。

这次我们来看看,同样一份简单的无噪声数据,用线性模型和支持向量模型分别进行回归,得出的结果是否一致。

数据我们仍然用上次的y = x + 2的那份lrdata_1.csv。要用SVR模型,我们需要安装一个新的package —— e1071。

打开R后操作如下:

> install.packages("e1071", dep = TRUE)

> library(e1071)

> mydata = read.csv(".\\lrdata_1.csv")

> x<-mydata[,1]

> y<-mydata[,2]

先用svm function进行回归,所有的参数都使用默认值:

> svm.r=svm(y~x,mydata); svm.r

Call:

svm(formula = y ~ x, data = mydata)

Parameters:

SVM-Type: eps-regression

SVM-Kernel: radial

cost: 1

gamma: 1

epsilon: 0.1

从模型输出结果我们可以看出,具体回归方法是eps-regression,核函数为radial函数。

这个模型的结果如何呢?我们来看看:

> predictedY <- predict(svm.r, mydata)

> predictedY

1 2 3 4 5 6 7

3.968246 4.273861 5.133763 6.115467 7.000000 7.884533 8.866237

8 9

9.726139 10.031754

好像和实际值差得挺远啊。我们也可以通过画图来做可视化的展示:

> plot(x,y)

> points(x,predictedY, col = "red")

图中黑点是实际值,红点是根据svm.r回归模型计算的的预测值。不难看出,红点是一条曲线,而黑点是一条直线。

我们之前用的核函数(kernel)是默认的radial函数,那如果我们把核函数换做线性核函数,是否会提高预测准确率呢?我们来试试:

> svm.r2=svm(y~x, kernel = "linear"); svm.r2

Call:

svm(formula = y ~ x, kernel = "linear")

Parameters:

SVM-Type: eps-regression

SVM-Kernel: linear

cost: 1

gamma: 1

epsilon: 0.1

Number of Support Vectors: 2

> predictedY2 <- predict(svm.r2, mydata);predictedY2

1 2 3 4 5 6 7

3.273861 4.205396 5.136931 6.068465 7.000000 7.931535 8.863069

8 9

9.794604 10.726139

再尝试一下将esp-regression改为nu-regression试试:

> svm.r3=svm(y~x, type = "nu-regression",kernel = "linear"); svm.r3

Call:

svm(formula = y ~ x, type = "nu-regression",kernel = "linear")

Parameters:

SVM-Type: nu-regression

SVM-Kernel: linear

cost: 1

gamma: 1

nu: 0.5

Number of Support Vectors: 2

> predictedY3 <- predict(svm.r3, mydata); predictedY3

1 2 3 4 5 6 7 8 9

3 4 5 6 7 8 9 10 11

svm.r3的结果和实际一致!我们再用可视化图形展示一下这个结果:

> points(x,predictedY2, col = "blue")

> points(x,predictedY3, col ="green")

图中的绿色点已经和最初的黑色点重合了!

如果我们的数据不这么简单,结果也不这么直观,靠人工或者可视化读取预测值无法判断到底哪个模型的预测准确率更高,那该怎么办?我们可以引入一个均方误差的概念来评估一个模型的准确率。

均方误差的计算公式如下,即样本各个点预测值和实际值的差的平方的总和除以样本个数。

相应的,均方根误差的为:

均方根误差越小,则说明一个模型的整体准确性越高。

我们下面就来计算一下svm.r2 和svm.r3的RMSE:

> rmse <- function(error)

+ {

+ sqrt(mean(error^2))

+ }

>

> error2 <- svm.r2$residuals; #same as mydata$Y – predictedY3

> error2

1 2 3 4 5 6

-0.27386138 -0.20539603 -0.13693069 -0.06846534 0.00000000 0.06846534

7 8 9

0.13693069 0.20539603 0.27386138

> predictionRMSE2 <- rmse(error2); predictionRMSE2

[1] 0.1767768

> error3 <- svm.r3$residuals; error3

1 2 3 4 5

-5.757728e-08 -5.027875e-08 -4.298022e-08 -3.568169e-08-2.838316e-08

6 7 8 9

-2.108464e-08 -1.378611e-08 -6.487580e-09 8.109495e-10

> predictionRMSE3 <- rmse(error3); predictionRMSE3

[1] 3.406945e-08

很明显predictionRMSE3 < predictionRMSE2。可见svm.r3是svm.r,svm.r2, svm.r3中最适合训练数据的模型。

本文分享自微信公众号 - 悦思悦读(yuesiyuedu)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-01-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏钱塘大数据

当我们讨论数据挖掘时,我们在讨论什么?

?

388120
来自专栏机器学习算法工程师

数据挖掘中的利器--XGBoost理论篇

XGBoost是各种数据挖掘或机器学习算法类比赛中每个团队都会使用且精度相对最好的算法之一(Deep Learning算法除外)。也就是说,对于刚转向机器学习领...

57190
来自专栏钱塘大数据

大数据时代:十大最热门的大数据技术

随着 大数据分析 市场快速渗透到各行各业,哪些大数据技术是刚需?哪些技术有极大的潜在价值?根据弗雷斯特研究公司发布的指数,这里给出最热的十个大数据技术。 预测...

37260
来自专栏钱塘大数据

【干货】成为数据挖掘“高手”的学习路径

新媒体管 基础篇: 1. 读书《Introduction to Data Mining》,这本书很浅显易懂,没有复杂高深的公式,很合适入门的人。另外可以用这本书...

439120
来自专栏钱塘大数据

大数据挖掘分析必备工具集,工欲善其事必先利其器

作者:钱塘数据 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

40060
来自专栏钱塘大数据

【可视化】一篇文章深入浅出解读大数据分析

新媒体管家 ? ? ? ? ? ? ? ? ? ? ? ?

376130
来自专栏钱塘大数据

【周末漫谈】如何清晰地找到合适的数据挖掘算法?

一名数据科学家所需要具备的技能组合。我们可以发现,和典型的大数据开发者或者商业分析专员相比,他的职责是多种技能和经验的有效组合。 ? 再看看数据科学家应有的技术...

381120
来自专栏钱塘大数据

17张思维导图,一网打尽机器学习统计基础

作者:大数据文摘 本文用一系列「思维导图」由浅入深的总结了「统计学」领域的基础知识,是对之前系列文章做的一次完整的梳理,也是我至今为止所有与统计有关的学习笔记。...

43790
来自专栏机器学习算法工程师

详解数据挖掘与机器学习的区别与联系

0、为什么写这篇博文   最近有很多刚入门AI领域的小伙伴问我:数据挖掘与机器学习之间的区别与联系。为了不每次都给他们长篇大论的解释,故此在网上整理了一些资料,...

394110
来自专栏ATYUN订阅号

10大数据挖掘算法及其简介

我希望你能把这篇文章作为一个跳板,学习更多关于数据挖掘的知识。 算法如下: 1. C4.5 2. k-means 3. 支持向量机 4. Apriori 5. ...

410130

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励