sklearn机器学习模型参数详解+详细代码注释(LinearRegression/Ridge/Lasso完整指南)
·
📌 关注公众号「船长Talk」,持续分享数据分析、机器学习实战干货,每天3篇技术好文等你来!
sklearn机器学习模型参数详解(详细代码注释版)
本文整理了 sklearn 中最常用的回归模型通用方法与参数,每个参数都配有说明,适合面试前复习或日常查阅。
公主号:船长Talk — 更多机器学习/数据分析干货,持续更新中。
模型的一些通用方法:
# 公主号:船长Talk
# 机器学习模型通用方法示例(sklearn)
from sklearn.linear_model import LinearRegression
import numpy as np
# 初始化线性回归模型
lg = LinearRegression()
# fit(X, y):训练模型
# X:训练集样本,shape=(n_samples, n_features)
# y:训练集标签,shape=(n_samples,)
lg.fit(X, y)
# 查看模型参数
print(lg.coef_) # 权重向量(每个特征的系数)
print(lg.intercept_) # 截距项
# predict(X_new):对新数据进行预测
y_pred = lg.predict(X_new)
# get_params([deep]):返回模型的参数
# deep=True 时可返回子对象的参数
params = lg.get_params(deep=True)
# set_params(**params):设置模型参数(通常用于调参)
lg.set_params(fit_intercept=False)
# score(X, y):评估模型性能
# 回归模型返回 R²(决定系数),分类模型返回 accuracy
r2 = lg.score(X_test, y_test)
print(f"R² Score: {r2:.4f}")
模型的一些通用参数说明:
- n_jobs:正整数,指定 CPU 并行数量;-1 代表使用全部 CPU
- verbose:日志详细程度,数值越大输出越详细;0 或 None 关闭日志
- warm_start:若为 True,则基于上次训练结果继续训练,而非从头开始
- max_iter:最大迭代次数;None 时采用各 solver 的默认值
- random_state:随机数种子,可接受整数、RandomState 实例或 None
1.1 LinearRegression(线性回归)
# 公主号:船长Talk
from sklearn.linear_model import LinearRegression
# class sklearn.linear_model.LinearRegression(
# fit_intercept=True, # 是否计算截距
# normalize=False, # 是否对训练样本归一化(已弃用,建议用 StandardScaler)
# copy_X=True, # 是否拷贝 X,防止原始数据被修改
# n_jobs=1 # CPU 并行数
# )
model = LinearRegression(
fit_intercept=True, # 默认计算截距
copy_X=True, # 拷贝 X,不影响原数据
n_jobs=-1 # 使用全部 CPU 加速
)
model.fit(X_train, y_train)
# 模型属性
print(model.coef_) # 权重向量(各特征系数)
print(model.intercept_) # 截距值
# 评估
print(model.score(X_test, y_test)) # 返回 R²
1.2 Ridge(岭回归)
Ridge 在线性回归基础上加了 L2 正则化,用于缓解过拟合。
# 公主号:船长Talk
from sklearn.linear_model import Ridge
# class sklearn.linear_model.Ridge(
# alpha=1.0, # 正则化强度,越大惩罚越强,模型越简单
# fit_intercept=True, # 是否计算截距
# normalize=False, # 是否归一化(已弃用)
# copy_X=True,
# max_iter=None, # 最大迭代次数
# tol=0.001, # 收敛判断阈值
# solver='auto', # 求解算法:auto/svd/cholesky/sparse_cg/lsqr/sag
# random_state=None # 随机种子(solver=sag 时使用)
# )
# solver 参数说明:
# 'auto' :自动选择,推荐默认
# 'svd' :奇异值分解,稳定但慢
# 'cholesky' :scipy.linalg.solve,适合小数据集
# 'sparse_cg' :适合稀疏矩阵
# 'lsqr' :速度最快,部分旧版 scipy 不支持
# 'sag' :随机平均梯度下降,适合大数据集
ridge = Ridge(
alpha=1.0, # alpha 过大会让所有系数趋近于 0,模型退化为常数预测
solver='auto'
)
ridge.fit(X_train, y_train)
# 模型属性
print(ridge.coef_) # 权重向量
print(ridge.intercept_) # 截距
print(ridge.n_iter_) # 实际迭代次数
# 注意:alpha 超过 1 后,随 alpha 增大,预测性能急剧下降
# 极端情况下 alpha→∞,所有权重趋于 0,模型只预测常数
RidgeCV(带交叉验证的岭回归)
# 公主号:船长Talk
from sklearn.linear_model import RidgeCV
import numpy as np
# RidgeCV 自动用交叉验证帮你挑最优 alpha,省去手动调参
# 适用场景:数据有线性关系,LinearRegression 拟合效果一般,需要正则化时
alphas = np.logspace(-3, 3, 100) # 备选 alpha 范围:0.001 ~ 1000
ridge_cv = RidgeCV(alphas=alphas, cv=5) # 5 折交叉验证
ridge_cv.fit(X_train, y_train)
print(f"最优 alpha:{ridge_cv.alpha_}") # 自动选出的最优 alpha
print(f"R² Score: {ridge_cv.score(X_test, y_test):.4f}")
1.3 Lasso(L1 正则化回归)
Lasso 使用 L1 正则化,可以将部分特征权重压缩到 0,实现自动特征选择,适合高维稀疏场景。
# 公主号:船长Talk
from sklearn.linear_model import Lasso, LassoCV
# class sklearn.linear_model.Lasso(
# alpha=1.0, # 正则化强度
# fit_intercept=True,
# normalize=False,
# precompute=False, # 是否预计算 Gram 矩阵加速(大数据集建议 True)
# copy_X=True,
# max_iter=1000,
# tol=0.0001,
# warm_start=False, # True:在上次结果基础上继续训练
# positive=False, # True:强制所有权重为正数
# random_state=None,
# selection='cyclic' # 更新策略:cyclic(顺序)/ random(随机)
# )
lasso = Lasso(
alpha=0.1, # 较小的 alpha 保留更多特征
max_iter=2000, # Lasso 通常需要更多迭代
selection='random' # 随机选择更新分量,收敛更快
)
lasso.fit(X_train, y_train)
# 稀疏性验证:查看有多少特征被置零
n_zero = np.sum(lasso.coef_ == 0)
print(f"被置零的特征数:{n_zero} / {len(lasso.coef_)}")
# LassoCV:自动选 alpha,高维特征首选
lasso_cv = LassoCV(cv=5, n_jobs=-1)
lasso_cv.fit(X_train, y_train)
print(f"LassoCV 最优 alpha:{lasso_cv.alpha_:.4f}")
三种模型对比总结
| 模型 | 正则化 | 特征选择 | 适用场景 |
|---|---|---|---|
| LinearRegression | 无 | 不支持 | 特征较少,无过拟合风险 |
| Ridge | L2 | 不支持(缩小系数) | 多重共线性,特征都有贡献 |
| Lasso | L1 | ✅ 支持(系数置零) | 高维稀疏,需自动筛选特征 |
🚀 喜欢这篇文章?
关注公众号 「船长Talk」,每天分享数据分析、机器学习、SQL 实战干货。
更多 sklearn 实战代码、面试题解析持续更新中,欢迎关注!
关注公众号 「船长Talk」,每天分享数据分析、机器学习、SQL 实战干货。
更多 sklearn 实战代码、面试题解析持续更新中,欢迎关注!
更多推荐
所有评论(0)