📌 关注公众号「船长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不支持特征较少,无过拟合风险
RidgeL2不支持(缩小系数)多重共线性,特征都有贡献
LassoL1✅ 支持(系数置零)高维稀疏,需自动筛选特征

🚀 喜欢这篇文章?
关注公众号 「船长Talk」,每天分享数据分析、机器学习、SQL 实战干货。
更多 sklearn 实战代码、面试题解析持续更新中,欢迎关注!

更多推荐