【机器学习】案例4.1——Ridge岭回归

运用Ridge

# 导入numpy数值计算库,命名为np(数据分析/矩阵操作的常用库)
import numpy as np
# 从sklearn的线性模型模块中导入岭回归(Ridge)类(用于实现岭回归算法)
from sklearn.linear_model import Ridge

# 生成特征矩阵X:
# np.random.rand(100,1)生成100行1列、取值在[0,1)的随机数,乘以2后取值范围变为[0,2)
# 最终得到100个样本、1个特征的数据集
X = 2*np.random.rand(100, 1)

# 生成标签y:
# 构造“真实模型(y=4+3X) + 噪声”的标签
# np.random.randn(100,1)生成100行1列、服从标准正态分布(均值0,方差1)的噪声
y = 4 + 3*X + np.random.randn(100, 1)

# 初始化岭回归模型:
# alpha=0.4:正则化强度(alpha越大,正则化约束越强)
# solver='sag':指定求解器为“随机平均梯度下降”(适用于样本量较大的场景)
ridge_reg = Ridge(alpha=0.4, solver='sag')

# 训练岭回归模型:用特征X和标签y拟合模型,学习数据中的线性关系
ridge_reg.fit(X, y)

# 预测:输入特征值为1.5时,输出对应的预测标签值
print(ridge_reg.predict([[1.5]]))

# 输出模型的截距项(对应真实模型中的“4”,因噪声存在会有轻微偏差)
print(ridge_reg.intercept_)

# 输出模型的特征系数(对应真实模型中的“3”,因正则化/噪声存在会有轻微偏差)
print(ridge_reg.coef_)

简洁版

import numpy as np
from sklearn.linear_model import Ridge

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

ridge_reg = Ridge(alpha=0.4, solver='sag')
ridge_reg.fit(X, y)

print(ridge_reg.predict([[1.5]]))
print(ridge_reg.intercept_)
print(ridge_reg.coef_)

运用SGDRegressor

# 导入numpy数值计算库,用于生成模拟数据和数值运算(数据分析、矩阵操作的基础库)
import numpy as np
# 从sklearn的线性模型模块导入SGDRegressor(随机梯度下降回归器)
# 注:SGDRegressor通过指定penalty='l2'可实现岭回归(L2正则化是岭回归的核心特征)
from sklearn.linear_model import SGDRegressor

# 生成特征矩阵X:
# np.random.rand(100, 1)生成100行1列、取值在[0,1)区间的均匀随机数
# 乘以2后,特征值取值范围变为[0,2),最终得到100个样本、1个特征的单变量特征数据集
X = 2 * np.random.rand(100, 1)

# 生成标签向量y(模拟真实数据的线性关系+噪声):
# 真实模型为 y = 4(截距) + 3*X(特征系数),符合线性回归的基本形式
# np.random.randn(100, 1)生成100行1列、服从标准正态分布(均值0、方差1)的噪声项
# 加入噪声是为了模拟真实数据的随机性,让数据更贴近实际场景
y = 4 + 3 * X + np.random.randn(100, 1)

# 初始化随机梯度下降回归器,通过参数配置实现岭回归:
# penalty='l2':指定正则化类型为L2正则化(这是岭回归的核心!L2正则化会惩罚系数的平方和,避免过拟合)
# max_iter=10000:设置最大迭代次数为10000次,确保模型有足够的训练轮次收敛
# 注:SGDRegressor默认使用随机梯度下降优化,搭配L2正则化等价于岭回归的求解方式
sgd_reg = SGDRegressor(penalty='l2', max_iter=10000)

# 训练模型:
# fit(X, y)是模型训练的核心方法,通过特征X和标签y学习线性关系
# y.reshape(-1,):将y从(100,1)的二维数组转换为(100,)的一维数组
# 原因:SGDRegressor的fit方法要求标签y为一维数组格式,避免维度不匹配报错
sgd_reg.fit(X, y.reshape(-1,))

# 模型预测:输入特征值为1.5(二维数组格式,符合sklearn模型的输入要求)
# 输出基于训练好的模型,对该特征值对应的标签预测结果
print(sgd_reg.predict([[1.5]]))

# 输出模型的截距项(对应真实模型中的4,因噪声和正则化会有轻微偏差)
print(sgd_reg.intercept_)

# 输出模型的特征系数(对应真实模型中的3,因噪声和正则化会有轻微偏差)
print(sgd_reg.coef_)

简洁版

import numpy as np
from sklearn.linear_model import SGDRegressor

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

sgd_reg = SGDRegressor(penalty='l2', max_iter=10000)
sgd_reg.fit(X, y.reshape(-1,))

print(sgd_reg.predict([[1.5]]))
print(sgd_reg.intercept_)
print(sgd_reg.coef_)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值