正规方程与线性回归对象API介绍
1 课程概览
本课介绍sklearn提供的两种线性回归API:LinearRegression(正规方程)和SGDRegressor(随机梯度下降)。讲解各API的参数、属性和使用方法,并介绍波士顿房价预测数据集(因伦理问题已被禁用)及其属性信息。
2 核心概念与定义
- LinearRegression:基于正规方程的线性回归API。
- SGDRegressor:基于随机梯度下降的线性回归API。
- fit_intercept:是否计算偏置(B)。
- coef_:回归系数(权重W)。
- intercept_:偏置(B)。
- learning_rate:学习率策略(constant=常量)。
- eta0:学习率初始值。
3 算法与模型详解
3.1 两种线性回归API
| API | 底层算法 | 适用场景 |
|---|---|---|
| LinearRegression | 正规方程 | 小数据量 |
| SGDRegressor | 随机梯度下降 | 大数据量 |
3.2 LinearRegression
位置:sklearn.linear_model.LinearRegression
底层:正规方程
参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
| fit_intercept | 是否计算偏置 | True |
属性:
| 属性 | 说明 |
|---|---|
| coef_ | 回归系数(权重W) |
| intercept_ | 偏置(B) |
公式:
- 一元:$Y = WX + B$
- 多元:$Y = W^TX + B$
3.3 SGDRegressor
位置:sklearn.linear_model.SGDRegressor
底层:随机梯度下降(SGD)
参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
| loss | 损失函数 | 'squared_loss' |
| fit_intercept | 是否计算偏置 | True |
| learning_rate | 学习率策略 | 'constant' |
| eta0 | 学习率初始值 | 0.01 |
学习率策略:
| 策略 | 说明 |
|---|---|
| constant | 常量(不变) |
| invscaling | 动态调整(eta0 / pow(t, power_t)) |
属性:
| 属性 | 说明 |
|---|---|
| coef_ | 回归系数(权重W) |
| intercept_ | 偏置(B) |
3.4 学习率策略说明
constant:
- 学习率固定不变
- 如 eta0=0.01,则永远是0.01
invscaling:
- 学习率动态调整
- 公式:eta0 / pow(t, power_t)
- 每次迭代学习率减小
- 深度学习中常用
3.5 波士顿房价数据集
问题:数据集已被禁用
原因:因伦理问题被起诉
属性信息:
| 属性 | 说明 |
|---|---|
| CRIM | 城镇人均犯罪率 |
| ZN | 住宅用地比例 |
| INDUS | 非零售商业用地比例 |
| CHAS | 查尔斯河虚拟变量 |
| NOX | 一氧化氮浓度 |
| RM | 房间数 |
| AGE | 1940年前建成的自用房屋比例 |
| DIS | 到波士顿五个中心区域的加权距离 |
| RAD | 辐射公路的可达性指数 |
| TAX | 房产税率 |
| PTRATIO | 师生比 |
| B | 黑人比例 |
| LSTAT | 低地位人口比例 |
| MEDV | 房屋价格(目标值) |
4 数学原理与推导
4.1 正规方程
$$W = (X^TX)^{-1}X^TY$$
4.2 随机梯度下降
$$\theta_{j}^{(i+1)} = \theta_{j}^{(i)} - \alpha \cdot (h_\theta(X_i) - Y_i) \cdot X_{ij}$$
4.3 损失函数
$$L = \frac{1}{2}(h_\theta(X) - Y)^2$$
5 代码示例
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.metrics import mean_absolute_error, mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import fetch_california_housing
# 加载数据集(使用加州房价替代波士顿房价)
housing = fetch_california_housing()
X = housing.data
Y = housing.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=42)
# 特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 1. 正规方程(LinearRegression)
lr = LinearRegression()
lr.fit(X_train_scaled, y_train)
print("=== LinearRegression(正规方程)===")
print("回归系数W:", lr.coef_)
print("偏置B:", lr.intercept_)
y_pred_lr = lr.predict(X_test_scaled)
print("MAE:", mean_absolute_error(y_test, y_pred_lr))
print("MSE:", mean_squared_error(y_test, y_pred_lr))
print("RMSE:", mean_squared_error(y_test, y_pred_lr, squared=False))
# 2. 随机梯度下降(SGDRegressor)
sgd = SGDRegressor(loss='squared_loss', learning_rate='constant', eta0=0.01, max_iter=1000)
sgd.fit(X_train_scaled, y_train)
print("\n=== SGDRegressor(随机梯度下降)===")
print("回归系数W:", sgd.coef_)
print("偏置B:", sgd.intercept_)
y_pred_sgd = sgd.predict(X_test_scaled)
print("MAE:", mean_absolute_error(y_test, y_pred_sgd))
print("MSE:", mean_squared_error(y_test, y_pred_sgd))
print("RMSE:", mean_squared_error(y_test, y_pred_sgd, squared=False))
6 重难点与易错提醒
- ❗重点:LinearRegression用正规方程,SGDRegressor用随机梯度下降。
- ❗重点:fit_intercept控制是否计算偏置。
- ❗重点:coef_是权重,intercept_是偏置。
- ❗重点:learning_rate='constant'表示学习率固定。
- ⚠️易错:波士顿房价数据集已被禁用,需用替代数据集。
- ⚠️易错:忘记特征标准化导致SGD不收敛。
- 💡深入理解:大数据量用SGDRegressor,小数据量用LinearRegression。
7 课堂问答精选
Q: 波士顿房价数据集为什么被禁用?
A: 波士顿房价数据集因伦理问题被起诉禁用。数据集中的某些属性(如黑人比例B)涉及种族歧视,因此在sklearn 1.2版本后被移除。可以使用加州房价数据集(fetch_california_housing)作为替代。
Q: LinearRegression和SGDRegressor有什么区别?
A:
- LinearRegression:底层用正规方程,一步到位,适合小数据量。
- SGDRegressor:底层用随机梯度下降,逐步逼近,适合大数据量。 选择依据:数据量小用LinearRegression,数据量大用SGDRegressor。
8 本课小结
- LinearRegression:正规方程,小数据量。
- SGDRegressor:随机梯度下降,大数据量。
- 参数:fit_intercept(偏置)、learning_rate(学习率策略)、eta0(学习率)。
- 属性:coef_(权重)、intercept_(偏置)。
- 波士顿房价数据集已禁用,用加州房价替代。
9 延伸思考与实践
- 实践:用LinearRegression和SGDRegressor对比模型效果。
- 预习:波士顿房价预测案例。
- 思考:为什么需要特征标准化?