Lasso回归代码,R语言自带数据集,可直接出图和结果

library(rms)
head(lung)
data <- lung#把数据集赋值给data
data <- na.omit(data)#把存在缺失值的行进行删除
#如果数据集中有3分类的变量,需要设置哑变量
#假设数据集中X变量为3分类变量,水平分别是A,B,C,这时需要将X处理成两个哑变量
#data$X_B <- ifelse(data$X=="B",1,0)
#data$X_C <- ifelse(data$X=="C",1,0)
library(glmnet)#岭回归,lasso回归,弹性网络
library(caret)
#使用岭回归和lasso回归都要把数据处理为矩阵
View(data)
#数据的类型不能是double,即双精度浮点型,否则也会报错
X <- as.matrix(data[,4:10])
#自变量是4-10列
Y <- as.matrix(data[,3])
#因变量是3列
#glmnet()中alpha=0表示岭回归,alpha=1表示lasso回归
lasso <- glmnet(X,Y,alpha=1,family = "binomial",nlambda = 100)
#如果是岭回归nlambda = 100,将模型进行100次的迭代
#第100次的模型就是最优的模型
#如果是lasso回归,nlambda = 100,不一定进行100次的迭代
#lasso会找到最优解,最优解之后不再进行迭代
print(lasso)
View(print(lasso))
#Df自由度,%Dev偏差百分比,Lambda数
#只运行到了第55个,得到最优解,后面不再运行
#最优解选择的依据是偏差百分比,如果再进行运算对偏差百分比的提高很微弱
#软件就会停止运算
NROW(lasso$lambda)
#number of row 查看进行了多少次的迭代
lasso$lambda[55]
#最优结果对应的lambda值0.0007043493
plot(lasso)
#横坐标是L1范数,Y轴是系数值,显示了L1范数和系数值之间的关系
#图的上方数字,表示模型中自变量的个数,发现L1范数变化
#自变量数目变化
#把横坐标改为lambda
plot(lasso,xvar = "lambda")
#lambda减小,压缩参数也减小,系数绝对值增加
#查看回归的系数
#第55次迭代的模型应该是最优的模型lambda值为0.0007043493
coef(lasso,s=  0.0007043493)
#显示这个值所对应的回归系数
#交叉验证lasso
#生成0-0.5之间的200个lambda值,储存在lambdas
lambdas <- seq(0,0.5,length.out = 200)
#设置随机数
set.seed(123)
#进行交叉验证
#alpha=1表示lasso回归
#nfolds=3表示3折交叉验证
cv.lasso <- cv.glmnet(X,Y,alpha=1,
                      lambda =lambdas, nfolds = 3,family = "binomial")
plot(cv.lasso)
#横坐标是lambda的对数值
#纵坐标是MES
#横坐标上方是自变量个数
#两条虚线表示,均方误差最小时对应的lambda值
#以及距离最小均方误差一个标准误时,对应的lambda的对数值
#最优模型的lambda是距离最小均方误差一个标准误时,对应的lambda的对数值

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一个简单的代码示例。 首先,我们需要导入波士顿房价数据集和所需的库: ```python from sklearn.datasets import load_boston from sklearn.linear_model import Ridge, Lasso from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error ``` 接着,我们可以加载波士顿房价数据集: ```python boston = load_boston() X = boston.data y = boston.target ``` 然后,我们将数据集拆分为训练集和测试集: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 现在我们可以使用岭回归Lasso回归来训练模型并进行预测: ```python # 岭回归 ridge = Ridge(alpha=0.1) ridge.fit(X_train, y_train) ridge_pred = ridge.predict(X_test) # Lasso回归 lasso = Lasso(alpha=0.1) lasso.fit(X_train, y_train) lasso_pred = lasso.predict(X_test) ``` 最后,我们可以计算均方根误差(RMSE)来评估模型的性能: ```python print("Ridge regression RMSE: ", mean_squared_error(y_test, ridge_pred, squared=False)) print("Lasso regression RMSE: ", mean_squared_error(y_test, lasso_pred, squared=False)) ``` 完整代码如下: ```python from sklearn.datasets import load_boston from sklearn.linear_model import Ridge, Lasso from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error boston = load_boston() X = boston.data y = boston.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ridge = Ridge(alpha=0.1) ridge.fit(X_train, y_train) ridge_pred = ridge.predict(X_test) lasso = Lasso(alpha=0.1) lasso.fit(X_train, y_train) lasso_pred = lasso.predict(X_test) print("Ridge regression RMSE: ", mean_squared_error(y_test, ridge_pred, squared=False)) print("Lasso regression RMSE: ", mean_squared_error(y_test, lasso_pred, squared=False)) ``` 希望这可以帮助您开始使用岭回归Lasso回归预测波士顿房价数据集
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值