机器学习基础:线性回归算法详解(原理+代码+实战)

发布于:2025-07-20 ⋅ 阅读:(20) ⋅ 点赞:(0)

线性回归(Linear Regression)是机器学习中最简单、最经典的算法之一,适合预测连续值问题(如房价预测、销量分析)。下面从原理、实现、优化三方面深入解析

🔍 一、算法原理

1. 核心思想

用一条直线(高维是超平面)拟合数据,公式: y=w1x1+w2x2+...+wnxn+by=w1​x1​+w2​x2​+...+wn​xn​+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 平方误差

📚 四、学习资源推荐

  1. 视频教程吴恩达《机器学习》线性回归章节
  2. 交互式学习Kaggle线性回归教程
  3. 数学推导:《统计学习方法》第1章

💡 关键总结

  • 线性回归是参数模型,适合线性关系数据
  • 核心是最小化MSE,可用解析解或梯度下降求解
  • 实战中注意特征处理正则化

可以试着用Kaggle的房价预测数据集来运行一下


网站公告

今日签到

点亮在社区的每一天
去签到