Skip to content

智慧交通中燃油效率随机森林模型开发与测试

1.导入库

python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
import pickle
from sklearn.ensemble import RandomForestRegressor
  • pandas :数据处理库
  • train_test_split :数据集划分⼯具
  • LinearRegression :线性回归模型
  • StandardScaler :数据标准化处理器
  • Pipeline :机器学习流⽔线⼯具
  • pickle : Python 对象序列化模块
  • RandomForestRegressor :随机森林回归模型

2.数据加载与预览

python
df = pd.read_csv('auto-mpg.csv')
print(df.head())
  • pd.read_csv() :读取 CSV ⽂件

    • 参数:⽂件路径 ('auto-mpg.csv')
  • head() :显⽰前 5 ⾏数据

  • 功能:加载数据并初步检查数据结构

3.数据清洗

python
df['horsepower'] = pd.to_numeric(df['horsepower'], errors='coerce')
df = df.dropna()
  • pd.to_numeric() :将列转换为数值类型

    • errors='coerce' :将⽆效值转为 NaN
  • dropna() :删除包含 NaN 的⾏

  • 功能:处理 horsepower 列中的⾮数值和缺失值

4.特征⼯程

python
X = df[['cylinders', 'displacement', 'horsepower', 'weight', 'acceleration', 'model year', 'origin']]
y = df['mpg']
  • 选择 7 个特征作为⾃变量 (X)

  • 选择 mpg( 每加仑英⾥数 ) 作为因变量 (y)

  • 功能:构建特征矩阵和⽬标向量

5.数据集划分

python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • train_test_split() :划分训练 / 测试集
    • test_size=0.2 :测试集占 20%
    • random_state=42 :固定随机种⼦保证可重复性

6.构建线性回归流水线

python
pipeline = Pipeline([('scaler', StandardScaler()),('linreg', LinearRegression())])
  • Pipeline() :创建处理流⽔线

    • 第⼀步: StandardScaler 标准化(均值为 0 ,⽅差为 1 )
    • 第⼆步: LinearRegression 线性回归
  • 功能:⾃动完成数据标准化和模型训练

7.模型训练与保存

python
pipeline.fit(X_train, y_train)
with open('2.2.2_model.pkl', 'wb') as model_file:
	pickle.dump(pipeline, model_file)
  • fit() :训练流⽔线(⾃动先标准化再回归)
  • pickle.dump() :序列化保存整个流⽔线
    • 包含标准化器和训练好的回归模型

8.预测与评估

python
y_pred = pipeline.predict(X_test)
results_df = pd.DataFrame(y_pred, columns=['预测结果'])
results_df.to_csv('2.2.2_results.txt', index=False)

with open('2.2.2_report.txt', 'w') as results_file:
	results_file.write(f'训练集得分: {pipeline.score(X_train, y_train)}\n')
	results_file.write(f'测试集得分: {pipeline.score(X_test, y_test)}\n')
  • predict() :⽣成预测结果

  • score() :计算 R² 决定系数

    • 训练集得分反映拟合程度

    • 测试集得分反映泛化能⼒

  • 保存预测结果和评估分数

9.随机森林模型

python
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

y_pred_rf = rf_model.predict(X_test)
results_rf_df = pd.DataFrame(y_pred_rf, columns=['预测结果'])
results_rf_df.to_csv('2.2.2_results_rf.txt', index=False)

with open('2.2.2_report_rf.txt', 'w') as results_rf_file:
	results_rf_file.write(f'训练集得分: {rf_model.score(X_train, y_train)}\n')
	results_rf_file.write(f'测试集得分: {rf_model.score(X_test, y_test)}\n')
  • RandomForestRegressor() :创建随机森林模型

    • n_estimators=100 : 100 棵决策树
    • random_state=42 :固定随机种⼦
  • 相同流程进⾏训练、预测和评估

  • 功能:与线性回归模型对⽐性能

10.错误分析

过拟合迹象:从训练集到测试集的得分下降显示了潜在的过拟合问题。这意味着模型可能学到了训练数据中的一些噪声或细节,这些对于新数据并不适用。

模型选择不适合:从第2次随机森林模型训练结果准确率更高,所以第一次模型选择不适合。

11.改进建议

  • 降低模型的复杂度
  • 模型选择:尝试其他类型的回归模型,比如决策树、随机森林、梯度提升机等非线性模型,看看是否能获得更好的结果。
  • 交叉验证:使用k折交叉验证来更稳健地评估模型性能,避免由于单次划分带来的偶然性偏差。
  • 超参数调优:对于所选模型,利用网格搜索或随机搜索等方式寻找最佳超参数配置,优化模型性能。
  • 数据预处理: 确保所有特征都被正确标准化或归一化,尤其是当特征量级差异较大时,这有助于提高模型的收敛速度和稳定性。