Python机器学习|广义线性模型(3) | 岭回归

from sklearn.datasets import load_diabetes
# 载入糖尿病数据集
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

X, y = load_diabetes().data, load_diabetes().target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8)
# 使用岭回归进行拟合
"""
增加alpha值会降低特征变量的系数,使其趋于零,从而降低在训练集的性能,但更有助于泛化
"""
ridge = Ridge().fit(X_train, y_train)
print("训练数据集得分:{:.2f}".format(ridge.score(X_train, y_train)))
print("测试数据集得分:{:.2f}".format(ridge.score(X_test, y_test)))

训练数据集得分:0.43
测试数据集得分:0.43

ridge10 = Ridge(alpha=10).fit(X_train, y_train)
ridge01 = Ridge(alpha=0.1).fit(X_train, y_train)
lr = LinearRegression().fit(X_train, y_train)
"""
绘制图形
"""

# 绘制alpha=1时的模型系数
plt.plot(ridge.coef_, 's', label='Ridge alpha=1')
# 绘制alpha=10时的模型系数
plt.plot(ridge10.coef_, '^', label='Ridge alpha=10')
# 绘制alpha=0.1时的模型系数
plt.plot(ridge01.coef_, 'v', label='Ridge alpha=0.1')
# 绘制线性回归的系数作为对比
plt.plot(lr.coef_, 'o', label='linear regression')
plt.xlabel("coefficient index")
plt.ylabel("coefficient magnitude")
plt.hlines(0, 0, len(lr.coef_))
plt.legend()
plt.show()

在这里插入图片描述
当alpha=10时,特征变量系数大多在0附近;
而当alpha=1时,岭模型的特征变量系数普遍增大了;
而当alpha=0.1时,特征变量的系数就更大了,甚至大部分与线性回归的点重合了;
而线性回归模型由于没有经过任何正则化处理,其所对应的特征变量就会非常大。

"""
取一个固定的alpha值,然后改变训练集的数据量
"""
from sklearn.model_selection import learning_curve, KFold
import numpy as np


# 定义一个绘制学习曲线的函数
def plot_learning_curve(est, X, y):
    # 将数据进行20次拆分用来对模型评分
    training_set_size, train_scores, test_scores = learning_curve(
        est, X, y, train_sizes=np.linspace(.1, 1, 20), cv=KFold(20, shuffle=True, random_state=1))
    estimator_name = est.__class__.__name__
    line = plt.plot(training_set_size, train_scores.mean(axis=1), '--',
                    label="training " + estimator_name)
    plt.plot(training_set_size, test_scores.mean(axis=1), '-',
             label="test" + estimator_name, c=line[0].get_color())
    plt.xlabel('Training set size')
    plt.ylabel('Score')
    plt.ylim(0, 1.1)


plot_learning_curve(Ridge(alpha=1), X, y)
plot_learning_curve(LinearRegression(), X, y)
plt.legend(loc=(0, 1.05), ncol=2, fontsize=11)
plt.show()

在这里插入图片描述
无论是在岭回归还是在线性回归中,训练数据集的得分都比测试数据集要高。
由于岭回归是经过正则化的模型,因此它在整个图像中训练数据集的得分要比线性回归的得分低。
然而,岭回归在测试数据集的得分与训练数据集的得分差异要小一些。
随着数据量的增加,线性回归在训练数据集的得分是下降的,这说明随着数据增加,线性回归模型越不容易产生过拟合的现象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值