sklearn.linear_model.LinearRegression
(线性回归)
LinearRegression
是 sklearn.linear_model
提供的 普通最小二乘回归模型,适用于 回归任务,用于 预测连续数值。
1. LinearRegression
作用
- 基于最小二乘法拟合数据,找到最佳拟合的直线。
- 适用于特征与目标变量之间是线性关系的情况。
- 不包含正则化项(无
L1
或L2
惩罚项),适合 无多重共线性 的数据。
2. LinearRegression
代码示例
(1) 训练线性回归模型
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
# 生成数据(100 个样本,1 个特征,带噪声)
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
# 训练线性回归模型
model = LinearRegression()
model.fit(X, y)
# 预测
y_pred = model.predict(X)
# 可视化
plt.scatter(X, y, label="真实数据")
plt.plot(X, y_pred, color="red", label="线性回归拟合")
plt.legend()
plt.show()
解释
fit(X, y)
训练线性回归模型,学习 权重(斜率)和截距。predict(X)
进行预测,绘制拟合直线。
3. LinearRegression
主要参数
LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)
参数 | 说明 |
---|---|
fit_intercept | 是否计算截距(默认 True ) |
normalize | 是否对数据进行归一化(已被弃用,推荐使用 StandardScaler ) |
copy_X | 是否复制 X (防止修改原数据) |
n_jobs | 并行计算(None 表示单线程) |
4. 获取回归系数
print("斜率(权重):", model.coef_)
print("截距:", model.intercept_)
解释
coef_
:回归系数(斜率)。intercept_
:截距(当X=0
时的预测值)。
5. 计算模型性能
from sklearn.metrics import mean_squared_error, r2_score
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print("均方误差 MSE:", mse)
print("决定系数 R²:", r2)
解释
- MSE(均方误差):值越小,拟合效果越好。
- R²(决定系数):
1
表示完美拟合,0
表示无解释能力。
6. LinearRegression
vs. Ridge
vs. Lasso
模型 | 适用情况 | 是否正则化 |
---|---|---|
LinearRegression | 标准线性回归,无多重共线性时适用 | 否 |
Ridge | 数据存在多重共线性,防止过拟合 | L2 |
Lasso | 自动特征选择,压缩部分系数到 0 | L1 |
示例:
from sklearn.linear_model import Ridge, Lasso
ridge = Ridge(alpha=1.0).fit(X, y)
lasso = Lasso(alpha=0.1).fit(X, y)
print("Ridge 斜率:", ridge.coef_)
print("Lasso 斜率:", lasso.coef_)
解释
Ridge
增加L2
正则化,防止过拟合。Lasso
增加L1
正则化,部分特征权重会变成0
(特征选择)。
7. 适用场景
- 预测连续变量(如房价、销量)。
- 特征与目标变量呈线性关系。
- 数据集较小,且不存在多重共线性。
8. 结论
LinearRegression
是最基础的回归模型,适用于 线性关系数据。- 如果数据存在 多重共线性,可以使用
Ridge
或Lasso
进行正则化。