线性回归(Linear Regression)是机器学习中最简单、最经典的算法之一,适合预测连续值问题(如房价预测、销量分析)。下面从原理、实现、优化三方面深入解析
🔍 一、算法原理
1. 核心思想
用一条直线(高维是超平面)拟合数据,公式: y=w1x1+w2x2+...+wnxn+by=w1x1+w2x2+...+wnxn+b
- yy:预测值
- ww:权重(斜率)
- bb:偏置(截距)
2. 损失函数(Loss Function)
衡量预测值与真实值的误差,常用均方误差(MSE): MSE=1n∑i=1n(yi−yi^)2MSE=n1∑i=1n(yi−yi^)2 目标:找到使MSE最小的 ww 和 bb!
3. 求解方法
- 最小二乘法(数学解析解,适合小数据)
- 梯度下降(迭代优化,适合大数据)
💻 二、代码实现(Python)
1. 用Scikit-learn快速实现
from sklearn.linear_model import LinearRegression
import numpy as np
# 生成数据
X = np.array([[1], [2], [3]]) # 特征
y = np.array([2, 4, 6]) # 标签
# 训练模型
model = LinearRegression()
model.fit(X, y)
# 预测
print(model.predict()) # 输出: [8]
print("斜率w:", model.coef_, "截距b:", model.intercept_)
2. 从零实现梯度下降
import numpy as np
# 数据
X = np.array([1, 2, 3])
y = np.array([2, 4, 6])
# 初始化参数
w, b = 0, 0
lr = 0.01 # 学习率
epochs = 1000 # 迭代次数
# 梯度下降
for _ in range(epochs):
y_pred = w * X + b
dw = (2/len(X)) * np.sum(X * (y_pred - y)) # w的梯度
db = (2/len(X)) * np.sum(y_pred - y) # b的梯度
w -= lr * dw
b -= lr * db
print("最终参数: w=", w, "b=", b) # 接近 w=2, b=0
⚡ 三、实战技巧与优化
1. 特征工程
- 标准化:用
StandardScaler
去除量纲影响 - 多项式特征:对非线性数据升维(如x2,x3x2,x3)
2. 防止过拟合
- 正则化:
- L1正则(Lasso回归):稀疏权重
- L2正则(Ridge回归):平滑权重
3. 评估指标
- R²分数:越接近1说明拟合越好
- MAE/MSE:绝对误差 vs 平方误差
📚 四、学习资源推荐
- 视频教程:吴恩达《机器学习》线性回归章节
- 交互式学习:Kaggle线性回归教程
- 数学推导:《统计学习方法》第1章
💡 关键总结
- 线性回归是参数模型,适合线性关系数据
- 核心是最小化MSE,可用解析解或梯度下降求解
- 实战中注意特征处理和正则化
可以试着用Kaggle的房价预测数据集来运行一下