From 640fb5fa43ef626111a85adc9218e5aa9558a464 Mon Sep 17 00:00:00 2001 From: benjas <909336740@qq.com> Date: Fri, 25 Dec 2020 12:46:48 +0800 Subject: [PATCH] =?UTF-8?q?Add=20=E5=8F=82=E6=95=B0=E8=B0=83=E4=BC=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...筑能源利用率预测-checkpoint.ipynb | 2091 ++++++++++++++++- .../data/kfold_cv.png | Bin 0 -> 82438 bytes ...分析_建筑能源利用率预测.ipynb | 915 ++++++++ 3 files changed, 3004 insertions(+), 2 deletions(-) create mode 100644 机器学习竞赛实战_优胜解决方案/建筑能源利用率预测/data/kfold_cv.png diff --git a/机器学习竞赛实战_优胜解决方案/建筑能源利用率预测/.ipynb_checkpoints/建模与分析_建筑能源利用率预测-checkpoint.ipynb b/机器学习竞赛实战_优胜解决方案/建筑能源利用率预测/.ipynb_checkpoints/建模与分析_建筑能源利用率预测-checkpoint.ipynb index 2fd6442..a27871d 100644 --- a/机器学习竞赛实战_优胜解决方案/建筑能源利用率预测/.ipynb_checkpoints/建模与分析_建筑能源利用率预测-checkpoint.ipynb +++ b/机器学习竞赛实战_优胜解决方案/建筑能源利用率预测/.ipynb_checkpoints/建模与分析_建筑能源利用率预测-checkpoint.ipynb @@ -1,6 +1,2093 @@ { - "cells": [], - "metadata": {}, + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 载入工具包" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "pd.options.mode.chained_assignment = None # 消除警告,比如说提示版本升级之类的\n", + "\n", + "pd.set_option('display.max_columns', 60) # 设置最大显示列为60\n", + "\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "plt.rcParams['font.size'] = 24 # 设置字体大小\n", + "\n", + "from IPython.core.pylabtools import figsize # 设置画图大小\n", + "\n", + "import seaborn as sns # 画图工具\n", + "sns.set(font_scale=2)\n", + "\n", + "# 输入缺失值和缩放值\n", + "from sklearn.preprocessing import Imputer, MinMaxScaler\n", + "\n", + "# 机器学习模型\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor\n", + "from sklearn.svm import SVR\n", + "from sklearn.neighbors import KNeighborsRegressor\n", + "\n", + "# 超参数调整\n", + "from sklearn.model_selection import RandomizedSearchCV, GridSearchCV" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training Feature Size: (6622, 64)\n", + "Testing Feature Size: (2839, 64)\n", + "Training Labels Size: (6622, 1)\n", + "Testing Labels Size: (2839, 1)\n" + ] + } + ], + "source": [ + "# Read in data into dataframes \n", + "train_features = pd.read_csv('data/training_features.csv')\n", + "test_features = pd.read_csv('data/testing_features.csv')\n", + "train_labels = pd.read_csv('data/training_labels.csv')\n", + "test_labels = pd.read_csv('data/testing_labels.csv')\n", + "\n", + "# Display sizes of data\n", + "print('Training Feature Size: ', train_features.shape)\n", + "print('Testing Feature Size: ', test_features.shape)\n", + "print('Training Labels Size: ', train_labels.shape)\n", + "print('Testing Labels Size: ', test_labels.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
OrderProperty IdDOF Gross Floor AreaYear BuiltNumber of Buildings - Self-reportedOccupancySite EUI (kBtu/ft²)Weather Normalized Site Electricity Intensity (kWh/ft²)Weather Normalized Site Natural Gas Intensity (therms/ft²)Water Intensity (All Water Sources) (gal/ft²)LatitudeLongitudeCommunity BoardCensus Tractlog_Direct GHG Emissions (Metric Tons CO2e)log_Water Intensity (All Water Sources) (gal/ft²)Borough_Staten IslandLargest Property Use Type_Adult EducationLargest Property Use Type_Automobile DealershipLargest Property Use Type_Bank BranchLargest Property Use Type_College/UniversityLargest Property Use Type_Convenience Store without Gas StationLargest Property Use Type_CourthouseLargest Property Use Type_Distribution CenterLargest Property Use Type_Enclosed MallLargest Property Use Type_Financial OfficeLargest Property Use Type_Hospital (General Medical & Surgical)Largest Property Use Type_HotelLargest Property Use Type_K-12 SchoolLargest Property Use Type_Library...Largest Property Use Type_Multifamily HousingLargest Property Use Type_MuseumLargest Property Use Type_Non-Refrigerated WarehouseLargest Property Use Type_OtherLargest Property Use Type_Other - EducationLargest Property Use Type_Other - Entertainment/Public AssemblyLargest Property Use Type_Other - Lodging/ResidentialLargest Property Use Type_Other - MallLargest Property Use Type_Other - Public ServicesLargest Property Use Type_Other - RecreationLargest Property Use Type_Other - ServicesLargest Property Use Type_Other - Specialty HospitalLargest Property Use Type_Outpatient Rehabilitation/Physical TherapyLargest Property Use Type_ParkingLargest Property Use Type_Performing ArtsLargest Property Use Type_Pre-school/DaycareLargest Property Use Type_Refrigerated WarehouseLargest Property Use Type_Repair Services (Vehicle, Shoe, Locksmith, etc.)Largest Property Use Type_Residence Hall/DormitoryLargest Property Use Type_Residential Care FacilityLargest Property Use Type_RestaurantLargest Property Use Type_Retail StoreLargest Property Use Type_Self-Storage FacilityLargest Property Use Type_Senior Care CommunityLargest Property Use Type_Social/Meeting HallLargest Property Use Type_Strip MallLargest Property Use Type_Supermarket/Grocery StoreLargest Property Use Type_Urgent Care/Clinic/Other OutpatientLargest Property Use Type_Wholesale Club/SupercenterLargest Property Use Type_Worship Facility
013276584978490300.019501100126.05.21.299.41NaNNaNNaNNaN6.0888184.59925300000000000000...100000000000000000000000000000
17377439844252000.01926110095.44.70.9NaN40.835496-73.8877453.0161.05.384036NaN00000000000000...100000000000000000000000000000
294794665374104700.01954110040.43.80.3NaN40.663206-73.9494699.0329.05.017280NaN00000000000000...100000000000000000000000000000
3147743393340129333.019921100157.116.91.1NaN40.622968-74.0787421.027.06.510853NaN10000000000000...000000000000000000000001000000
432862704325109896.01927110062.33.50.028.6540.782421-73.9726227.0165.06.1235893.35515300000000000000...100000000000000000000000000000
\n", + "

5 rows × 64 columns

\n", + "
" + ], + "text/plain": [ + " Order Property Id DOF Gross Floor Area Year Built \\\n", + "0 13276 5849784 90300.0 1950 \n", + "1 7377 4398442 52000.0 1926 \n", + "2 9479 4665374 104700.0 1954 \n", + "3 14774 3393340 129333.0 1992 \n", + "4 3286 2704325 109896.0 1927 \n", + "\n", + " Number of Buildings - Self-reported Occupancy Site EUI (kBtu/ft²) \\\n", + "0 1 100 126.0 \n", + "1 1 100 95.4 \n", + "2 1 100 40.4 \n", + "3 1 100 157.1 \n", + "4 1 100 62.3 \n", + "\n", + " Weather Normalized Site Electricity Intensity (kWh/ft²) \\\n", + "0 5.2 \n", + "1 4.7 \n", + "2 3.8 \n", + "3 16.9 \n", + "4 3.5 \n", + "\n", + " Weather Normalized Site Natural Gas Intensity (therms/ft²) \\\n", + "0 1.2 \n", + "1 0.9 \n", + "2 0.3 \n", + "3 1.1 \n", + "4 0.0 \n", + "\n", + " Water Intensity (All Water Sources) (gal/ft²) Latitude Longitude \\\n", + "0 99.41 NaN NaN \n", + "1 NaN 40.835496 -73.887745 \n", + "2 NaN 40.663206 -73.949469 \n", + "3 NaN 40.622968 -74.078742 \n", + "4 28.65 40.782421 -73.972622 \n", + "\n", + " Community Board Census Tract log_Direct GHG Emissions (Metric Tons CO2e) \\\n", + "0 NaN NaN 6.088818 \n", + "1 3.0 161.0 5.384036 \n", + "2 9.0 329.0 5.017280 \n", + "3 1.0 27.0 6.510853 \n", + "4 7.0 165.0 6.123589 \n", + "\n", + " log_Water Intensity (All Water Sources) (gal/ft²) Borough_Staten Island \\\n", + "0 4.599253 0 \n", + "1 NaN 0 \n", + "2 NaN 0 \n", + "3 NaN 1 \n", + "4 3.355153 0 \n", + "\n", + " Largest Property Use Type_Adult Education \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Automobile Dealership \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Bank Branch \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_College/University \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Convenience Store without Gas Station \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Courthouse \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Distribution Center \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Enclosed Mall \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Financial Office \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Hospital (General Medical & Surgical) \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Hotel Largest Property Use Type_K-12 School \\\n", + "0 0 0 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 0 \n", + "\n", + " Largest Property Use Type_Library ... \\\n", + "0 0 ... \n", + "1 0 ... \n", + "2 0 ... \n", + "3 0 ... \n", + "4 0 ... \n", + "\n", + " Largest Property Use Type_Multifamily Housing \\\n", + "0 1 \n", + "1 1 \n", + "2 1 \n", + "3 0 \n", + "4 1 \n", + "\n", + " Largest Property Use Type_Museum \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Non-Refrigerated Warehouse \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Other \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Other - Education \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Other - Entertainment/Public Assembly \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Other - Lodging/Residential \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Other - Mall \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Other - Public Services \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Other - Recreation \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Other - Services \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Other - Specialty Hospital \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Outpatient Rehabilitation/Physical Therapy \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Parking \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Performing Arts \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Pre-school/Daycare \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Refrigerated Warehouse \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Repair Services (Vehicle, Shoe, Locksmith, etc.) \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Residence Hall/Dormitory \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Residential Care Facility \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Restaurant \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Retail Store \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Self-Storage Facility \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Senior Care Community \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 1 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Social/Meeting Hall \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Strip Mall \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Supermarket/Grocery Store \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Urgent Care/Clinic/Other Outpatient \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Wholesale Club/Supercenter \\\n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + " Largest Property Use Type_Worship Facility \n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "\n", + "[5 rows x 64 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_features.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 缺失值填充\n", + "\n", + "利用sklearn的 Imputer object来进行缺失值填充,测试集则使用数据集中的结果进行填充,尽可能的不要利用测试集的数据对测试集加工,因为一开始我们也是不知道的,可参考[Data Leagage](https://www.kaggle.com/dansbecker/data-leakage)。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Create an imputer object with a median filling strategy\n", + "imputer = Imputer(strategy = 'median')\n", + "\n", + "# Train on the training features\n", + "imputer.fit(train_features)\n", + "\n", + "# Transform both training data and testing data\n", + "X = imputer.transform(train_features)\n", + "X_test = imputer.transform(test_features)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Missing values in training features: 0\n", + "Missing values in testing features: 0\n" + ] + } + ], + "source": [ + "print('Missing values in training features:', np.sum(np.isnan(X)))\n", + "print('Missing values in testing features:',np.sum(np.isnan(X_test)))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(array([], dtype=int64), array([], dtype=int64))\n", + "(array([], dtype=int64), array([], dtype=int64))\n" + ] + } + ], + "source": [ + "# Make sure all values are finite\n", + "print(np.where(~np.isfinite(X)))\n", + "print(np.where(~np.isfinite(X_test)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 特征标准化与归一化" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# Create the scaler object with a range of 0-1\n", + "scaler = MinMaxScaler(feature_range=(0, 1))\n", + "\n", + "# Fit on the training data\n", + "scaler.fit(X)\n", + "\n", + "# Transform both training data and testing data\n", + "X = scaler.transform(X)\n", + "X_test = scaler.transform(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# Convert y to one-dimensional array (vector)\n", + "y = np.array(train_labels).reshape((-1, ))\n", + "y_test = np.array(test_labels).reshape((-1, ))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 选择的机器学习算法(回归问题)\n", + " 1. Linear Regression\n", + " 2. Support Vector Machine Regression\n", + " 3. Random Forest Regression\n", + " 4. Gradient Boosting Regression\n", + " 5. K-Nearest Neighbors Regression\n", + "\n", + "这里先使用默认参数,后续再调参" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# Function to calculation mean absolute error\n", + "def mae (y_true,y_pred):\n", + " return np.mean(abs(y_true - y_pred))\n", + "\n", + "# Takes in a model, trains the model, and evaluates the model on the test set\n", + "def fit_and_evaluate(model):\n", + " \n", + " # Train the model\n", + " model.fit(X,y)\n", + " \n", + " # Make predictions and evalute\n", + " model_pred = model.predict(X_test)\n", + " model_mae = mae(y_test,model_pred)\n", + " \n", + " # Return the performance metric\n", + " return model_mae" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Linear Regression Performance on the test set: MAE = 13.4651\n" + ] + } + ], + "source": [ + "lr = LinearRegression()\n", + "lr_mae = fit_and_evaluate(lr)\n", + "\n", + "print('Linear Regression Performance on the test set: MAE = %0.4f'% lr_mae)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Support Vector Machine Regression Performance on the test set: MAE = 10.9337\n" + ] + } + ], + "source": [ + "svm = SVR(C=1000,gamma =0.1)\n", + "svm_mae = fit_and_evaluate(svm)\n", + "\n", + "print('Support Vector Machine Regression Performance on the test set: MAE = %0.4f' % svm_mae)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\Anaconda3\\lib\\site-packages\\sklearn\\ensemble\\forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", + " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random Forest Regression Performance on the test set: MAE = 10.0073\n" + ] + } + ], + "source": [ + "random_forest = RandomForestRegressor(random_state = 60)\n", + "random_forest_mae = fit_and_evaluate(random_forest)\n", + "\n", + "print('Random Forest Regression Performance on the test set: MAE = %0.4f' % random_forest_mae)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gradient Boosted Regression Performance on the test set: MAE = 10.0144\n" + ] + } + ], + "source": [ + "gradient_boosted = GradientBoostingRegressor(random_state=60)\n", + "gradient_boosted_mae = fit_and_evaluate(gradient_boosted)\n", + "\n", + "print('Gradient Boosted Regression Performance on the test set: MAE = %0.4f' % gradient_boosted_mae)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K-Nearest Neighbors Regression Performance on the test set: MAE = 13.0131\n" + ] + } + ], + "source": [ + "knn = KNeighborsRegressor(n_neighbors=10)\n", + "knn_mae = fit_and_evaluate(knn)\n", + "\n", + "print('K-Nearest Neighbors Regression Performance on the test set: MAE = %0.4f' % knn_mae)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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58/nq6++4rPPPiMxMZEWLVqQPXt2QkJCmDFjRqprLF++nIkTJ/KPf/yDDz/8kJs3bzJ69GiCgoJM6g0fPpxJkyZhZWVF8+bNad68OdmyZWPFihX06dMn1XVXrFjBxo0badGiBW+//Tbly5dPVefevXv06dOHtWvXGs//nXfeYf369fj6+nLjxg2jbsr83127dlGpUiXjg8bMmTP597//zf37902ufefOHbp27cqJEydo3LgxNWrU4M8//6R3796cO3cuw9fmWV6L48eP0717dywtLWnRogUlS5Zk48aN9OrVi8TExMfe72mFhITQp08fTp8+Tb169WjWrBmXL19m4MCBLF682KgXExNDz5492bVrFx988AHt2rXD3d2dkJAQevbsSUJCAlZWVvj6+hq98f/6179o2LDhE8Xh5eWFjY0NYWFhqcpCQ0PJly9fmq99iq1bt3Lr1i3q1q0LQO3atbGysmLVqlUmf6/lzaQeThF5JrVq1WLt2rVs3brVZM7Xpk2bcHR0pFKlSvzyyy8m50RHRzNlyhQKFCjAzJkzcXV1BeDu3bv079+fDRs2UK1aNRo1asStW7eMYew5c+aQP39+AFq3bk23bt1SxTNu3DguX77MhAkTTHp4lixZwsSJE5k1axa9e/d+qjZeunQJgCJFijzVeQcOHGDx4sW89dZbTJ061UhEr127Ro8ePVi0aBHVqlXjvffeM87566+/THoLmzdvTqtWrVi1ahXt27fH398fSF7Z27RpU9avX0+/fv1M7nvs2DG++uorateuDUCXLl2MuXQNGjSgSJEiHDp0iNDQUBo0aMDo0aONc+Pj4+nYsSNHjx4lKioKd3d3o+zatWssWrQowzmbe/bs4fjx4/j6+prMYwwODmbq1KmsX7+eVq1aERsby9ixY7Gzs2PmzJmUKVPGuP/o0aNZt24dixYtMukRu3HjBu+88w5ff/21seK5RIkSzJw5kzVr1qT5fnie1+LkyZP06tWLTz75BEheBNe7d292797Nvn37+OCDD9K939OKjo5m8uTJlChRgu+//54cOXIA0L17d/z8/Pjuu+/w9PTE3d2ddevWcfnyZcaMGUP9+vWNa4wdO5ZVq1axb98+PDw86Nq1K7t27eLSpUt07tw53RGBRzk5OfHBBx+wc+dO4uLijB70+Ph4tmzZQqNGjTI8/+HhdICcOXNS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ZXJenz59KFOmDEuXLmXdunVYW1tTunRpBg4c+Njvln5WDRs2xNXVleDgYG7cuMFbb73FiBEjjC19ADw9Pfnyyy9ZuHAh69atw87ODldXVwYNGkT58uX55JNP2LFjh8k+j0/CxsaGyZMns3DhQrZs2UJISAi2traUL1+eTp06mQzJent7M2vWLObOncvOnTu5f/8+bm5u9O7dmzZt2rzwPRcz47V4Gp06daJ48eL89NNPhIaGkpiYSOHChenfvz8tWrQw3ls5c+bkhx9+YO7cufz+++/s2bMHJycnqlevjq+vL0WLFjWu6evry5kzZ9i5cyfnz59/6oSzVq1aTJkyhTx58mT4FbUpe28+rpe4cOHCvPvuuxw4cIANGzbQrFkzo+zRXvFH5c6dWwlnFmBx/fp1bf8vIvIaS/lqyzZt2qTaDF5E5FWgOZwiIiIiYlZKOEVERETErJRwioiIiIhZaQ6niIiIiJiVejhFRERExKyUcIqIiIiIWSnhFBERERGzUsIpksWdOHEis0PI8vSMzUvP1/z0jM3vTX/GSjhFRERExKyUcIqIiIiIWSnhFBERERGzUsIpIiIiImalhFNEREREzEoJp4iIiIiYlRJOERERETErJZwiIiIiYlbWmR2AiIiIvL6SkpK4c+cO8fHxmR3KK83Ozo4bN25kdhhPzMLCAjs7O7Jly/ZCrqeEU14J4xs3zuwQsqy7d+9ib2+f2WFkaXrG5qXna3538+Zl5Pz5T31eUlIS169fx9HREQcHBywsLF58cFmEra0tdnZ2mR3GE0tMTOTOnTvExcWRPXv2535tlXDKK2Hsb79ldggiIm+s/u+990zn3blzB0dHxxfWCyavDktLS5ycnLhz5w737t177mRZczhFRETkmcTHx2NjY5PZYYgZ2dvbc+/evee+jhJOEREReWYaRs/aXtTrq4RTRERERMxKCaeIiIiImNUbu2jIx8eHCxcuGL9bWFiQPXt23n33XQYOHEj+/PnNct8mTZrg5+dHkyZNzHL9FKtXr2b06NFpln311VfUrl3brPd/VHR0NJGRkXh6er7U+4qIiEjme2MTTgB/f3/q168PJC//j4yM5OuvvyYgIICZM2dmcnTPz8XFhYULF6Y6niNHjpcey9ixY6lQoYISThERkTfQG51wOjo64uLiYvyeL18+unXrxsiRI4mNjcXJySkT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jBjBuHHjaNOmDS4uLjRr1gxra2siIiLw8vJi4MCBTJgwgd69e5MjRw4+/vhjpk6dmua1Ro0axcSJE43FMh4eHgwYMOCJ2lCyZEkqV65M165dGTt2LN7e3qnqhIaGEhoaCvz/PUCbNm2Kr68vkLwR/eTJk5k6dSqLFy+mQIEC+Pv706xZMyB54/iYmBiCgoK4cuUKpUuXZtq0aZQoUQKAiRMnMnnyZDp06ICtrS1169alS5cuADRu3JiwsDDat2/P+vXrM2xrjhw5mDp1KuPGjaNDhw5UrFiRhg0bPtFzEBERkazH4vr169rRWzKdc86cmR2CiMgbq/977zHy/zo0xDze9EVDWWJIXUREREReXUo4RURERMSslHCKiIiIiFkp4RQRERERs1LCKSIiIiJmlSW2RZLX3/Bq1TI7hCzr7t27xj6vYh56xual5/sS5M2b2RFIFqeEU14JA9esyewQsqw3fSuOl0HP2Lz0fM3vxIkTmR2CZHEaUhcRERERs1LCKSIiIiJmpYRTRERERMxKCaeIiIiImJUSThERERExKyWcIiIiImJWSjhFRERExKyUcIqIiIiIWSnhFBERERGzUsIpIiIiImalhFNEREREzEoJp4iIiIiYlRJOERERETErJZwiIiIiYlZKOEVERETErJRwioiIiIhZKeEUEREREbNSwikiIiIiZqWEU0RERETMSgmniIiIiJiVEk4RERERMSvrzA5ABGB848aZHUKWdffuXezt7TM7jCxNz9i89HzN71V4xjYlStBn6tRMjUHMRwmnvBLG/vZbZocgIiKZaHhmByBmpSF1ERERETErJZwiIiIiYlZKOEVERETErJRwioiIiIhZPTbhjI+PZ86cOXz00UdUq1aNxo0bExgYyNWrV19GfM8kIiKCAwcOpDp++/ZtvLy8WLZsWZrnffvtt3Ts2PG57793715OnTr13NdJ4eHhgYeHB9HR0anKfv75Zzw8PJg5c+Zz38fPzy/D63h4eLBnz57nvo+IiIi8WR6bcM6YMYP169czePBgli1bxtixYzl58iR9+vQhKSnpZcT41AYOHEhUVFSq446OjlSvXp2wsLBUZUlJSYSGhlK/fv3nvn+PHj24cuXKc1/nYdbW1mzbti3V8S1btmBhYfFC75WetWvXUrFixZdyLxEREck6Hptwrlq1iq5du1KpUiUKFixI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BMqbwfn/pmeIiMibaXi1agxcsyazwzAbzeEUERERETEjJZwiIiIiYlYvZQw75esQ0/L+++9nWC4iIiIirzf1cIqIiIiIWSnhFBERERGz0rJweSUMr1Yts0PIsu7evYu9vX1mh5Gl6Rmbl56v+b0Kz9imRIlMvb+YlxJOeSVk5a0wMtubvhXHy6BnbF56vuanZyzmpiF1ERERETErJZwiIiIiYlZKOEVERETErJRwioiIiIhZKeEUEREREbNSwikiIiIiZqWEU0RERETMSgmniIiIiJiVEk4RERERMSslnCIiIiJiVko4RURERMSslHCKiIiIiFkp4RQRERERs1LCKSIiIiJmpYRTRERERMxKCaeIiIiImJUSThERERExKyWcIiIiImJWSjhFRERExKyUcIqIiIiIWSnhFBERERGzUsIpIiIiImZlndkBiACMb9w4s0PIsu7evYu9vX1mh5Gl6Rmbl56v+ekZm9+LesY2JUrQZ+rUFxDRy6WEU14JY3/7LbNDEBEReeUNz+wAnpGG1EVERETErJRwioiIiIhZKeEUEREREbNSwikiIiIiZvVSE04PDw/27NljcuzAgQN4eXkxYcKEdM/z8fGhc+fOJCUlmRzft28fHh4exMfHmyXe5xEREcGBAwfSLDt//jweHh5MmzYtVVlQUBCfffbZE93jRdb18/Nj5syZT3QtERERkaeRqT2cJ06coH///tStW5f+/ftnWDc8PJxffvnlJUX2/AYOHEhUVFSGdX766SdOnTr1zPfo0KFDhom6iIiIyKsg0xLO6Oho/P398fDwYNiwYVhYWGRYv2DBgnz33Xdcv379JUVofnnz5uWbb7555vMdHBxwdnZ+gRGJiIiIvHiZknBevXqV3r17U7JkScaMGYOVldVjz2nXrh2Ojo5pDkOniI2NJSAgAG9vbxo0aEBgYCC3b982yrdt28Ynn3yCp6cn3t7eDB06lNjYWCB5yLl///50796d2rVrs3PnTu7fv8+kSZOoV68ederUYciQIVy5csW43rJly2jWrBmenp60a9eObdu2AcnD0xcuXCAwMJBRo0alG2+fPn34888/WbNmTbp1Tp06Rffu3fHy8uKjjz5i8eLFxtSCR4fJd+3aRdu2bfHy8sLf35/x48eb3D8+Pp4JEybg7e1N/fr1WbRokcm9YmJi6N69O56ennTu3Jkz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O3PkyBGWLl1KfHw806ZNo0qVKjz11FPFeRoPrS1btrB9+3bGjBlD5cqVjT+PL1++DJj3b/Pmzfn000/ZtWsXiYmJzJo1iytXrtClS5fiPA2LsEpNTTVfJSzygKSnpzNz5ky2bduGk5MTQUFBBAUFAeDr60toaCidOnUC4OjRo7z33nvGZx6OGzeOevXqFWf6D7358+ezYsWKfI/t3r2bZs2amfTx6tWrWbVqFefOncPb25vhw4ffdVRJ4Pjx40RGRnL06FHKlStH9+7dee2117CystJ1/ID4+/vz3nvvmd3Ne3v/6hq+d76+vixcuND4RItLly4xffp09u3bh5ubG0OGDOG5554DICUlhW7duvHBBx/wxBNPADd+lkRERHD27FkaNGjAhAkTqF69erGdz8Pm1v4dP348sbGxZjGVK1cmJibGrH9zcnL46KOP2LhxI6mpqTRo0IBRo0ZRu3btYjgTy1LBKSIiIiIWpSl1EREREbEoFZwiIiIiYlEqOEVERETEolRwioiIiIhFqeAUEREREYtSwSkiIiVeft8DLiIPDxWcIiJ/wZAhQ/D19eWVV14pMCYyMhJfX1+GDBlShJndm+effx5fX1/27duX7/GuXbsSGhpaJLn8lc+6evUqYWFh/Pzzz/f9+WFhYfj6+t7xJSJ/je3dQ0REJD/W1tYcP36cpKQkPD09TY7l5eWxdevWYsqscPbv309ycjLe3t58+eWXJbKgiouL4+uvvzY+uPx+VahQwezrM0Xk/qngFBH5i+rWrUtSUhJbt25lwIABJsf+85//cPnyZWrWrFlM2d3dhg0beOyxx+jcuTPz5s3j/PnzVKpUqbjTKlZ2dnY0atSouNMQKXU0pS4i8hfZ29vTvHnzfEcyN2/eTNOmTXF2djY7tnHjRl566SX8/Pzo1KkTixYtMn638k3bt28nODiYli1b4ufnR69evfj888+Nx1NSUvD19WXbtm28++67BAYGEhgYyIQJE4zf23wn169f5/vvv6d58+a0adMGa2trvvrqq3xjc3JyiIiIoHXr1jz77LNMmjSJixcvGo9nZGQwd+5cOnfujJ+fHz169CAqKors7GxjzLVr14iMjKR79+40b96cF198kfXr198xR19fXz744AOTfevXr8fX15eUlBRiYmJ4/fXXAXjzzTcJCwszxhWmj+/HkCFDmDRpEu++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v3//Akf5WrRowZYtW6hfvz61atUiNjaWw4cPm8SUL18egN27d/PII4/g7e1dqD4uSFZWltmTAG7l7e1t/MzCGjp0KMOHD2fYsGG88MILZGVl8cknn5CRkcGgQYPuqS2RkkoFp4jIA9C4cWMqVaqElZXVHR9nExwcTMWKFVmzZg2ff/455cuX54knnuD11183rnMMDQ0lPDzcePOKp6cn48ePZ8uWLXcshu7m/Pnz7Nmzhy5duuQ7AgvQunVr5s2bx9q1a40FZ/fu3cnIyGDChAnY2NjQrl073nrrLaysrACYMGECH374IatXr+bChQu4uLgQEBDA0KFDAXBwcODDDz9k0aJFLF26lGvXruHp6ck777xDt27dCsw3JCSEnJwcoqKisLKywt/fnwkTJpisz6xVqxbPPfcca9euJSEhgcjIyEL1cUEuX75McHBwgcfnz59P06ZN79jG7Xx9fVm4cCFRUVGEhoZiZ2dH48aNCQsL001C8rdhlZqaen/zMyIiIiIid6A1nCIiIiJiUSo4RURERMSiVHCKiIiIiEWp4BQRERERi1LBKSIiIiIWpYJTRERERCxKBaeIiIiIWJQKThERERGxKBWcIiIiImJR/w8NR99xBPZ7NgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.style.use('fivethirtyeight')\n", + "figsize(8, 4)\n", + "\n", + "# Dataframe to hold the results\n", + "model_comparison = pd.DataFrame({'model':['Linear Regression',\n", + " 'Support Vector Machine',\n", + " 'Random Forest',\n", + " 'Gradient Boosted',\n", + " 'K-Nearest Neighbors'],\n", + " 'mae':[lr_mae,\n", + " svm_mae,\n", + " random_forest_mae, \n", + " gradient_boosted_mae, \n", + " knn_mae]})\n", + "# Horizontal bar chart of test mae\n", + "model_comparison.sort_values('mae',ascending = False).plot(x = 'model',\n", + " y = 'mae',\n", + " kind = 'barh',\n", + " color = 'red', \n", + " edgecolor = 'black')\n", + "# Plot formatting\n", + "plt.ylabel('');plt.yticks(size = 14);plt.xlabel('Mean Absolute Error');plt.xticks(size = 14)\n", + "plt.title('Model Comparison on Test MAE', size = 20);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "集成算法的效果更好,这里由于参数只使用默认的,对SVM等这种参数影响较大的模型不太公平。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 调参" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Cross Validation\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# 设置相关参数\n", + "# 要优化的损失函数\n", + "loss = ['ls','lad','huber']\n", + "\n", + "# 梯度增强过程中使用的树的数量\n", + "n_estimators = [100,500, 900, 1100,1500]\n", + "\n", + "# 树的最大深度\n", + "max_depth = [2,3,5,10,15]\n", + "\n", + "# 每片叶子的最小样本数\n", + "min_samples_leaf = [1,2,4,6,8]\n", + "\n", + "# 拆分节点的最小样本数\n", + "min_samples_split = [2, 4, 6, 10]\n", + "\n", + "# 进行拆分时要考虑的最大特征数\n", + "max_features = ['auto', 'sqrt', 'log2', None]\n", + "\n", + "# 定义要进行搜索的超参数网格\n", + "hyperparameter_grid = {'loss': loss,\n", + " 'n_estimators': n_estimators,\n", + " 'max_depth': max_depth,\n", + " 'min_samples_leaf': min_samples_leaf,\n", + " 'min_samples_split': min_samples_split,\n", + " 'max_features': max_features} " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 随机搜索" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# Create the model to use for hyperparameter tuning\n", + "model = GradientBoostingRegressor(random_state = 42)\n", + "\n", + "# Set up the random search with 4-fold cross validation\n", + "random_cv = RandomizedSearchCV(estimator=model,\n", + " param_distributions=hyperparameter_grid,\n", + " cv=4, n_iter=25, \n", + " scoring = 'neg_mean_absolute_error',\n", + " n_jobs = -1, verbose = 1, \n", + " return_train_score = True,\n", + " random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 4 folds for each of 25 candidates, totalling 100 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 4 concurrent workers.\n", + "[Parallel(n_jobs=-1)]: Done 42 tasks | elapsed: 5.6min\n", + "[Parallel(n_jobs=-1)]: Done 100 out of 100 | elapsed: 8.8min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "RandomizedSearchCV(cv=4, error_score='raise-deprecating',\n", + " estimator=GradientBoostingRegressor(alpha=0.9,\n", + " criterion='friedman_mse',\n", + " init=None,\n", + " learning_rate=0.1,\n", + " loss='ls', max_depth=3,\n", + " max_features=None,\n", + " max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0,\n", + " min_impurity_split=None,\n", + " min_samples_leaf=1,\n", + " min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0,\n", + " n_estimators=100,...\n", + " iid='warn', n_iter=25, n_jobs=-1,\n", + " param_distributions={'loss': ['ls', 'lad', 'huber'],\n", + " 'max_depth': [2, 3, 5, 10, 15],\n", + " 'max_features': ['auto', 'sqrt', 'log2',\n", + " None],\n", + " 'min_samples_leaf': [1, 2, 4, 6, 8],\n", + " 'min_samples_split': [2, 4, 6, 10],\n", + " 'n_estimators': [100, 500, 900, 1100,\n", + " 1500]},\n", + " pre_dispatch='2*n_jobs', random_state=42, refit=True,\n", + " return_train_score=True, scoring='neg_mean_absolute_error',\n", + " verbose=1)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Fit on the training data\n", + "random_cv.fit(X, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean_fit_timestd_fit_timemean_score_timestd_score_timeparam_n_estimatorsparam_min_samples_splitparam_min_samples_leafparam_max_featuresparam_max_depthparam_lossparamssplit0_test_scoresplit1_test_scoresplit2_test_scoresplit3_test_scoremean_test_scorestd_test_scorerank_test_scoresplit0_train_scoresplit1_train_scoresplit2_train_scoresplit3_train_scoremean_train_scorestd_train_score
1210.5125080.1614440.0217700.00128050066None5lad{'n_estimators': 500, 'min_samples_split': 6, ...-8.924621-8.775078-9.325044-9.037550-9.0155230.2014671-6.934705-6.837958-6.869084-6.840749-6.8706240.038950
311.6106870.5578250.0344700.01036450068None5huber{'n_estimators': 500, 'min_samples_split': 6, ...-8.872382-8.903982-9.317120-9.075047-9.0420860.1764892-4.384343-4.326121-4.823009-4.229809-4.4408200.227453
99.3081190.1153810.0193720.00276250042auto3huber{'n_estimators': 500, 'min_samples_split': 4, ...-9.062297-9.042221-9.439618-9.153004-9.1742480.1587643-6.955777-7.088986-6.913108-6.940327-6.9745500.067813
02.7686500.0229040.0107350.00601010026auto5ls{'n_estimators': 100, 'min_samples_split': 2, ...-9.100775-9.026372-9.457063-9.201235-9.1963210.1627994-7.302003-7.312645-7.173397-7.386171-7.2935540.076569
75.0524950.1469890.0167060.00310450046auto3ls{'n_estimators': 500, 'min_samples_split': 4, ...-9.147703-9.199053-9.698781-9.358627-9.3509870.2152965-7.089709-7.103749-7.021418-7.080088-7.0737410.031358
1912.6481920.4979530.0254330.002286110062auto3lad{'n_estimators': 1100, 'min_samples_split': 6,...-9.350800-9.382812-9.475236-9.291753-9.3751480.0663686-8.513004-8.658903-7.820534-8.017995-8.2526090.344461
1062.6470662.0784490.1272300.0115481100106None10huber{'n_estimators': 1100, 'min_samples_split': 10...-9.274382-9.242743-9.530568-9.475944-9.3808720.1243667-0.409811-0.459465-0.393491-0.370483-0.4083120.032671
239.6481341.6194970.0632500.00286250042auto10huber{'n_estimators': 500, 'min_samples_split': 4, ...-9.415934-9.291198-9.575363-9.429866-9.4280680.1007218-0.205702-0.193613-0.164415-0.141062-0.1761980.025235
1617.5967020.2639150.0415740.001576150046None3ls{'n_estimators': 1500, 'min_samples_split': 4,...-9.248892-9.316306-9.798843-9.427920-9.4479400.2124039-4.821677-4.876202-4.776650-4.729506-4.8010090.054284
213.9556780.0368910.0339090.00722750064log25huber{'n_estimators': 500, 'min_samples_split': 6, ...-9.365194-9.286988-9.751767-9.409179-9.4532430.17778810-5.733003-5.742441-5.571781-5.666476-5.6784250.068177
\n", + "
" + ], + "text/plain": [ + " mean_fit_time std_fit_time mean_score_time std_score_time \\\n", + "12 10.512508 0.161444 0.021770 0.001280 \n", + "3 11.610687 0.557825 0.034470 0.010364 \n", + "9 9.308119 0.115381 0.019372 0.002762 \n", + "0 2.768650 0.022904 0.010735 0.006010 \n", + "7 5.052495 0.146989 0.016706 0.003104 \n", + "19 12.648192 0.497953 0.025433 0.002286 \n", + "10 62.647066 2.078449 0.127230 0.011548 \n", + "2 39.648134 1.619497 0.063250 0.002862 \n", + "16 17.596702 0.263915 0.041574 0.001576 \n", + "21 3.955678 0.036891 0.033909 0.007227 \n", + "\n", + " param_n_estimators param_min_samples_split param_min_samples_leaf \\\n", + "12 500 6 6 \n", + "3 500 6 8 \n", + "9 500 4 2 \n", + "0 100 2 6 \n", + "7 500 4 6 \n", + "19 1100 6 2 \n", + "10 1100 10 6 \n", + "2 500 4 2 \n", + "16 1500 4 6 \n", + "21 500 6 4 \n", + "\n", + " param_max_features param_max_depth param_loss \\\n", + "12 None 5 lad \n", + "3 None 5 huber \n", + "9 auto 3 huber \n", + "0 auto 5 ls \n", + "7 auto 3 ls \n", + "19 auto 3 lad \n", + "10 None 10 huber \n", + "2 auto 10 huber \n", + "16 None 3 ls \n", + "21 log2 5 huber \n", + "\n", + " params split0_test_score \\\n", + "12 {'n_estimators': 500, 'min_samples_split': 6, ... -8.924621 \n", + "3 {'n_estimators': 500, 'min_samples_split': 6, ... -8.872382 \n", + "9 {'n_estimators': 500, 'min_samples_split': 4, ... -9.062297 \n", + "0 {'n_estimators': 100, 'min_samples_split': 2, ... -9.100775 \n", + "7 {'n_estimators': 500, 'min_samples_split': 4, ... -9.147703 \n", + "19 {'n_estimators': 1100, 'min_samples_split': 6,... -9.350800 \n", + "10 {'n_estimators': 1100, 'min_samples_split': 10... -9.274382 \n", + "2 {'n_estimators': 500, 'min_samples_split': 4, ... -9.415934 \n", + "16 {'n_estimators': 1500, 'min_samples_split': 4,... -9.248892 \n", + "21 {'n_estimators': 500, 'min_samples_split': 6, ... -9.365194 \n", + "\n", + " split1_test_score split2_test_score split3_test_score mean_test_score \\\n", + "12 -8.775078 -9.325044 -9.037550 -9.015523 \n", + "3 -8.903982 -9.317120 -9.075047 -9.042086 \n", + "9 -9.042221 -9.439618 -9.153004 -9.174248 \n", + "0 -9.026372 -9.457063 -9.201235 -9.196321 \n", + "7 -9.199053 -9.698781 -9.358627 -9.350987 \n", + "19 -9.382812 -9.475236 -9.291753 -9.375148 \n", + "10 -9.242743 -9.530568 -9.475944 -9.380872 \n", + "2 -9.291198 -9.575363 -9.429866 -9.428068 \n", + "16 -9.316306 -9.798843 -9.427920 -9.447940 \n", + "21 -9.286988 -9.751767 -9.409179 -9.453243 \n", + "\n", + " std_test_score rank_test_score split0_train_score split1_train_score \\\n", + "12 0.201467 1 -6.934705 -6.837958 \n", + "3 0.176489 2 -4.384343 -4.326121 \n", + "9 0.158764 3 -6.955777 -7.088986 \n", + "0 0.162799 4 -7.302003 -7.312645 \n", + "7 0.215296 5 -7.089709 -7.103749 \n", + "19 0.066368 6 -8.513004 -8.658903 \n", + "10 0.124366 7 -0.409811 -0.459465 \n", + "2 0.100721 8 -0.205702 -0.193613 \n", + "16 0.212403 9 -4.821677 -4.876202 \n", + "21 0.177788 10 -5.733003 -5.742441 \n", + "\n", + " split2_train_score split3_train_score mean_train_score std_train_score \n", + "12 -6.869084 -6.840749 -6.870624 0.038950 \n", + "3 -4.823009 -4.229809 -4.440820 0.227453 \n", + "9 -6.913108 -6.940327 -6.974550 0.067813 \n", + "0 -7.173397 -7.386171 -7.293554 0.076569 \n", + "7 -7.021418 -7.080088 -7.073741 0.031358 \n", + "19 -7.820534 -8.017995 -8.252609 0.344461 \n", + "10 -0.393491 -0.370483 -0.408312 0.032671 \n", + "2 -0.164415 -0.141062 -0.176198 0.025235 \n", + "16 -4.776650 -4.729506 -4.801009 0.054284 \n", + "21 -5.571781 -5.666476 -5.678425 0.068177 " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 获取所有cv结果并按测试性能排序\n", + "random_results = pd.DataFrame(random_cv.cv_results_).sort_values('mean_test_score', ascending = False)\n", + "\n", + "random_results.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "GradientBoostingRegressor(alpha=0.9, criterion='friedman_mse', init=None,\n", + " learning_rate=0.1, loss='lad', max_depth=5,\n", + " max_features=None, max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=6, min_samples_split=6,\n", + " min_weight_fraction_leaf=0.0, n_estimators=500,\n", + " n_iter_no_change=None, presort='auto',\n", + " random_state=42, subsample=1.0, tol=0.0001,\n", + " validation_fraction=0.1, verbose=0, warm_start=False)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random_cv.best_estimator_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 网格搜索\n", + "\n", + "随机搜索找到一个大概的值,再用网格搜索更加精确的查找。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "# 创建一系列要评估的树\n", + "trees_grid = {'n_estimators': [100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800]}\n", + "\n", + "model = GradientBoostingRegressor(loss = 'lad', max_depth = 5,\n", + " min_samples_leaf = 6,\n", + " min_samples_split = 6,\n", + " max_features = None,\n", + " random_state = 42)\n", + "\n", + "# 使用树的范围和随机森林模型的网格搜索对象\n", + "grid_search = GridSearchCV(estimator = model, \n", + " param_grid=trees_grid, \n", + " cv = 4, \n", + " scoring = 'neg_mean_absolute_error', \n", + " verbose = 1,\n", + " n_jobs = -1, \n", + " return_train_score = True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 4 folds for each of 15 candidates, totalling 60 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 4 concurrent workers.\n", + "[Parallel(n_jobs=-1)]: Done 42 tasks | elapsed: 1.3min\n", + "[Parallel(n_jobs=-1)]: Done 60 out of 60 | elapsed: 2.2min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "GridSearchCV(cv=4, error_score='raise-deprecating',\n", + " estimator=GradientBoostingRegressor(alpha=0.9,\n", + " criterion='friedman_mse',\n", + " init=None, learning_rate=0.1,\n", + " loss='lad', max_depth=5,\n", + " max_features=None,\n", + " max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0,\n", + " min_impurity_split=None,\n", + " min_samples_leaf=6,\n", + " min_samples_split=6,\n", + " min_weight_fraction_leaf=0.0,\n", + " n_estimators=100,\n", + " n_iter_no_change=None,\n", + " presort='auto',\n", + " random_state=42, subsample=1.0,\n", + " tol=0.0001,\n", + " validation_fraction=0.1,\n", + " verbose=0, warm_start=False),\n", + " iid='warn', n_jobs=-1,\n", + " param_grid={'n_estimators': [100, 150, 200, 250, 300, 350, 400,\n", + " 450, 500, 550, 600, 650, 700, 750,\n", + " 800]},\n", + " pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n", + " scoring='neg_mean_absolute_error', verbose=1)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Fit the grid search\n", + "grid_search.fit(X, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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JBIJPv30U6xfvx4///wzFixYADc3NwDai/xNmzYN2dnZ6NGjB+zt7QFoA4tSqYSLiwtcXFwAaKeyWrZsiVOnTsHPzw8jR44EoD276ueff4ZarUb//v2LpGYiIiIqeYr93Sh9fX1x6dIlhIWFoWfPnmjUqBEEQUBkZCQeP36MevXq4auvvtJvP336dISHh8Pb29tgqmzixInw9vZGQEAAgoODUbVqVVy4cAEJCQlo1aoVevbsWdxPjYiIiF4RBQaczp07P/M0bB1BELBz506TtlUoFFi8eDGCgoKwd+9eREREQBRFVK5cGV988QX69esHGxubZ+6nYsWKWLNmDfz8/HDy5EncvXsXHh4e6NOnD/r27ct3EiciInqNFZgCmjZtanLAee4HlcnQt29f9O3b95nbFjY9Vr58eUydOrUoSyMiIiIrUGDAmTZtWnHWQURERFRknmse5/jx4wgPD8fjx4/h4uKChg0b4p133jHbSA8RERHRizAp4GRmZuL//u//cObMGUgkEri4uCA5ORkbNmxAo0aNsHDhQpPWzRAREREVB5Oug+Pn54eIiAhMnToVISEh2LdvH44fP44ffvgBly5dgr+/v7nrJCIiIjKZSQHn4MGD8Pb2RqdOnfRXGpbJZOjUqROGDh2KAwcOmLVIIiIioudhUsBJSUlBrVq1jPbVqlVL/95PRERERK8CkwJOpUqVcO7cOaN94eHhKF++fJEWRURERPQyTFpk3KNHD8ybNw+2trb46KOP4OrqisTEROzfvx9//vmn0TfjJCIiIrIUkwPO5cuX4efnh5UrV+rbRVFEp06dMGjQILMVSERERPS8TAo4EokE33//Pfr3749z584hNTUVzs7OePvtt+Hp6WnuGkuOrEzIg/ciu303gNcGIiIispjnutBf9erVUb16dQDA5cuXERMTg3LlysHR0dEsxZUkQkoSbBdMgfTGf0BaKrK7cVSLiIjIUkxaZJyUlIQxY8bor3ezdetWDB48GJMmTUKvXr0QExNjzhpfeZK7N2E3c6Q23ABQbAuA7NQhC1dFRET0+jIp4CxZsgSXL1+Gl5cXAGD16tVo3Lgx1qxZAw8PDyxdutSsRb7qRLkNBGWGQZvC/zdIrl60UEVERESvN5MCzqlTpzBmzBi0bt0aly9fRnx8PPr374/atWvj888/L/AU8teFWL4iMr76CaJM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VD0Qd+LJJ59k8ODBeHjc/gwIf39/1q1bh6tr5fpCqsjPUYi7Wo2aWLv2xdq1r+3v19P/XEnZ9kpLH3e2yNMVVUV/5iT6Mydh03doej1qs3Y3Xmm17ADOsglxRZMER1RpHh4ed5TcALi4uNC0adOyCUgIUfW518LavT/W7v1tf09PQx951P5KS59wrsjTFasV/enj6E8fh99W27aZaNHuz1danbG29Aejc/nfx11OEhxRoRISEhg6dCgDBw5kwIABfPrpp1y9epXmzZuzYsUKDAYDSUlJrFmzhv3795OYmIjVasXLy4vevXvz4osv4u3tbW+voDE4uWULFixAVVW++eYbTp8+jcFgoGvXrkyYMIGWLVva2yhoDE5u2ciRIxkyZAhLlizhyJEjmM1mWrVqxahRoxgwYEC++ztz5gzLly/nyJEjZGRk0KZNG8aMGcOJEydYunQpS5YsoVu3bvnOq4jPduLEiYSGhvL999/z4YcfcuLECerUqcO0adMICLB11R87doxvv/2Wo0ePcv36derVq0efPn0YPXo0Pj4+Jb6WENVKLY88e20pV1NtPTwnw9CfCit2N3XFarGN+YkKhw3foBmcUFu0t6/BY23RXhKeciAJjnCIyMhIduzYgb+/P82aNaNGjRoYDAZiYmIYP348V69epWXLlgQEBHDt2jWOHz/OL7/8QkhICN9//z01atQo9hobNmxg586dNGvWjN69e3Pq1Cl27NjBoUOHWLduHfXq1Su2jejoaF588UXc3d3p3LkzycnJhIeH884777BgwQL69+9vPzYsLIzJkyeTmZlJ27Zt6dSpE+Hh4bz++uu0bdu2iKuUrcI+21xTpkzBZDLRt29fTp48aY/tp59+4uOPP0ZVVTp06IC3tzfR0dH8/PPPbN26lUWLFuW7j8KuZbFYKux+hahoWm1PLL0Csfw5S0tJS7H17OSO4UmKK/J8xZJj6xGKPAqsQnNywtrC397Do7ZoB07GCriT6k0SnDvk/vwAR4dQKtdX/c/RIQC2AclPP/00kydPBkD9c42KRYsWcfXqVd544w2eeuop+/GpqamMHTuWuLg4du3alW+Ac0F27tzJlClTePzxxwHIyclh0qRJHDp0iF9//bVEs64OHDjAkCFDmDJlCs7Ott+wlixZwtdff833339vT3BycnJ47733yMzM5N1332Xo0KEA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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 将结果导入数据框\n", + "results = pd.DataFrame(grid_search.cv_results_)\n", + "\n", + "# 绘制训练误差和测试误差与树木数量的关系图\n", + "figsize(8, 8)\n", + "plt.style.use('fivethirtyeight')\n", + "plt.plot(results['param_n_estimators'], -1 * results['mean_test_score'], label = 'Testing Error')\n", + "plt.plot(results['param_n_estimators'], -1 * results['mean_train_score'], label = 'Training Error')\n", + "plt.xlabel('Number of Trees'); plt.ylabel('Mean Abosolute Error'); plt.legend();\n", + "plt.title('Performance vs Number of Trees');" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean_fit_timestd_fit_timemean_score_timestd_score_timeparam_n_estimatorsparamssplit0_test_scoresplit1_test_scoresplit2_test_scoresplit3_test_scoremean_test_scorestd_test_scorerank_test_scoresplit0_train_scoresplit1_train_scoresplit2_train_scoresplit3_train_scoremean_train_scorestd_train_score
1314.3698400.2819170.0324130.004375750{'n_estimators': 750}-8.901092-8.751699-9.298411-9.049730-9.0001810.2018361-6.716494-6.660453-6.520818-6.579989-6.6194380.074807
1414.9570210.3277900.0301690.001295800{'n_estimators': 800}-8.903857-8.758299-9.296941-9.047485-9.0015940.1987932-6.689643-6.648109-6.486269-6.530287-6.5885770.083101
1213.4064160.3166430.0281740.001915700{'n_estimators': 700}-8.904269-8.755862-9.312990-9.053755-9.0066660.2058113-6.743886-6.695770-6.611240-6.624919-6.6689530.053861
1112.7641330.1963180.0261810.000824650{'n_estimators': 650}-8.906208-8.755401-9.325190-9.052215-9.0096990.2101864-6.778068-6.721452-6.708191-6.666758-6.7186170.039814
910.6540210.3139240.0296710.008415550{'n_estimators': 550}-8.918502-8.756938-9.325492-9.042721-9.0108610.2079705-6.874737-6.781878-6.809121-6.745712-6.8028620.047201
\n", + "
" + ], + "text/plain": [ + " mean_fit_time std_fit_time mean_score_time std_score_time \\\n", + "13 14.369840 0.281917 0.032413 0.004375 \n", + "14 14.957021 0.327790 0.030169 0.001295 \n", + "12 13.406416 0.316643 0.028174 0.001915 \n", + "11 12.764133 0.196318 0.026181 0.000824 \n", + "9 10.654021 0.313924 0.029671 0.008415 \n", + "\n", + " param_n_estimators params split0_test_score \\\n", + "13 750 {'n_estimators': 750} -8.901092 \n", + "14 800 {'n_estimators': 800} -8.903857 \n", + "12 700 {'n_estimators': 700} -8.904269 \n", + "11 650 {'n_estimators': 650} -8.906208 \n", + "9 550 {'n_estimators': 550} -8.918502 \n", + "\n", + " split1_test_score split2_test_score split3_test_score mean_test_score \\\n", + "13 -8.751699 -9.298411 -9.049730 -9.000181 \n", + "14 -8.758299 -9.296941 -9.047485 -9.001594 \n", + "12 -8.755862 -9.312990 -9.053755 -9.006666 \n", + "11 -8.755401 -9.325190 -9.052215 -9.009699 \n", + "9 -8.756938 -9.325492 -9.042721 -9.010861 \n", + "\n", + " std_test_score rank_test_score split0_train_score split1_train_score \\\n", + "13 0.201836 1 -6.716494 -6.660453 \n", + "14 0.198793 2 -6.689643 -6.648109 \n", + "12 0.205811 3 -6.743886 -6.695770 \n", + "11 0.210186 4 -6.778068 -6.721452 \n", + "9 0.207970 5 -6.874737 -6.781878 \n", + "\n", + " split2_train_score split3_train_score mean_train_score std_train_score \n", + "13 -6.520818 -6.579989 -6.619438 0.074807 \n", + "14 -6.486269 -6.530287 -6.588577 0.083101 \n", + "12 -6.611240 -6.624919 -6.668953 0.053861 \n", + "11 -6.708191 -6.666758 -6.718617 0.039814 \n", + "9 -6.809121 -6.745712 -6.802862 0.047201 " + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results.sort_values('mean_test_score', ascending = False).head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.3" + } + }, "nbformat": 4, "nbformat_minor": 2 } diff --git a/机器学习竞赛实战_优胜解决方案/建筑能源利用率预测/data/kfold_cv.png b/机器学习竞赛实战_优胜解决方案/建筑能源利用率预测/data/kfold_cv.png new file mode 100644 index 0000000000000000000000000000000000000000..40991ec2efa3fb128d3e2ea718e803684085e581 GIT binary patch literal 82438 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 KD7" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# 设置相关参数\n", + "# 要优化的损失函数\n", + "loss = ['ls','lad','huber']\n", + "\n", + "# 梯度增强过程中使用的树的数量\n", + "n_estimators = [100,500, 900, 1100,1500]\n", + "\n", + "# 树的最大深度\n", + "max_depth = [2,3,5,10,15]\n", + "\n", + "# 每片叶子的最小样本数\n", + "min_samples_leaf = [1,2,4,6,8]\n", + "\n", + "# 拆分节点的最小样本数\n", + "min_samples_split = [2, 4, 6, 10]\n", + "\n", + "# 进行拆分时要考虑的最大特征数\n", + "max_features = ['auto', 'sqrt', 'log2', None]\n", + "\n", + "# 定义要进行搜索的超参数网格\n", + "hyperparameter_grid = {'loss': loss,\n", + " 'n_estimators': n_estimators,\n", + " 'max_depth': max_depth,\n", + " 'min_samples_leaf': min_samples_leaf,\n", + " 'min_samples_split': min_samples_split,\n", + " 'max_features': max_features} " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 随机搜索" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# Create the model to use for hyperparameter tuning\n", + "model = GradientBoostingRegressor(random_state = 42)\n", + "\n", + "# Set up the random search with 4-fold cross validation\n", + "random_cv = RandomizedSearchCV(estimator=model,\n", + " param_distributions=hyperparameter_grid,\n", + " cv=4, n_iter=25, \n", + " scoring = 'neg_mean_absolute_error',\n", + " n_jobs = -1, verbose = 1, \n", + " return_train_score = True,\n", + " random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 4 folds for each of 25 candidates, totalling 100 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 4 concurrent workers.\n", + "[Parallel(n_jobs=-1)]: Done 42 tasks | elapsed: 5.6min\n", + "[Parallel(n_jobs=-1)]: Done 100 out of 100 | elapsed: 8.8min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "RandomizedSearchCV(cv=4, error_score='raise-deprecating',\n", + " estimator=GradientBoostingRegressor(alpha=0.9,\n", + " criterion='friedman_mse',\n", + " init=None,\n", + " learning_rate=0.1,\n", + " loss='ls', max_depth=3,\n", + " max_features=None,\n", + " max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0,\n", + " min_impurity_split=None,\n", + " min_samples_leaf=1,\n", + " min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0,\n", + " n_estimators=100,...\n", + " iid='warn', n_iter=25, n_jobs=-1,\n", + " param_distributions={'loss': ['ls', 'lad', 'huber'],\n", + " 'max_depth': [2, 3, 5, 10, 15],\n", + " 'max_features': ['auto', 'sqrt', 'log2',\n", + " None],\n", + " 'min_samples_leaf': [1, 2, 4, 6, 8],\n", + " 'min_samples_split': [2, 4, 6, 10],\n", + " 'n_estimators': [100, 500, 900, 1100,\n", + " 1500]},\n", + " pre_dispatch='2*n_jobs', random_state=42, refit=True,\n", + " return_train_score=True, scoring='neg_mean_absolute_error',\n", + " verbose=1)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Fit on the training data\n", + "random_cv.fit(X, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean_fit_timestd_fit_timemean_score_timestd_score_timeparam_n_estimatorsparam_min_samples_splitparam_min_samples_leafparam_max_featuresparam_max_depthparam_lossparamssplit0_test_scoresplit1_test_scoresplit2_test_scoresplit3_test_scoremean_test_scorestd_test_scorerank_test_scoresplit0_train_scoresplit1_train_scoresplit2_train_scoresplit3_train_scoremean_train_scorestd_train_score
1210.5125080.1614440.0217700.00128050066None5lad{'n_estimators': 500, 'min_samples_split': 6, ...-8.924621-8.775078-9.325044-9.037550-9.0155230.2014671-6.934705-6.837958-6.869084-6.840749-6.8706240.038950
311.6106870.5578250.0344700.01036450068None5huber{'n_estimators': 500, 'min_samples_split': 6, ...-8.872382-8.903982-9.317120-9.075047-9.0420860.1764892-4.384343-4.326121-4.823009-4.229809-4.4408200.227453
99.3081190.1153810.0193720.00276250042auto3huber{'n_estimators': 500, 'min_samples_split': 4, ...-9.062297-9.042221-9.439618-9.153004-9.1742480.1587643-6.955777-7.088986-6.913108-6.940327-6.9745500.067813
02.7686500.0229040.0107350.00601010026auto5ls{'n_estimators': 100, 'min_samples_split': 2, ...-9.100775-9.026372-9.457063-9.201235-9.1963210.1627994-7.302003-7.312645-7.173397-7.386171-7.2935540.076569
75.0524950.1469890.0167060.00310450046auto3ls{'n_estimators': 500, 'min_samples_split': 4, ...-9.147703-9.199053-9.698781-9.358627-9.3509870.2152965-7.089709-7.103749-7.021418-7.080088-7.0737410.031358
1912.6481920.4979530.0254330.002286110062auto3lad{'n_estimators': 1100, 'min_samples_split': 6,...-9.350800-9.382812-9.475236-9.291753-9.3751480.0663686-8.513004-8.658903-7.820534-8.017995-8.2526090.344461
1062.6470662.0784490.1272300.0115481100106None10huber{'n_estimators': 1100, 'min_samples_split': 10...-9.274382-9.242743-9.530568-9.475944-9.3808720.1243667-0.409811-0.459465-0.393491-0.370483-0.4083120.032671
239.6481341.6194970.0632500.00286250042auto10huber{'n_estimators': 500, 'min_samples_split': 4, ...-9.415934-9.291198-9.575363-9.429866-9.4280680.1007218-0.205702-0.193613-0.164415-0.141062-0.1761980.025235
1617.5967020.2639150.0415740.001576150046None3ls{'n_estimators': 1500, 'min_samples_split': 4,...-9.248892-9.316306-9.798843-9.427920-9.4479400.2124039-4.821677-4.876202-4.776650-4.729506-4.8010090.054284
213.9556780.0368910.0339090.00722750064log25huber{'n_estimators': 500, 'min_samples_split': 6, ...-9.365194-9.286988-9.751767-9.409179-9.4532430.17778810-5.733003-5.742441-5.571781-5.666476-5.6784250.068177
\n", + "
" + ], + "text/plain": [ + " mean_fit_time std_fit_time mean_score_time std_score_time \\\n", + "12 10.512508 0.161444 0.021770 0.001280 \n", + "3 11.610687 0.557825 0.034470 0.010364 \n", + "9 9.308119 0.115381 0.019372 0.002762 \n", + "0 2.768650 0.022904 0.010735 0.006010 \n", + "7 5.052495 0.146989 0.016706 0.003104 \n", + "19 12.648192 0.497953 0.025433 0.002286 \n", + "10 62.647066 2.078449 0.127230 0.011548 \n", + "2 39.648134 1.619497 0.063250 0.002862 \n", + "16 17.596702 0.263915 0.041574 0.001576 \n", + "21 3.955678 0.036891 0.033909 0.007227 \n", + "\n", + " param_n_estimators param_min_samples_split param_min_samples_leaf \\\n", + "12 500 6 6 \n", + "3 500 6 8 \n", + "9 500 4 2 \n", + "0 100 2 6 \n", + "7 500 4 6 \n", + "19 1100 6 2 \n", + "10 1100 10 6 \n", + "2 500 4 2 \n", + "16 1500 4 6 \n", + "21 500 6 4 \n", + "\n", + " param_max_features param_max_depth param_loss \\\n", + "12 None 5 lad \n", + "3 None 5 huber \n", + "9 auto 3 huber \n", + "0 auto 5 ls \n", + "7 auto 3 ls \n", + "19 auto 3 lad \n", + "10 None 10 huber \n", + "2 auto 10 huber \n", + "16 None 3 ls \n", + "21 log2 5 huber \n", + "\n", + " params split0_test_score \\\n", + "12 {'n_estimators': 500, 'min_samples_split': 6, ... -8.924621 \n", + "3 {'n_estimators': 500, 'min_samples_split': 6, ... -8.872382 \n", + "9 {'n_estimators': 500, 'min_samples_split': 4, ... -9.062297 \n", + "0 {'n_estimators': 100, 'min_samples_split': 2, ... -9.100775 \n", + "7 {'n_estimators': 500, 'min_samples_split': 4, ... -9.147703 \n", + "19 {'n_estimators': 1100, 'min_samples_split': 6,... -9.350800 \n", + "10 {'n_estimators': 1100, 'min_samples_split': 10... -9.274382 \n", + "2 {'n_estimators': 500, 'min_samples_split': 4, ... -9.415934 \n", + "16 {'n_estimators': 1500, 'min_samples_split': 4,... -9.248892 \n", + "21 {'n_estimators': 500, 'min_samples_split': 6, ... -9.365194 \n", + "\n", + " split1_test_score split2_test_score split3_test_score mean_test_score \\\n", + "12 -8.775078 -9.325044 -9.037550 -9.015523 \n", + "3 -8.903982 -9.317120 -9.075047 -9.042086 \n", + "9 -9.042221 -9.439618 -9.153004 -9.174248 \n", + "0 -9.026372 -9.457063 -9.201235 -9.196321 \n", + "7 -9.199053 -9.698781 -9.358627 -9.350987 \n", + "19 -9.382812 -9.475236 -9.291753 -9.375148 \n", + "10 -9.242743 -9.530568 -9.475944 -9.380872 \n", + "2 -9.291198 -9.575363 -9.429866 -9.428068 \n", + "16 -9.316306 -9.798843 -9.427920 -9.447940 \n", + "21 -9.286988 -9.751767 -9.409179 -9.453243 \n", + "\n", + " std_test_score rank_test_score split0_train_score split1_train_score \\\n", + "12 0.201467 1 -6.934705 -6.837958 \n", + "3 0.176489 2 -4.384343 -4.326121 \n", + "9 0.158764 3 -6.955777 -7.088986 \n", + "0 0.162799 4 -7.302003 -7.312645 \n", + "7 0.215296 5 -7.089709 -7.103749 \n", + "19 0.066368 6 -8.513004 -8.658903 \n", + "10 0.124366 7 -0.409811 -0.459465 \n", + "2 0.100721 8 -0.205702 -0.193613 \n", + "16 0.212403 9 -4.821677 -4.876202 \n", + "21 0.177788 10 -5.733003 -5.742441 \n", + "\n", + " split2_train_score split3_train_score mean_train_score std_train_score \n", + "12 -6.869084 -6.840749 -6.870624 0.038950 \n", + "3 -4.823009 -4.229809 -4.440820 0.227453 \n", + "9 -6.913108 -6.940327 -6.974550 0.067813 \n", + "0 -7.173397 -7.386171 -7.293554 0.076569 \n", + "7 -7.021418 -7.080088 -7.073741 0.031358 \n", + "19 -7.820534 -8.017995 -8.252609 0.344461 \n", + "10 -0.393491 -0.370483 -0.408312 0.032671 \n", + "2 -0.164415 -0.141062 -0.176198 0.025235 \n", + "16 -4.776650 -4.729506 -4.801009 0.054284 \n", + "21 -5.571781 -5.666476 -5.678425 0.068177 " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 获取所有cv结果并按测试性能排序\n", + "random_results = pd.DataFrame(random_cv.cv_results_).sort_values('mean_test_score', ascending = False)\n", + "\n", + "random_results.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "GradientBoostingRegressor(alpha=0.9, criterion='friedman_mse', init=None,\n", + " learning_rate=0.1, loss='lad', max_depth=5,\n", + " max_features=None, max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=6, min_samples_split=6,\n", + " min_weight_fraction_leaf=0.0, n_estimators=500,\n", + " n_iter_no_change=None, presort='auto',\n", + " random_state=42, subsample=1.0, tol=0.0001,\n", + " validation_fraction=0.1, verbose=0, warm_start=False)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random_cv.best_estimator_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 网格搜索\n", + "\n", + "随机搜索找到一个大概的值,再用网格搜索更加精确的查找。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "# 创建一系列要评估的树\n", + "trees_grid = {'n_estimators': [100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800]}\n", + "\n", + "model = GradientBoostingRegressor(loss = 'lad', max_depth = 5,\n", + " min_samples_leaf = 6,\n", + " min_samples_split = 6,\n", + " max_features = None,\n", + " random_state = 42)\n", + "\n", + "# 使用树的范围和随机森林模型的网格搜索对象\n", + "grid_search = GridSearchCV(estimator = model, \n", + " param_grid=trees_grid, \n", + " cv = 4, \n", + " scoring = 'neg_mean_absolute_error', \n", + " verbose = 1,\n", + " n_jobs = -1, \n", + " return_train_score = True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 4 folds for each of 15 candidates, totalling 60 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 4 concurrent workers.\n", + "[Parallel(n_jobs=-1)]: Done 42 tasks | elapsed: 1.3min\n", + "[Parallel(n_jobs=-1)]: Done 60 out of 60 | elapsed: 2.2min finished\n" + ] + }, + { + "data": { + "text/plain": [ + "GridSearchCV(cv=4, error_score='raise-deprecating',\n", + " estimator=GradientBoostingRegressor(alpha=0.9,\n", + " criterion='friedman_mse',\n", + " init=None, learning_rate=0.1,\n", + " loss='lad', max_depth=5,\n", + " max_features=None,\n", + " max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0,\n", + " min_impurity_split=None,\n", + " min_samples_leaf=6,\n", + " min_samples_split=6,\n", + " min_weight_fraction_leaf=0.0,\n", + " n_estimators=100,\n", + " n_iter_no_change=None,\n", + " presort='auto',\n", + " random_state=42, subsample=1.0,\n", + " tol=0.0001,\n", + " validation_fraction=0.1,\n", + " verbose=0, warm_start=False),\n", + " iid='warn', n_jobs=-1,\n", + " param_grid={'n_estimators': [100, 150, 200, 250, 300, 350, 400,\n", + " 450, 500, 550, 600, 650, 700, 750,\n", + " 800]},\n", + " pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n", + " scoring='neg_mean_absolute_error', verbose=1)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Fit the grid search\n", + "grid_search.fit(X, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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JBIJPv30U6xfvx4///wzFixYADc3NwDai/xNmzYN2dnZ6NGjB+zt7QFoA4tSqYSLiwtcXFwAaKeyWrZsiVOnTsHPzw8jR44EoD276ueff4ZarUb//v2LpGYiIiIqeYr93Sh9fX1x6dIlhIWFoWfPnmjUqBEEQUBkZCQeP36MevXq4auvvtJvP336dISHh8Pb29tgqmzixInw9vZGQEAAgoODUbVqVVy4cAEJCQlo1aoVevbsWdxPjYiIiF4RBQaczp07P/M0bB1BELBz506TtlUoFFi8eDGCgoKwd+9eREREQBRFVK5cGV988QX69esHGxubZ+6nYsWKWLNmDfz8/HDy5EncvXsXHh4e6NOnD/r27ct3EiciInqNFZgCmjZtanLAee4HlcnQt29f9O3b95nbFjY9Vr58eUydOrUoSyMiIiIrUGDAmTZtWnHWQURERFRknmse5/jx4wgPD8fjx4/h4uKChg0b4p133jHbSA8RERHRizAp4GRmZuL//u//cObMGUgkEri4uCA5ORkbNmxAo0aNsHDhQpPWzRAREREVB5Oug+Pn54eIiAhMnToVISEh2LdvH44fP44ffvgBly5dgr+/v7nrJCIiIjKZSQHn4MGD8Pb2RqdOnfRXGpbJZOjUqROGDh2KAwcOmLVIIiIioudhUsBJSUlBrVq1jPbVqlVL/95PRERERK8CkwJOpUqVcO7cOaN94eHhKF++fJEWRURERPQyTFpk3KNHD8ybNw+2trb46KOP4OrqisTEROzfvx9//vmn0TfjJCIiIrIUkwPO5cuX4efnh5UrV+rbRVFEp06dMGjQILMVSERERPS8TAo4EokE33//Pfr3749z584hNTUVzs7OePvtt+Hp6WnuGkuOrEzIg/ciu303gNcGIiIispjnutBf9erVUb16dQDA5cuXERMTg3LlysHR0dEsxZUkQkoSbBdMgfTGf0BaKrK7cVSLiIjIUkxaZJyUlIQxY8bor3ezdetWDB48GJMmTUKvXr0QExNjzhpfeZK7N2E3c6Q23ABQbAuA7NQhC1dFRET0+jIp4CxZsgSXL1+Gl5cXAGD16tVo3Lgx1qxZAw8PDyxdutSsRb7qRLkNBGWGQZvC/zdIrl60UEVERESvN5MCzqlTpzBmzBi0bt0aly9fRnx8PPr374/atWvj888/L/AU8teFWL4iMr76CaJM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VD0Qd+LJJ59k8ODBeHjc/gwIf39/1q1bh6tr5fpCqsjPUYi7Wo2aWLv2xdq1r+3v19P/XEnZ9kpLH3e2yNMVVUV/5iT6Mydh03doej1qs3Y3Xmm17ADOsglxRZMER1RpHh4ed5TcALi4uNC0adOyCUgIUfW518LavT/W7v1tf09PQx951P5KS59wrsjTFasV/enj6E8fh99W27aZaNHuz1danbG29Aejc/nfx11OEhxRoRISEhg6dCgDBw5kwIABfPrpp1y9epXmzZuzYsUKDAYDSUlJrFmzhv3795OYmIjVasXLy4vevXvz4osv4u3tbW+voDE4uWULFixAVVW++eYbTp8+jcFgoGvXrkyYMIGWLVva2yhoDE5u2ciRIxkyZAhLlizhyJEjmM1mWrVqxahRoxgwYEC++ztz5gzLly/nyJEjZGRk0KZNG8aMGcOJEydYunQpS5YsoVu3bvnOq4jPduLEiYSGhvL999/z4YcfcuLECerUqcO0adMICLB11R87doxvv/2Wo0ePcv36derVq0efPn0YPXo0Pj4+Jb6WENVKLY88e20pV1NtPTwnw9CfCit2N3XFarGN+YkKhw3foBmcUFu0t6/BY23RXhKeciAJjnCIyMhIduzYgb+/P82aNaNGjRoYDAZiYmIYP348V69epWXLlgQEBHDt2jWOHz/OL7/8QkhICN9//z01atQo9hobNmxg586dNGvWjN69e3Pq1Cl27NjBoUOHWLduHfXq1Su2jejoaF588UXc3d3p3LkzycnJhIeH884777BgwQL69+9vPzYsLIzJkyeTmZlJ27Zt6dSpE+Hh4bz++uu0bdu2iKuUrcI+21xTpkzBZDLRt29fTp48aY/tp59+4uOPP0ZVVTp06IC3tzfR0dH8/PPPbN26lUWLFuW7j8KuZbFYKux+hahoWm1PLL0Csfw5S0tJS7H17OSO4UmKK/J8xZJj6xGKPAqsQnNywtrC397Do7ZoB07GCriT6k0SnDvk/vwAR4dQKtdX/c/RIQC2AclPP/00kydPBkD9c42KRYsWcfXqVd544w2eeuop+/GpqamMHTuWuLg4du3alW+Ac0F27tzJlClTePzxxwHIyclh0qRJHDp0iF9//bVEs64OHDjAkCFDmDJlCs7Ott+wlixZwtdff833339vT3BycnJ47733yMzM5N1332Xo0KEA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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 将结果导入数据框\n", + "results = pd.DataFrame(grid_search.cv_results_)\n", + "\n", + "# 绘制训练误差和测试误差与树木数量的关系图\n", + "figsize(8, 8)\n", + "plt.style.use('fivethirtyeight')\n", + "plt.plot(results['param_n_estimators'], -1 * results['mean_test_score'], label = 'Testing Error')\n", + "plt.plot(results['param_n_estimators'], -1 * results['mean_train_score'], label = 'Training Error')\n", + "plt.xlabel('Number of Trees'); plt.ylabel('Mean Abosolute Error'); plt.legend();\n", + "plt.title('Performance vs Number of Trees');" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean_fit_timestd_fit_timemean_score_timestd_score_timeparam_n_estimatorsparamssplit0_test_scoresplit1_test_scoresplit2_test_scoresplit3_test_scoremean_test_scorestd_test_scorerank_test_scoresplit0_train_scoresplit1_train_scoresplit2_train_scoresplit3_train_scoremean_train_scorestd_train_score
1314.3698400.2819170.0324130.004375750{'n_estimators': 750}-8.901092-8.751699-9.298411-9.049730-9.0001810.2018361-6.716494-6.660453-6.520818-6.579989-6.6194380.074807
1414.9570210.3277900.0301690.001295800{'n_estimators': 800}-8.903857-8.758299-9.296941-9.047485-9.0015940.1987932-6.689643-6.648109-6.486269-6.530287-6.5885770.083101
1213.4064160.3166430.0281740.001915700{'n_estimators': 700}-8.904269-8.755862-9.312990-9.053755-9.0066660.2058113-6.743886-6.695770-6.611240-6.624919-6.6689530.053861
1112.7641330.1963180.0261810.000824650{'n_estimators': 650}-8.906208-8.755401-9.325190-9.052215-9.0096990.2101864-6.778068-6.721452-6.708191-6.666758-6.7186170.039814
910.6540210.3139240.0296710.008415550{'n_estimators': 550}-8.918502-8.756938-9.325492-9.042721-9.0108610.2079705-6.874737-6.781878-6.809121-6.745712-6.8028620.047201
\n", + "
" + ], + "text/plain": [ + " mean_fit_time std_fit_time mean_score_time std_score_time \\\n", + "13 14.369840 0.281917 0.032413 0.004375 \n", + "14 14.957021 0.327790 0.030169 0.001295 \n", + "12 13.406416 0.316643 0.028174 0.001915 \n", + "11 12.764133 0.196318 0.026181 0.000824 \n", + "9 10.654021 0.313924 0.029671 0.008415 \n", + "\n", + " param_n_estimators params split0_test_score \\\n", + "13 750 {'n_estimators': 750} -8.901092 \n", + "14 800 {'n_estimators': 800} -8.903857 \n", + "12 700 {'n_estimators': 700} -8.904269 \n", + "11 650 {'n_estimators': 650} -8.906208 \n", + "9 550 {'n_estimators': 550} -8.918502 \n", + "\n", + " split1_test_score split2_test_score split3_test_score mean_test_score \\\n", + "13 -8.751699 -9.298411 -9.049730 -9.000181 \n", + "14 -8.758299 -9.296941 -9.047485 -9.001594 \n", + "12 -8.755862 -9.312990 -9.053755 -9.006666 \n", + "11 -8.755401 -9.325190 -9.052215 -9.009699 \n", + "9 -8.756938 -9.325492 -9.042721 -9.010861 \n", + "\n", + " std_test_score rank_test_score split0_train_score split1_train_score \\\n", + "13 0.201836 1 -6.716494 -6.660453 \n", + "14 0.198793 2 -6.689643 -6.648109 \n", + "12 0.205811 3 -6.743886 -6.695770 \n", + "11 0.210186 4 -6.778068 -6.721452 \n", + "9 0.207970 5 -6.874737 -6.781878 \n", + "\n", + " split2_train_score split3_train_score mean_train_score std_train_score \n", + "13 -6.520818 -6.579989 -6.619438 0.074807 \n", + "14 -6.486269 -6.530287 -6.588577 0.083101 \n", + "12 -6.611240 -6.624919 -6.668953 0.053861 \n", + "11 -6.708191 -6.666758 -6.718617 0.039814 \n", + "9 -6.809121 -6.745712 -6.802862 0.047201 " + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results.sort_values('mean_test_score', ascending = False).head(5)" + ] + }, { "cell_type": "code", "execution_count": null,