Lasso回归实验

Lasso回归实验

实验说明

数据集我们使用的是 sklearn包中自带的波士顿房价数据集。

  • 实验环境:Pycharm
  • Python版本:3.6
  • 需要的第三方库:sklearn、numpy

实验步骤

一个简单的 Lasso 回归实验还是那六个步骤:

  1. 加载数据集
  2. 拆分数据集
  3. 创建模型
  4. 在训练集学习得到模型
  5. 模型预测
  6. 模型评测

关于训练集和测试集的划分我们使用的是留出法。至于参数设置,我们设置随机种子为10,学习率为0.1,迭代次数为10000。

最后的结果我们使用四项指标来进行评估:

  • 平均绝对误差MAE
  • R2得分

代码如下:

# Lasso回归,Boston数据集

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_absolute_error, r2_score

# 加载数据集
boston_data = load_boston()
x = boston_data.data
y = boston_data.target

# 拆分数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=10)

# 实例化Lasso模型
lasso = Lasso(alpha=0.1, max_iter=10000)
# 训练模型
lasso.fit(x_train, y_train)
# 输出权重系数
print("coef:", lasso.coef_)
# 输出截距
print("intercept:", lasso.intercept_)

# 模型预测
lasso_predict = lasso.predict(x_test)

# 模型评估
print("MAE: ", mean_absolute_error(y_test, lasso_predict))
print("r2-score: ", r2_score(y_test, lasso_predict))

可以看到,得到的指标为:平均绝对误差MAE为4.23,R2得分为0.64
m1

参数优化

我们发现 R2得分确实有点低,只有 0.64。于是我们采用随机参数搜索的方式进行优化。

划分时随机种子设置为100。给超参数设置范围,采用随机参数选择的方式,10折交叉验证,迭代次数为100,来获得模型的最佳参数。

用最佳参数重新生成模型,再训练模型进行预测。

如果想要弄明白随机搜索的参数具体怎么设置,可以参考这一篇博客 sklearn——参数优化

代码如下:

# Lasso回归,Boston数据集

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.model_selection import RandomizedSearchCV
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_absolute_error, r2_score
import numpy as np

# 加载数据集
boston_data = load_boston()
x = boston_data.data
y = boston_data.target

# 拆分数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=100)

# 设置超参数
alpha = [0.01, 0.005, 0.001, 0.0005, 0.0001, 0.02, 0.05, 0.1, 0.2, 0.5, 1]
max_iter = [int(x) for x in np.linspace(start=1000, stop=10000, num=1000)]
random_state = [int(x) for x in np.linspace(start=10, stop=300, num=10)]
# 参数字典
params_dict = {
    'alpha': alpha,
    'max_iter': max_iter,
    'random_state': random_state
}

# 实例化Lasso模型
lasso = Lasso()
# 随机参数选择
rsCV = RandomizedSearchCV(
    estimator=lasso,
    param_distributions=params_dict,
    n_iter=100,
    scoring='r2',
    cv=10
)
rsCV.fit(x_train, y_train)
# 输出参数信息
print("最佳度量值:", rsCV.best_score_)
print("最佳参数:", rsCV.best_params_)
print("最佳模型:", rsCV.best_estimator_)

# 用最佳参数生成模型
lasso = Lasso(alpha=rsCV.best_params_['alpha'], max_iter=rsCV.best_params_['max_iter'],
              random_state=rsCV.best_params_['random_state'])
# 训练模型
lasso.fit(x_train, y_train)
# 模型预测
lasso_predict = lasso.predict(x_test)

# 模型评估
print("MAE: ", mean_absolute_error(y_test, lasso_predict))
print("r2-score: ", r2_score(y_test, lasso_predict))

可以看到,优化后的模型明显好于之前,平均绝对误差MAE为3.25,R2得分为0.76
m2

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值