{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e8fea81d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.pipeline import Pipeline\n",
    "import pickle\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "\n",
    "# 加载数据集\n",
    "df = __________\n",
    "\n",
    "# 显示前五行数据\n",
    "print(__________)\n",
    "\n",
    "# 处理缺失值\n",
    "# 将 'horsepower' 列中的所有值转换为数值类型\n",
    "df['horsepower'] = __________(__________, errors='coerce')\n",
    "# 删除包含缺失值的行\n",
    "df = __________\n",
    "\n",
    "# 选择相关特征进行建模（定义自变量（返回一个DataFrame）和因变量）\n",
    "X = __________\n",
    "y = __________\n",
    "\n",
    "# 将数据集划分为训练集和测试集（测试集占比20%）\n",
    "X_train, X_test, y_train, y_test = __________(__________, random_state=42)\n",
    "\n",
    "# 创建包含标准化和线性回归的管道\n",
    "pipeline = __________([('scaler', __________),('linreg', __________)])\n",
    "\n",
    "# 训练模型\n",
    "__________\n",
    "\n",
    "# 保存训练好的模型\n",
    "with open('2.2.2_model.pkl', 'wb') as model_file:\n",
    "    pickle.__________\n",
    "\n",
    "# 预测并保存结果\n",
    "y_pred = __________\n",
    "results_df = pd.DataFrame(y_pred, columns=['预测结果'])\n",
    "__________('2.2.2_results.txt', index=False)\n",
    "\n",
    "# 测试模型\n",
    "with open('2.2.2_report.txt', 'w') as results_file:\n",
    "    results_file.write(f'训练集得分: {pipeline.score(X_train, y_train)}\\n')\n",
    "    results_file.write(f'测试集得分: {pipeline.score(X_test, y_test)}\\n')\n",
    "\n",
    "# 创建随机森林回归模型实例（创建的决策树的数量为100）\n",
    "rf_model = __________(__________, random_state=42)\n",
    "# 训练随机森林回归模型\n",
    "__________\n",
    "\n",
    "# 使用随机森林模型进行预测\n",
    "y_pred_rf = __________\n",
    "\n",
    "# 保存新的结果\n",
    "results_rf_df = pd.DataFrame(y_pred_rf, columns=['预测结果'])\n",
    "__________('2.2.2_results_rf.txt', index=False)\n",
    "\n",
    "# 测试模型并保存得分\n",
    "with open('2.2.2_report_rf.txt', 'w') as results_rf_file:\n",
    "    results_rf_file.write(f'训练集得分: {rf_model.score(X_train, y_train)}\\n')\n",
    "    results_rf_file.write(f'测试集得分: {rf_model.score(X_test, y_test)}\\n')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "896a10d6",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "74b64fc5",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
