本文是机器学习入门必读系列,通过可乐销量预测、房价分析等生活化案例,手把手教你掌握线性回归的核心原理、数学推导和代码实战。无需高等数学基础,初中知识就能看懂!
想象你要预测:
这些问题的本质:寻找变量间的线性规律。而线性回归正是解决这类问题的最简单暴力的基础算法。
某小卖部记录了一周数据:
气温(℃) | 可乐销量(瓶) |
---|---|
28 | 120 |
32 | 185 |
25 | 95 |
30 | 150 |
35 | 210 |
肉眼可见的规律:气温越高,销量越高
那怎么用数学来表示这一规律呢?
用直线方程表示这种关系:
y = wx + b
假设我们画了一条直线:
损失函数(Loss Function):所有误差平方和(SSE)
为什么要用平方?避免正负误差抵消,放大大误差的影响。
目标:最小化 SSE → 对w和b求偏导并令导数为0
推导过程:
2. 对b求偏导:
得到:b = ȳ - w̄x̄ (均值关系)
3. 对w求偏导:
4. 代入b后解得:
这就是著名的最小二乘法公式!
# 手工计算斜率w
x = [28, 32, 25, 30, 35]
y = [120, 185, 95, 150, 210]
mean_x = 30, mean_y = 152
分子 = (28-30)*(120-152) + (32-30)*(185-152) + ... = 340
分母 = (28-30)**2 + (32-30)**2 + ... = 50
w = 340 / 50 = 6.8
b = 152 - 6.8*30 = -52
∴ 最终方程:销量 = 6.8 × 气温 - 52
预测效果验证:
房价不只由面积决定,还有:
方程升级:
最优解:
无需手动计算,Python两三行代码搞定:
import numpy as np
W = np.linalg.inv(X.T @ X) @ X.T @ Y
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
# 加载数据
boston = load_boston()
X = boston.data # 特征(犯罪率、房龄等13维)
y = boston.target # 房价
# 划分训练集/测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 创建模型
model = LinearRegression()
# 训练!
model.fit(X_train, y_train)
# 预测测试集
predictions = model.predict(X_test)
# 评估:R²分数 = 0.75(满分1,越高越好)
print(f"模型得分: {model.score(X_test, y_test):.2f}")
print("特征权重:", model.coef_)
# 输出:[-0.12, 0.04, -0.02, ...]
反例:光照强度与植物生长速度的关系
→ 解决方案:多项式回归(添加x²项)
当特征相关时(如"房间数"和"面积"):
检测方法:
import seaborn as sns
sns.heatmap(df.corr(), annot=True) # 绘制相关系数矩阵
单个离群点可能大幅影响直线位置:可考虑采用→ 解决方案:RANSAC算法、岭回归。
(x - mean)/std
→ 加速收敛
岭回归(Ridge):惩罚大权重(L2正则)
from sklearn.linear_model import Ridge
ridge = Ridge(alpha=0.5) # alpha控制惩罚力度
Lasso回归:自动特征选择(L1正则)
lasso = Lasso(alpha=0.1)
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5) # 5折交叉验证
print("平均得分:", scores.mean())
特征:学习时间、智商、家庭收入 目标:期末分数
线性回归失效原因:
此时需要逻辑回归(下篇详解)
如果本文对你有帮助,欢迎点赞收藏!下期预告:《七天学完十大机器学习经典算法-02.逻辑回归:从概率到决策的智慧》