支持向量回归预测怎么做_分类问题Ⅰ——支持向量机与逻辑回归二分类示例

31a4e5072be9c5b7f100d233df38108f.png

写在前面:

分类是管理学、金融学、统计学等常用的实证分析方法之一,目前,分类的方法有逻辑回归、支持向量机、贝叶斯分类、决策树、支持向量机、卷积神经网络、线性判别分类器等等。

方法有很多,不同的方法适用于不同的环境,其难易度也不同。目前最最常见的分类器应该是逻辑回归。此处对硕士论文常见的逻辑回归和支持向量机模型进行实例分析,讲述在R语言中的建模过程与结果。

在开始建模前,首先说一下,为什么拿这两个模型进行对比,逻辑回归不仅可以输出结果还可以输出其对应的概率。

拟合出来的参数可以清晰地看到每一个特征对结果的影响。但是本质上是一个线性分类器,特征之间相关度高时不适用。同时异常值对拟合结果影响巨大。但是SVM不存在这种问题,SVM通过核方法的映射避免了非线性及异常值的影响,从而达到了比逻辑回归的精度更高的目标。

但是其问题也有,即模型运算慢,少量数据通过SVM模型可以达到理想的结果,但是对于大量数据来说,他的运行速度太漫长,所以逻辑回归的应用更广泛。

01 数据集介绍

1936年费希尔收集了三种鸢尾花(分别标记为setosa(山鸢尾)、versicolor(变色鸢尾)和virginica(维吉尼亚鸢尾))的花萼和花瓣数据。包括花萼的长度和宽度,以及花瓣的长度和宽度。改数据包为iris,共包含150条数据。

我们将根据这四个特征来建立支持向量机模型从而实现对鸢尾花的分类判别任务。

如下图所示:iris数据集中更有三种品种的鸢尾,蓝色为山鸢尾、粉色为变色鸢尾,绿色为维吉尼亚鸢尾。

其中山鸢尾和其他两个品种的鸢尾在花瓣的长度和宽度上具有显著的差异,而变色鸢尾和维吉尼亚鸢尾并没有特别明显的界限。

3ea41d386db4633cbc4091140d7ffe32.png

为了方便大家理解,这里不进行多分类,只进行二分类。而山鸢尾与其他品种鸢尾的差异明显,如果选取山鸢尾和非山鸢尾进行分类预测,那么我们无法比较逻辑回归和SVM的精度的区别。

变色鸢尾的花瓣长与宽度在其他两种鸢尾花瓣特征的中间,如果选取变色鸢尾和非变色鸢尾进行分类,则逻辑回归无法进行。

所以本文选取virginica(维吉尼亚鸢尾)作为评判,进行非维吉尼亚鸢尾(赋值为0)和维吉尼亚鸢尾(赋值为1)的分类。

9d0446f764aaaab5aa19f08a68da315b.png

初始设置:

set.seed(1)

is = sample(1:150)#将1到150随机打乱。

z = iris[is,]#将iris原本按分类排序的数据改为按照is里的顺序一一排序。

head(z)#查看前六行数据。

7092f6e10b87dc27b85a50d018312aec.png

is.virginica = (z$Species =='virginica')#因为是三类品种,这里我们进行二分类的话,要将是virginica的视作TRUE,将其他品种视作FLASE。

z$Species = as.numeric(is.virginica)#将TRUE和FLASE转变为数值型1和0。

x = z[1:100,] #选取随机排序后数据的前100条作为训练集。

testset = z[101:150,] #选取后50条数据作为测试集。

y = testset[,1:4]#提取出测试集前四列的特征(花萼长、宽和花瓣的长、宽)作为预测时的输入。

real= testset[,5]#提取测试集真实的分类结果。

02 逻辑回归分类预测

fit=glm(Species~.,data=x,family=binomial(logit))#进行逻辑回归的拟合。

pred=predict(fit,newdata=y,type='response')#获得逻辑回归的拟合模型后利用前面准备好的测试集的前四列特征进行预测。

y.hat = as.numeric(pred > .5)#由于glm模型输出的为连续数值而非0,1,所以将其进行0,1分类。

cbind(y.hat, real)#展示后50条特征的预测结果与实际结果。

y.hat real

[14,] 0 1

[43,] 0 1

#从上述输出结果可以看出第14和第43条的结果的预测值和真实值有差异。(由于数据长,这里只展现预测错误的数据)

res=table(y.hat, real)#通过田字表观察一共几个出现了差异。

res

886764f4ea1d446ae47eaf9a333358cb.png

#上述输出说明有两个值原始结果是赋值为1,预测结果却赋值为0,存在差异。

accurary=sum(diag(res))/sum(res)#通过上述田子表测算精确度

accurary

[1] 0.96

#精确度为96%,说明50个数据中有48个成功预测,有两个预测失败。

03 支持向量机分类

library(e1071)#svm模型必须用的包

fit= svm(Species~.,data=x)#拟合SVM模型

pred = predict(fit, newdata=y)#预测

y.hat = as.numeric(pred > .5)#赋值

cbind(y.hat, real)#对比结果

y.hat real

[14,] 0 1

#由预测值和真实值的对比可以发现,只有第14个出现了预测和真实值的差异(由于数据长,这里只展现预测错误的数据)

res=table(y.hat, real)

res

a48a951abfb83038b536023ff2d14ddf.png

accurary=sum(diag(res))/sum(res)

accurary

[1] 0.98

#预测精度98%,50个预测值中只有一个预测错误。

04 总结

在本文的分类预测中,SVM模型的预测精度略胜一筹。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值