机器学习领域最经典的算法有哪些?那一定有它——岭回归!
谈到机器学习,不能忽视的就是回归。今天小云给大家推荐一个机器学习领域的常青树——岭回归。岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。怎么样?是不是有点意思?
小云为今天的学习过程准备了一个分析案例,使用的数据是一个前列腺癌数据集。该数据集来源是斯坦福大学医学中心为接受根治性前列腺切除术的患者临床数据。共有97个病人样本,每个样本包含9个特征。数据样例如下图所示。其中lpsa为结果变量,即为前列腺特异性抗原 (PSA)值的对数值,本次分析即为预测病人术后PSA值,以探索PSA水平是否是有效的预后特征。

这个数据集包含在R中的ElemStatLearn中,小伙伴们可以自行下载哦!话不多少,分析流程开始吧!
#收费区域
加载R包及数据
library(ElemStatLearn)
library(caret)
library(glmnet)
data(prostate)
str(prostate)
#数据预处理
展示数据后,我们发现gleason特征有6或者比6大的数值,为了方便我们将其转换为二分类变量,用0代表6,1代表比6大的数值。
prostate$gleason<-ifelse(prostate$gleason==6, 0, 1)
#测试集训练集划分
train<-subset(prostate, train ==TRUE)[, 1:9]
str(train)
test <-subset(prostate, train==FALSE)[,1:9]
str(test)
#构建回归模型
x <-as.matrix(train[, 1:8])
y <-train[, 9]
#岭回归
ridge <-glmnet(x, y, family =“gaussian”, alpha =0)
print(ridge)
#查看系数和L1范数的关系
plot(ridge, label =TRUE)

#查看系数随着lambda值变化的趋势
plot(ridge, xvar =“lambda”, label =TRUE)

#十折交叉验证
cvfit <- cv.glmnet(x, y,nfolds = 10)
plot(cvfit)

#选择超参数
print(cvfit$lambda.min) #0.001572009
print(cvfit$lambda.1se) #0.1367253
#可以查看不同超参数下模型参数估计结果,此处为0.1
coef(ridge,s=0.1)
#指定测试数据
newx<-as.matrix(test[, 1:8])
#预测结果,此处为了方便指定超参数为0.1
ridge.y=predict(ridge,newx =newx, type =“response”, s=0.1)
#预测结果与实际结果差异可视化
plot(ridge.y , test$lpsa, xlab ="Predicted", ylab ="Actual", main ="Ridge Regression")
结果总结

可以看出,整体预测结果基本在0-4范围的对角线附近,只有最上方出现了两个离群点,说明PSA这个特征可以基本表示病人的临床水平,可以作为有效特征。但是在实际情况中,我们建议对异常值进行更深入的研究,以找出它们是否真的与其他数据不同。
通过上面的分析案例,屏幕前的你有没有开始对岭回归感兴趣了呢?相信已经跃跃欲试了吧!那么快快去试试看,看看岭回归能不能给你带来一些惊喜!(文章结尾推荐一下小云新开发的零代码云生信分析工具平台包含超多零代码小工具,上传数据一键出图,感兴趣的小伙伴欢迎来参观哟,网址:http://www.biocloudservice.com/home.html)

