机器学习·线性回归(三)线性回归预测实战

前言

之前的笔记已包括基础知识,现在将结合实际案例讲解线性回归的使用方法。

一、数据集准备与划分

1. 数据集简介
  • 波士顿房价数据集:包含 506 条样本,13 个特征(如犯罪率、房间数等),目标值为房价中位数(MEDV)。

  • 关键特征选择 :实验中选取 CRIM(犯罪率)、RM(房间数)、LSTAT(低收入人群比例)三个特征进行建模。

2. 数据加载与预览
python 复制代码
import pandas as pd

# 加载数据
df = pd.read_csv("https://labfile.oss.aliyuncs.com/courses/1081/course-5-boston.csv")
df.head()  # 查看前5行数据
3. 数据集划分
  • 训练集:70% 数据用于模型训练。

  • 测试集:30% 数据用于模型评估。

python 复制代码
features = df[['crim', 'rm', 'lstat']]  # 特征数据
target = df['medv']                     # 目标值

split_num = int(len(features) * 0.7)    # 70% 位置分割

X_train, y_train = features[:split_num], target[:split_num]  # 训练集
X_test, y_test = features[split_num:], target[split_num:]    # 测试集
关键点:
  • 手动按顺序划分数据集可能导致数据分布不均衡,实际应用中建议使用 sklearn.model_selection.train_test_split 进行随机划分。

  • 特征选择直接影响模型性能,需结合业务背景或特征重要性分析。


二、模型构建与训练

1. 使用 Scikit-learn 构建模型
python 复制代码
from sklearn.linear_model import LinearRegression

model = LinearRegression()    # 初始化线性回归模型
model.fit(X_train, y_train)   # 训练模型
2. 输出模型参数
python 复制代码
print("系数 (w):", model.coef_)     # 特征权重
print("截距项 (b):", model.intercept_) 
  • 输出示例
    系数 (w): [ 0.6997, 10.1356, -0.2053]
    截距项 (b): -38.0

  • 模型方程
关键点:
  • 正系数表示特征与房价正相关(如 RM 房间数越多,房价越高)。

  • 负系数表示特征与房价负相关(如 LSTAT 低收入人群比例越高,房价越低)。


三、模型评估

1. 预测与评估指标
python 复制代码
preds = model.predict(X_test)  # 输入测试集特征进行预测
2. 实现评估指标
  • 平均绝对误差(MAE)

    python 复制代码
    import numpy as np
    
    def mae_value(y_true, y_pred):
        return np.mean(np.abs(y_true - y_pred))
  • 均方误差(MSE)

    python 复制代码
    def mse_value(y_true, y_pred):
        return np.mean(np.square(y_true - y_pred))
3. 评估结果
python 复制代码
mae = mae_value(y_test.values, preds)
mse = mse_value(y_test.values, preds)
print("MAE:", mae)  # 示例输出:MAE: 13.02
print("MSE:", mse)  # 示例输出:MSE: 264.31
关键点:
  • MAE 更直观反映预测误差的实际大小。

  • MSE 对异常值更敏感(大误差被平方放大)。

  • 本实验模型 MAE 为 4.11,而房价均值为 22,误差较大,需优化模型。


四、问题分析与改进方向

1. 模型性能不足的原因
  • 特征选择:仅使用 3 个特征,未充分利用其他有效特征。

  • 数据预处理:未处理异常值、缺失值,未进行特征缩放(如归一化)。

2. 改进方法
  1. 特征工程

    • 使用所有 13 个特征。

    • 通过相关性分析选择高相关特征。

  2. 数据预处理

    • 标准化/归一化特征数据。

    • 剔除异常值或进行数据变换(如对数变换)。

  3. 验证方法优化

    • 使用交叉验证(如 K-Fold)避免过拟合。

五、完整代码示例

python 复制代码
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split  # 改进:使用随机划分

# 加载数据
df = pd.read_csv("https://labfile.oss.aliyuncs.com/courses/1081/course-5-boston.csv")
features = df[['crim', 'rm', 'lstat']]
target = df['medv']

# 随机划分数据集(改进点)
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.3, random_state=42)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测与评估
preds = model.predict(X_test)
mae = np.mean(np.abs(y_test - preds))
mse = np.mean((y_test - preds) ** 2)

print(f"模型系数: {model.coef_}, 截距: {model.intercept_}")
print(f"MAE: {mae:.2f}, MSE: {mse:.2f}")

六、注意事项

  1. 数据泄露:避免在预处理时使用测试集信息(如均值、标准差)。

  2. 可解释性:线性回归模型系数可解释性强,适合业务分析。

  3. 局限性:线性回归假设特征与目标呈线性关系,实际数据可能需引入多项式特征。

通过本实战,可掌握线性回归从数据加载到模型评估的全流程,后续可结合特征工程和高级回归方法(如岭回归、Lasso)进一步提升性能。

相关推荐
赛博曹操7 分钟前
CondaValueError: Malformed version string ‘~‘: invalid character(s)
人工智能·python·bug
CS创新实验室18 分钟前
《机器学习数学基础》补充资料:柯西—施瓦茨不等式以及相关证明
人工智能·机器学习·概率论
@心都18 分钟前
机器学习数学基础:23.二次型及其标准形
人工智能·机器学习
IT古董19 分钟前
【漫话机器学习系列】090.条件概率(Conditional Probability)
人工智能·机器学习·概率论
vⅤ_Leon22 分钟前
Machine Learning:General Guide
人工智能·机器学习
深度之眼22 分钟前
因果机器学习(CausalML)前沿创新思路
人工智能·深度学习·机器学习·因果推断
快手技术26 分钟前
可灵视频生成可控性为什么这么好?快手又公开了四篇研究
人工智能·算法·机器学习
路人与大师27 分钟前
Node.js怎么调用到打包的python文件呢
python·node.js·vim
神经星星43 分钟前
入选AAAI 2025!解决医学图像分割软边界与共现难题,中国地质大学等提出图像分割模型ConDSeg
数据库·人工智能·机器学习
数据小小爬虫1 小时前
高效利用Python爬虫开发批量获取商品信息
开发语言·爬虫·python