Appearance
智慧交通中燃油效率随机森林模型开发与测试
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 RandomForestRegressorpandas:数据处理库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折交叉验证来更稳健地评估模型性能,避免由于单次划分带来的偶然性偏差。
- 超参数调优:对于所选模型,利用网格搜索或随机搜索等方式寻找最佳超参数配置,优化模型性能。
- 数据预处理: 确保所有特征都被正确标准化或归一化,尤其是当特征量级差异较大时,这有助于提高模型的收敛速度和稳定性。