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

前言

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

一、数据集准备与划分

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)进一步提升性能。

相关推荐
如果是君2 分钟前
Ubuntu20.04安装运行DynaSLAM
linux·python·深度学习·神经网络·ubuntu
调皮的芋头25 分钟前
【通缩螺旋的深度解析与科技破局路径】
神经网络·机器学习
牛奔42 分钟前
Linux 安装配置Anaconda
python·conda
往日情怀酿做酒 V17639296381 小时前
Django项目之订单管理part3
后端·python·django
查理零世1 小时前
【算法】 区间合并(附蓝桥杯真题) python
python·算法·蓝桥杯
人工智能研究所2 小时前
使用OpenCV与Python编写自己的俄罗斯方块小游戏
开发语言·python·opencv
DDD小小小宇宙2 小时前
python列表基础知识
开发语言·windows·python
@黄色海岸2 小时前
【sklearn 05】sklearn功能模块
人工智能·python·sklearn
Conqueror7122 小时前
机器学习丨八股学习分享 EP1
人工智能·机器学习
boring_student2 小时前
自动驾驶与车路协同
人工智能·机器学习·自动驾驶