- A+
本文介绍基于核技巧的机器学习方法,对应于RForML之核心包:kernlab
一、kernlab简介
kernlab包是R中实现基于核技巧机器学习的扩展包(需要额外安装和加载,才能使用里面强大的算法群)。
kernlab的算法群可以解决机器学习中分类、回归、奇异值检测、分位数回归、降维等诸多任务(这个包真够强大啊)。
kernlab还包括支持向量机(SVM)、谱聚类、核主成分分析(KPCA)和高斯过程等算法。
二、kernlab安装和加载
代码如下:
- ##kernlab 安装和加载
- if(!suppressWarnings(require('kernlab')))
- {
- install.packages('kernlab')
- require('kernlab')
- }
三、kernlab应用
通过kernlab的介绍可知,kernlab包中算法可以完成机器学习很多任务。
分类问题
第一步:生成数据集(人造)
- n <- 1000 # 样本数
- p <- 2 # 变量数
- sigma <- 1 # 分布的标准差
- meanpos <- 0 # 正样本分布的均值
- meanneg <- 3 # 负样本分布的均值
- npos <- round(n/2) # 正样本数目
- nneg <- n-npos # 负样本数目
- # 生成正样本
- ##设置种子,为了试验可重复性
- set.seed(1234)
- xpos <- matrix(rnorm(npos*p,mean=meanpos,sd=sigma),npos,p)
- ##生成负样本
- set.seed(1234)
- xneg <- matrix(rnorm(nneg*p,mean=meanneg,sd=sigma),npos,p)
- ##正样本和负样本合并
- x <- rbind(xpos,xneg)
- # 生成标签
- y <- matrix(c(rep(1,npos),rep(-1,nneg)))
第二步:数据集可视化
- # Visualize the data
- plot(x,col=ifelse(y>0,1,2))
第三步:数据集划分
- ntrain <- round(n*0.8) # number of training examples
- tindex <- sample(n,ntrain) # indices of training samples
- xtrain <- x[tindex,]
- xtest <- x[-tindex,]
- ytrain <- y[tindex]
- ytest <- y[-tindex]
训练样本占比80%
第四步:训练SVM模型
- library(kernlab)
- svp <- ksvm(xtrain,ytrain,type="C-svc",kernel='vanilladot',C=100,scaled=c())
第五步:模型结果可视化和应用
1、模型结果可视化
- plot(svp,data=xtrain)
2、模型应用到测试集
- ypred <- predict(svp,xtest) ##应用到测试集
- table(ytest,ypred) ##利用table()生成混淆矩阵
- sum(ypred==ytest)/length(ytest) ##模型预测的准确率
结果如下:
ypred
ytest -1 1
-1 99 2
1 3 96
准确率:0.975
第六步:绘制ROC曲线
- if(!suppressWarnings(require('ROCR')))
- {
- install.packages('ROCR')
- require('ROCR')
- }
- ypredscore <- predict(svp,xtest,type="decision")
- pred <- prediction(ypredscore,ytest)
- perf <- performance(pred, measure = "tpr", x.measure = "fpr")
- plot(perf)
参考资料:
1 kernlab文档;https://cran.r-project.org/web/packages/kernlab/kernlab.pdf
2 kernlab作者分享文档:https://eeecon.uibk.ac.at/~zeileis/papers/Ensemble-2005.pdf
3 ROCR文档:https://cran.r-project.org/web/packages/ROCR/ROCR.pdf
4 ROC曲线含义:https://en.wikipedia.org/wiki/Receiver_operating_characteristic
作者:JackWang
个人介绍:专注于从数据中学习,努力发掘数据之洞见,积极利用数据之价值。
支付宝打赏
微信打赏
赏