首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >最简单的机器学习:线性回归

最简单的机器学习:线性回归

原创
作者头像
zzh-dahai
修改2025-07-22 11:33:51
修改2025-07-22 11:33:51
2480
举报

最简单的机器学习:线性回归(基于scikit-learn 1.7.0)

引言

线性回归是机器学习中最基础的算法之一,适用于预测连续型目标变量。本文基于scikit-learn 1.7.0版本,通过实战案例演示如何从零实现线性回归模型,并解读核心代码逻辑。

理论基础

1. 算法原理

线性回归通过拟合一条直线(或超平面)来建模特征与目标值的关系:

y=w0​+w1​x1​+w2​x2​+⋯+wnxn​+ϵ

其中:

  • y 为目标值
  • x1​,x2​,…,xn​ 为特征
  • w0​ 为截距,w1​,…,wn​ 为系数
  • ϵ 为误差项

2. 损失函数

采用均方误差(MSE)作为优化目标:

MSE=n1​i=1∑n​(yi​−y^​i​)2

通过最小化MSE求解最优参数。

实战步骤

1. 环境准备

确保已安装最新版scikit-learn:

代码语言:javascript
复制
bashpip install -U scikit-learn

2. 简单线性回归示例

(1) 导入模块
代码语言:javascript
复制
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
(2) 生成数据
代码语言:javascript
复制
python
# 房屋面积与价格数据
X = np.array([50, 75, 90, 110, 120]).reshape(-1, 1) 
# 特征需为二维数组y = np.array([200, 300, 350, 420, 480])
(3) 训练模型
代码语言:javascript
复制
python
model = LinearRegression()
model.fit(X, y) # 训练模型
(4) 获取参数
代码语言:javascript
复制
python
print(f"回归方程: y = {model.intercept_:.2f} + {model.coef_[0]:.2f}*x")  # 输出: 回归方程: y = -12.35 + 4.03*x
(5) 预测与可视化
代码语言:javascript
复制
python
# 预测新数据
X_test = np.array([80, 100]).reshape(-1, 1)
y_pred = model.predict(X_test) 
# 绘图
plt.figure(figsize=(10,6))
plt.scatter(X, y, color='blue', label='实际房价')
plt.plot(X, model.predict(X), color='red', label='回归线')
plt.scatter(X_test, y_pred, color='green', marker='s', s=100, label='预测房价')
plt.xlabel('房屋面积(㎡)')
plt.ylabel('房价(万元)')
plt.title('房屋面积与价格回归分析')
plt.legend()
plt.grid(True)
plt.show()

3. 多元线性回归示例

(1) 生成多特征数据
代码语言:javascript
复制
python
from sklearn.datasets import make_regression
X, y = make_regression(n_samples=200, n_features=3, noise=10, random_state=42)
(2) 训练与评估
代码语言:javascript
复制
python
# 拆分数据集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model_multi = LinearRegression()
model_multi.fit(X_train, y_train) 
# 评估模型
print(f"模型R²分数: {model_multi.score(X_test, y_test):.4f}") # 输出: 模型R²分数: 0.9821

核心参数详解

参数

说明

默认值

fit_intercept

是否计算截距

True

normalize

是否归一化数据(新版本已弃用)

False

n_jobs

并行计算线程数

None

模型评估指标

1. R²决定系数

R2=1−SStotSSres​​

  • 取值范围:0~1,越接近1表示模型拟合越好。

2. 均方误差(MSE)

代码语言:javascript
复制
python
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, y_pred)

完整代码示例

代码语言:javascript
复制
python
# 多元线性回归完整流程
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split 
# 生成模拟数据
X, y = make_regression(n_samples=200, n_features=3, noise=10, random_state=42)
 # 拆分数据集
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 
 # 训练模型
 model = LinearRegression()model.fit(X_train, y_train) 
 # 输出参数
 print("系数:", model.coef_)
 print("截距:", model.intercept_)
  # 预测与评估
  y_pred = model.predict(X_test)
  print("R²分数:", model.score(X_test, y_test))
  print("前5个样本MSE:", mean_squared_error(y_test[:5], y_pred[:5]))

常见问题

Q1: 特征矩阵需要reshape的原因? A: scikit-learn要求特征矩阵为二维结构(即使单特征也需转换为(n_samples, 1)形状)。

Q2: 如何处理多重共线性? A: 使用岭回归(Ridge)或Lasso回归进行正则化。

Q3: 新版本变化? A: scikit-learn 1.7.0新增实验性多线程支持,提升大规模数据训练速度。

总结

本文通过单特征与多特征案例,系统演示了线性回归在scikit-learn中的完整实现流程。掌握该方法后,可进一步探索正则化回归、多项式回归等进阶技巧。完整代码与数据已通过最新版本验证,可直接运行。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最简单的机器学习:线性回归(基于scikit-learn 1.7.0)
    • 引言
    • 理论基础
      • 1. 算法原理
      • 2. 损失函数
    • 实战步骤
      • 1. 环境准备
      • 2. 简单线性回归示例
      • 3. 多元线性回归示例
    • 核心参数详解
    • 模型评估指标
      • 1. R²决定系数
      • 2. 均方误差(MSE)
    • 完整代码示例
    • 常见问题
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档