coal_materials/.ipynb_checkpoints/20231227-checkpoint.ipynb

629 lines
669 KiB
Plaintext
Raw Normal View History

2024-01-05 09:12:27 +08:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "a3901bba-d66d-4358-89a7-50dc4b3dd91e",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "a4713d33-c5a2-4f49-8aed-873069543bec",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th>Unnamed: 0_level_0</th>\n",
" <th colspan=\"2\" halign=\"left\">原料特征</th>\n",
" <th colspan=\"2\" halign=\"left\">热处理条件</th>\n",
" <th colspan=\"3\" halign=\"left\">第一次热处理</th>\n",
" <th colspan=\"2\" halign=\"left\">第二次热处理</th>\n",
" <th>...</th>\n",
" <th>模板剂</th>\n",
" <th colspan=\"2\" halign=\"left\">活化剂</th>\n",
" <th>混合方式</th>\n",
" <th colspan=\"5\" halign=\"left\">碳材料结构特征</th>\n",
" <th>参考文献</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>原料</th>\n",
" <th>是否预处理</th>\n",
" <th>软化点</th>\n",
" <th>热处理次数</th>\n",
" <th>是否是中温停留</th>\n",
" <th>温度</th>\n",
" <th>升温速率</th>\n",
" <th>保留时间</th>\n",
" <th>温度</th>\n",
" <th>升温速率·</th>\n",
" <th>...</th>\n",
" <th>与沥青比例</th>\n",
" <th>是否KOH活化</th>\n",
" <th>比例</th>\n",
" <th>混合方式</th>\n",
" <th>比表面积</th>\n",
" <th>总孔体积</th>\n",
" <th>微孔体积</th>\n",
" <th>平均孔径</th>\n",
" <th>平均孔径.1</th>\n",
" <th>Unnamed: 25_level_1</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>煤沥青</td>\n",
" <td>否</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>否</td>\n",
" <td>500</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>1.0</td>\n",
" <td>是</td>\n",
" <td>1.0</td>\n",
" <td>溶剂</td>\n",
" <td>908.07</td>\n",
" <td>0.40</td>\n",
" <td>0.34</td>\n",
" <td>1.75</td>\n",
" <td>NaN</td>\n",
" <td>姜宇晨 硬模板法制备煤焦油沥青基多孔碳及其超电性能研究</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>煤沥青</td>\n",
" <td>否</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>否</td>\n",
" <td>600</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>1.0</td>\n",
" <td>是</td>\n",
" <td>0.5</td>\n",
" <td>溶剂</td>\n",
" <td>953.95</td>\n",
" <td>0.66</td>\n",
" <td>0.35</td>\n",
" <td>2.76</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>煤沥青</td>\n",
" <td>否</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>否</td>\n",
" <td>600</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>1.0</td>\n",
" <td>是</td>\n",
" <td>1.0</td>\n",
" <td>溶剂</td>\n",
" <td>1388.62</td>\n",
" <td>0.61</td>\n",
" <td>0.53</td>\n",
" <td>1.77</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>煤沥青</td>\n",
" <td>否</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>否</td>\n",
" <td>600</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>1.0</td>\n",
" <td>是</td>\n",
" <td>2.0</td>\n",
" <td>溶剂</td>\n",
" <td>1444.63</td>\n",
" <td>0.59</td>\n",
" <td>0.55</td>\n",
" <td>1.62</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>煤沥青</td>\n",
" <td>否</td>\n",
" <td>NaN</td>\n",
" <td>2</td>\n",
" <td>否</td>\n",
" <td>500</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>600.0</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>1.0</td>\n",
" <td>是</td>\n",
" <td>1.0</td>\n",
" <td>溶剂</td>\n",
" <td>1020.99</td>\n",
" <td>0.45</td>\n",
" <td>0.35</td>\n",
" <td>1.77</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 26 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0_level_0 原料特征 热处理条件 第一次热处理 第二次热处理 \\\n",
" 原料 是否预处理 软化点 热处理次数 是否是中温停留 温度 升温速率 保留时间 温度 升温速率· \n",
"0 煤沥青 否 NaN 1 否 500 5 2 NaN NaN \n",
"1 煤沥青 否 NaN 1 否 600 5 2 NaN NaN \n",
"2 煤沥青 否 NaN 1 否 600 5 2 NaN NaN \n",
"3 煤沥青 否 NaN 1 否 600 5 2 NaN NaN \n",
"4 煤沥青 否 NaN 2 否 500 5 2 600.0 5.0 \n",
"\n",
" ... 模板剂 活化剂 混合方式 碳材料结构特征 \\\n",
" ... 与沥青比例 是否KOH活化 比例 混合方式 比表面积 总孔体积 微孔体积 平均孔径 平均孔径.1 \n",
"0 ... 1.0 是 1.0 溶剂 908.07 0.40 0.34 1.75 NaN \n",
"1 ... 1.0 是 0.5 溶剂 953.95 0.66 0.35 2.76 NaN \n",
"2 ... 1.0 是 1.0 溶剂 1388.62 0.61 0.53 1.77 NaN \n",
"3 ... 1.0 是 2.0 溶剂 1444.63 0.59 0.55 1.62 NaN \n",
"4 ... 1.0 是 1.0 溶剂 1020.99 0.45 0.35 1.77 NaN \n",
"\n",
" 参考文献 \n",
" Unnamed: 25_level_1 \n",
"0 姜宇晨 硬模板法制备煤焦油沥青基多孔碳及其超电性能研究 \n",
"1 NaN \n",
"2 NaN \n",
"3 NaN \n",
"4 NaN \n",
"\n",
"[5 rows x 26 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = pd.read_excel('./data/20240102/20231227.xlsx', header=[0, 1])\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "8b113a99-8c56-455c-9ee8-3ac32a686e24",
"metadata": {},
"outputs": [],
"source": [
"data.columns = ['-'.join([y for y in x if 'Unnamed' not in y]) for x in data.columns]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "e134c799-b11c-46c8-898d-ac1d9e47e527",
"metadata": {},
"outputs": [],
"source": [
"ignore_cols = data.columns[:3].tolist() + data.columns[-2:].tolist()\n",
"data.drop(columns=ignore_cols, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "359c9cc6-2694-46a6-9f18-6361e220542a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['热处理条件-热处理次数', '热处理条件-是否是中温停留', '第一次热处理-温度', '第一次热处理-升温速率',\n",
" '第一次热处理-保留时间', '第二次热处理-温度', '第二次热处理-升温速率·', '第二次热处理-保留时间',\n",
" '共碳化-是否是共碳化物质', '共碳化-共碳化物质/沥青', '模板剂-与沥青比例', '活化剂-是否KOH活化', '活化剂-比例',\n",
" '混合方式-混合方式', '碳材料结构特征-比表面积', '碳材料结构特征-总孔体积', '碳材料结构特征-微孔体积',\n",
" '碳材料结构特征-平均孔径', '共碳化-种类_2-甲基咪唑', '共碳化-种类_三聚氰胺', '共碳化-种类_尿素',\n",
" '共碳化-种类_硫酸铵', '共碳化-种类_聚磷酸铵', '模板剂-模板剂制备方式_无', '模板剂-模板剂制备方式_溶液合成',\n",
" '模板剂-模板剂制备方式_热分解', '模板剂-模板剂制备方式_直接购买', '模板剂-模板剂制备方式_自己合成',\n",
" '模板剂-种类_Al2O3', '模板剂-种类_TiO2', '模板剂-种类_α-Fe2O3', '模板剂-种类_γ-Fe2O3',\n",
" '模板剂-种类_二氧化硅', '模板剂-种类_氢氧化镁', '模板剂-种类_氧化钙', '模板剂-种类_氧化锌', '模板剂-种类_氧化镁',\n",
" '模板剂-种类_氯化钠', '模板剂-种类_氯化钾', '模板剂-种类_碱式碳酸镁', '模板剂-种类_碳酸钙', '模板剂-种类_纤维素'],\n",
" dtype='object')"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.columns"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "6cc22ecb-1070-4e63-a496-efc838094958",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import LabelEncoder\n",
"encoder = LabelEncoder()\n",
"for col in ['热处理条件-热处理次数', '热处理条件-是否是中温停留', '共碳化-是否是共碳化物质', '活化剂-是否KOH活化', '混合方式-混合方式']:\n",
" encoded_labels = encoder.fit_transform(data[col])\n",
" data[col] = encoded_labels"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "24f58281-9f13-49ef-b44d-81d0644d6976",
"metadata": {},
"outputs": [],
"source": [
"object_cols = ['共碳化-种类', '模板剂-模板剂制备方式', '模板剂-种类']"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "3368163e-85a1-4487-8078-be51cb5fb560",
"metadata": {},
"outputs": [],
"source": [
"data = pd.get_dummies(data, columns=object_cols)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "92d5da6b-f714-4a78-9aa7-7cf9dff1d0a0",
"metadata": {},
"outputs": [],
"source": [
"out_cols = [x for x in data.columns if '碳材料结构特征' in x]\n",
"feature_cols = [x for x in data.columns if x not in out_cols]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "e4946bd7-ae94-4981-82ed-66e2b496e035",
"metadata": {},
"outputs": [],
"source": [
"train_data = data.reset_index(drop=True)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "4109685a-4d5b-4c63-b4e2-eb9db3989d02",
"metadata": {},
"outputs": [],
"source": [
"import xgboost as xgb\n",
"from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "2bbdcd34-16c1-43ba-b249-6c7d54db8ac2",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import KFold, train_test_split\n",
"kf = KFold(n_splits=10, shuffle=True, random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "42597842-1acb-4263-bdad-bfca7b11bcb5",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "94af2a3a-6f61-46bf-8cd4-2b7e0da8b2c4",
"metadata": {},
"outputs": [],
"source": [
"params_xgb = {\"objective\": 'reg:squarederror',\n",
" \"subsample\": 0.9,\n",
" \"max_depth\": 15,\n",
" \"eta\": 0.05,\n",
" \"gamma\": 0,\n",
" \"lambda\": 1,\n",
" \"alpha\": 0,\n",
" \"colsample_bytree\": 0.8,}\n",
"num_boost_round = 1000"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "f17eadb3-4767-4eca-bbed-880bf9cbb7a3",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "5bfcc8aa-f13c-4a7d-9d15-b79087e11017",
"metadata": {},
"outputs": [],
"source": [
"plt.rcParams[\"font.sans-serif\"] = [\"SimHei\"] # 设置字体\n",
"plt.rcParams[\"axes.unicode_minus\"] = False # 正常显示负号"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "db4dbc2d-534e-4a7e-b45c-ea25ab269502",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9QAAAKoCAYAAACWQ7eKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydebwcZZn9T/Xet++WldwkBAICEsJilCCKsipBElCcQXEYEUEkigMjKiJqCMgmOuIooiAjahiNAgNEMIAIKv7AgGExhN2EbDdku/vtver3x/u+VdXd1evtpbr7fD+ffO7tvdLdt6rOe57nPJphGAYIIYQQQgghhBBSFp5GbwAhhBBCCCGEENKMUFATQgghhBBCCCEVQEFNCCGEEEIIIYRUAAU1IYQQQgghhBBSARTUhBBCCCGEEEJIBVBQE0IIIYQQQgghFUBBTQghhBBCCCGEVAAFNSGEEEIIIYQQUgEU1IQQQlzDpk2bsGXLlkZvBmkSBgYGsGPHjkZvBiGEkDaGgpoQQkhDuemmm/D//t//AwBcddVV+M53vgMAeOGFF/DRj3405/5f//rXcfnll+d9vieffBLvfve78dZbb+W9z0MPPYRdu3blvX1sbAwvv/wydF13vP0nP/kJ9uzZ43jbjTfeiK985St5nxsAUqkUvvOd7+Cf//xnxvU333wzHnnkkYKPtRMKhXD33XfnXL9ixQrMmjWr6OPvuecefO9730MsFiv5NauFruuIx+MTeo7LL78cixcvLnq/jRs35rzXALBmzRqsXLmy7Nc1DKPsxxBCCGlNfI3eAEIIIe3BySefDF3X4fV6YRgGkskkvvSlL+Hhhx/GtGnT8J73vAeBQACBQAAAMD4+jmeeeSbned58802k0+m8rzM+Po6//e1vCAaDee9zxhln4He/+x2OP/54x9ufeuopnHTSSYjH4+b2KF5//XVceOGF2L59O5YtW5bz2I0bN2Lr1q15X1vx5S9/Ge94xzuw3377AQDS6TSWL1+O8847Dx/4wAeKPh4AvF4vuru7AQiBmkqlEAgE0NXVBZ9PHOINw0AsFkMgEIDX6zUfOz4+ji9/+csIBAL49Kc/jddeew0ejyfjPgrDMJBIJDBnzhxMmjSppG1TvPXWWzjttNPw05/+FIceeqh5/bPPPovFixfjnnvuwdFHH53zuF27dqG/vx9+v9/xeWfOnIlQKFTwc1b87Gc/w/e//31s2bIFnZ2d5vWPP/44fve73+FjH/tYwcdHo1GsW7cO/+///T+sWrUKBxxwAP77v/8bY2Njjvfv7Ow0339CCCGtDff2hBBC6sJFF12EDRs24NJLL8V9992HVCqFefPmwev1miLO4/HA4xHFU16v11FMBYNBpFKpvK+jBLASmoqvfe1rSKVS+Pa3vw2/3w+/348HHngAv/jFL3DLLbfgwgsvxH//939jxowZ5nNki2kAuOWWW3DggQeaLnk8Hsf27dsRCASgaRoSiQRSqRS2b98OAEgkEjAMA/vss4/5HD6fL+P/DQCPPvoohoeH8cUvfrHg+/iHP/wBN998M37961/D7/cjHA4DAP75z3/igAMOyLivpmnm74899hiOO+448/IXvvAF7Nq1C2vWrEFPTw+WLFmCXbt2wev1QtM0DA0NoaOjA36/H7quI5lMYsWKFY5VA4WYPn065syZg9NOOw3PPfccenp6AACrVq1COBzGu971LsfHPfDAA1i6dGnOZzA0NARAuPDZ72E+Vq9ejU9+8pMZYhoQn0M+wQ4Iwf1v//Zv6O/vh8fjwb777otPfepTeM973oN77rkHH//4x/Nu+4c+9KGi20UIIaT5oaAmhBBSF5YsWYLf/va3mDt3bobYiEajOOuss3DWWWeZ191www0AYJYtp9Np02VVJBIJpNNpaJqGQCBgCnElIg3DQDQahdfrRSAQwLHHHovFixfjvPPOAyAc3auuugqnnnoqurq6EI1G8f73vx9//vOfM4Sonf7+fvzkJz/Br371KwQCAdx+++048MAD8f73vx9erxc+nw+pVAqGYWDfffc1t3O//fbD66+/jtHRUWzdutX8f2zbtg3r16/H29/+dvz0pz9FKBTCv//7vzu+9q233oo5c+Zg/fr1eO2113Kc2X333Rfbtm1DKBTCww8/jC9/+ct44YUXAAjRr4QsAHzjG9/Az372M9x777046KCDAAhn3Y6mafjJT36Cs88+23F7SkXTNNx+++044YQTsHXrVnM77rzzTlx22WV5Be0555yDc845x7xsGAYuueQS/OhHP8Jll12Gf/3Xf8Wzzz5b9PVfeOEFrFmzBv/93/+NnTt3wuv1mt+VeDyOdDqNwcFB8/7pdBqhUAiRSATHHHMMHnjgAcydOxdXX301du3aha9//esAgPvuuw/77LNPzvvm8/kQCoXKeYsIIYQ0MRTUhBBC6sazzz6LI488MuO6P/zhDwCA3t5e/PWvf8UhhxyS87jHHnsspwz65z//OU499VSkUik89NBDOY9RJbfXXXcdvvrVr+Lkk0/GiSeeaPZr/9///R+Gh4fx1a9+FX6/H7/97W/xwQ9+ECeffDK+973v5TyfYRhYunQpFi5ciCVLluCxxx7D+eefj5tuugmpVMp0Si+55BJs2bIFd911l/lY5aj/7W9/wymnnAKfz4d0Oo3zzz8fyWQSTz31FO655x5cddVVmDx5csbrbtu2DVdffbUp8tevX490Oo0rr7wSsVgMt912Gx566CFcffXV6OvrAwBEIhF4PB709vbm/D/uvfdefOtb38I111yDk08+GUuXLsXy5csxffr0nPtOlCeffBLvec97zMvZn+2FF16ICy+8EFOmTCnY055Op/GZz3wG9957Lx5//HG8973vLXkbfvzjHwMAjjrqKLz97W/HK6+8knOf7DL22267Deeffz5SqRQOPvjgDNGv2hWUKHei0G2EEEJaCwpqQgghdePee+/FIYccgh//+Mfwer0455xzoOs6RkZGMDQ0ZPYTK5QL/Z73vAevv/46AoEA3v3ud+OYY44xS7c1TTN7s1OpFBYuXIj+/n5s2bIF8XjcFJWvvvoqvvvd7yIcDkPXdbznPe/Bv/7rv2JgYAAdHR1Ip9P4v//7P/z97393LPX+yU9+gvvuuw/ve9/7cNZZZ2HNmjU46aST8B//8R9IJBLQdT3HbdV1HdFoFJFIBABw4oknIpFI4LbbbsMFF1yABx98EMcddxw+/OEPY8mSJbjkkkvQ0dGR8RwvvPACrr76arNcee3atUilUli9ejVSqRTWrFmDDRs2YPfu3UgmkwiFQhgbG4Ou66bzqus6xsfH0dfXhw9/+MO4++67ccYZZ+Cmm27Cj3/8Y3zgAx/AGWecUY2POAPlohcK8VqxYkXRELfvfve7uO+++/DnP/8Z8+fPL/n1+/v7cccdd5iXn3vuOQSDQWiahgULFmB4eBi6rmP37t146623EAqFzAoDQCyO/OQnP8l4zp///OcAhOgmhBBCKKgJIYTUhTVr1uCll15CKBTCyMgI/vrXv2L37t0Zid3ZYhIAjj32WDz++OPYf//98fe//x3btm1DOBzGjBkzcsqef/7zn5u9y9kp1x/5yEfwxhtvwOv1Ynx8HOeeey50Xccll1yCeDyORx55BKtXr8YHP/hBPPHEEznb8c53vhMXXHABDj/8cDzyyCPYsWMHHnvsMWiahosvvjhHeNnLxrMF5W9/+1vz9+HhYcyaNQtf+MIX8MUvfhEbN27Egw8+aLqc6rGBQADj4+N4/vnn8cQTT+DII49Eb28vbrvtNhxzzDE4//zzcfvtt2e8TrbzunnzZsyePRtnnHEG/vnPf+Ib3/gGvvnNb+KMM87Aa6+9hj/96U8455xzchYGkskkotEourq6AKBgKJw9jKtQf7KdYvcbHh7GAQccYIrpVCpVUujX1772NUydOhWbN28GALMU+/XXX8ezzz6LpUuX4tVXX0UoFML999+PM888M+N5r7jiCvzHf/wH/H4/jjzySJx00km44YYbkEgkHJ1uQggh7QdrkgghhNSFq6++GgDwyU9+Etd
"text/plain": [
"<Figure size 1200x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9QAAAKoCAYAAACWQ7eKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydeZgcZdn1T3X13jPTM5N1kpAQkCUxBIwQkH2VIAQRFcWXT1BBjaLwioioGCIKoii4IpuiBFkUBCIYNvFlEQySEIghyJIQkkwy2Wbrvbvq+6Pqqapep5fq/fyuK9fMdFd3V3p6quo897nPLamqqoIQQgghhBBCCCEl4aj3DhBCCCGEEEIIIc0IBTUhhBBCCCGEEFIGFNSEEEIIIYQQQkgZUFATQgghhBBCCCFlQEFNCCGEEEIIIYSUAQU1IYQQQgghhBBSBhTUhBBCCCGEEEJIGVBQE0IIIYQQQgghZUBBTQghpGHYuHEjNm3aVO/dIE3C7t27MTAwUO/dIIQQ0sZQUBNCCKkrN9xwA/75z38CAL73ve/huuuuAwC88sor+OhHP5q1/Xe+8x1cfvnleZ/v+eefx2GHHYZt27bl3ebRRx/Fjh078t4fCoWwbt06KIqS8/6bbroJu3btynnfj3/8Y3zjG9/I+9wAkEwmcd111+Htt99Ou/1Xv/oVHn/88YKPteL1enHfffdl3b506VJMnTp1zMfff//9uP766xGNRot+zVIIh8O44447jJ/ffPNN/PSnP03b5rbbbsOvfvWrsp7/8ssvx2mnnTbmdhs2bMh6rwFgxYoVuOeee0p+XVVVS34MIYSQ1sRZ7x0ghBDSHpx88slQFAWyLENVVSQSCXz961/HY489hgkTJuDwww+H2+2G2+0GoImxf//731nP88477yCVSuV9nXA4jH/961/weDx5tznzzDPx17/+Fccdd1zO+1944QWceOKJiMVixv4I3nzzTXzxi1/E1q1bsXjx4qzHbtiwAZs3b8772oJLL70U73vf+7DXXnsBAFKpFJYsWYLPfe5zOOmkk8Z8PADIsoyuri4AgKIoSCaTcLvd6OzshNOpneJVVUU0GoXb7YYsy8Zjw+EwLr30Urjdbnz2s5/FG2+8AYfDkbaNQFVVxONxTJ8+HT09PUXtGwD84Ac/wD333IMTTjgB27ZtQygUwl133YUvfvGLePPNNzF37lwsX74ckyZNynrsjh070N/fD5fLlfO5p0yZAq/XW/D3LPjd736Hn/3sZ9i0aRM6OjqM2//xj3/gr3/9Kz7xiU8UfHwkEsGaNWvwz3/+E8uWLcM+++yDn//85wiFQjm37+joMN5/QgghrQ2P9oQQQmrChRdeiPXr1+OSSy7Bgw8+iGQyidmzZ0OWZUPEORwOOByaeUqW5ZxiyuPxIJlM5n0dIYCF0BR861vfQjKZxI9+9CO4XC64XC48/PDD+MMf/oAbb7wRX/ziF/Hzn/8ckydPNp4jU0wDwI033oh9993XqJLHYjFs3boVbrcbkiQhHo8jmUxi69atAIB4PA5VVTFjxgzjOZxOZ9r/GwCefPJJDA8P42tf+1rB9/GJJ57Ar371K9x9991wuVzw+XwAgLfffhv77LNP2raSJBnfP/XUUzj22GONn7/yla9gx44dWLFiBYLBIBYuXIgdO3ZAlmVIkoShoSH4/X64XC4oioJEIoGlS5fmdA3k4tFHH8UNN9yAp59+GuvWrcMFF1yAP/7xj3A6nXj77bdx3nnnYeXKlVi5ciW+//3vZz3+4YcfxqJFi7J+B0NDQwC0Knzme5iP5cuX49Of/nSamAa030M+wQ5ogvt//ud/0N/fD4fDgT333BPnnXceDj/8cNx///345Cc/mfNxDz/8MD70oQ+NuV+EEEKaHwpqQgghNWHhwoX405/+hJkzZ6aJjUgkgrPPPhtnn322cdu1114LAIZtOZVKGVVWQTweRyqVgiRJcLvdhhAXIlJVVUQiEciyDLfbjWOOOQannXYaPve5zwHQKrrf+973cOqpp6KzsxORSARHH300nn766TQhaqW/vx833XQT7rrrLrjdbtx2223Yd999cfTRR0OWZTidTiSTSaiqij333NPYz7322gtvvvkmRkdHsXnzZuP/sWXLFqxduxb7778/br31Vni9Xvy///f/cr72zTffjOnTp2Pt2rV44403siqze+65J7Zs2QKv14vHHnsMl156KV555RUAmugPBoPGtldccQV+97vf4YEHHsB+++0HQKusW5EkCTfddBPOOeecnPtTiLVr1+JjH/sYbrjhBsyZMwcvvfQSPB6PUQEXCxpbt27F22+/jQMPPBAAkEgkkEql4PV6ce655+Lcc881nlNVVVx88cX49a9/jcsuuwwf//jHsWrVqjH35ZVXXsGKFSvw85//HNu3b4csy8ZnJRaLIZVKYXBw0NhevH4gEMCRRx6Jhx9+GDNnzsRVV12FHTt24Dvf+Q4A4MEHH8SMGTOy3jen0wmv11vye0YIIaQ5oaAmhBBSM1atWoVDDjkk7bYnnngCANDd3Y3nnnsO733ve7Me99RTT2XZoH//+9/j1FNPRTKZxKOPPpr1GGG5veaaa/DNb34TJ598Mk444QSjX/svf/kLhoeH8c1vfhMulwt/+tOf8MEPfhAnn3wyrr/++qznU1UVixYtwvz587Fw4UI89dRTOP/883HDDTcgmUwaldKLL74YmzZtwp///GfjsaKi/q9//QunnHIKnE4nUqkUzj//fCQSCbzwwgu4//778b3vfQ+9vb1pr7tlyxZcddVVhshfu3YtUqkUrrzySkSjUdxyyy149NFHcdVVV6Gvrw8AEAgE4HA40N3dnfX/eOCBB/D9738fP/jBD3DyySdj0aJFWLJkCSZOnJi1bbnst99+uO2223DWWWfhjDPOwAEHHIBwOIwXX3wRQ0NDePHFFxGPx/HXv/4Vsizj8MMPRygUgizLuOSSS/CDH/wg7flSqRQuuOACPPDAA/jHP/6BI444ouh9+c1vfgMAOPTQQ7H//vvj9ddfz9om08Z+yy234Pzzz0cymcSsWbPSqtiiXUGI8lwUuo8QQkhrQUFNCCGkZjzwwAN473vfi9/85jeQZRnnnnsuFEXByMgIhoaGjH5igahCH3744XjzzTfhdrtx2GGH4cgjjzSs25IkGb3ZyWQS8+fPR39/PzZt2oRYLGaIyv/+97/4yU9+Ap/PB0VRcPjhh+PjH/84du/eDb/fj1Qqhb/85S946aWXclq9b7rpJjz44IM46qijcPbZZ2PFihU48cQT8dWvfhXxeByKomTZhxVFQSQSQSAQAACccMIJiMfjuOWWW/D5z38ejzzyCI499licccYZWLhwIS6++GL4/f6053jllVdw1VVXGXbllStXIplMYvny5Ugmk1ixYgXWr1+PnTt3IpFIwOv1IhQKQVEUo/KqKArC4TD6+vpwxhln4L777sOZZ56JG264Ab/5zW9w0kkn4cwzz7TjVwxAs+ufddZZeOaZZ7B9+3b8z//8D/bee28AwCWXXIJkMonFixfj5ptvxuLFi3HFFVfglFNOwfnnn5/TUv6Tn/wEDz74IJ5++mnMmTOn6P3o7+/H7bffbvz88ssvw+PxQJIkzJs3D8PDw1AUBTt37sS2bdvg9XoNhwGgLY7cdNNNac/5+9//HoAmugkhhBAKakIIITVhxYoVeO211+D1ejEyMoLnnnsOO3fuTEvszhSTAHDMMcfgH//4B/bee2+89NJL2LJlC3w+HyZPnpxle/79739v9C5nplx/5CMfwVtvvQVZlhEOh/GZz3wGiqLg4osvRiwWw+OPP47ly5fjgx/8IJ599tms/Xj/+9+Pz3/+8zjwwAPx+OOPY2BgAE899RQkScJFF12UJbystvHMVOg//elPxvfDw8OYOnUqvvKVr+BrX/saNmzYgEceecSocorHut1uhMNhrF69Gs8++ywOOeQQdHd345ZbbsGRRx6J888/H7fddlva62RWXt99911MmzYNZ555Jt5++21cccUV+O53v4szzzwTb7zxBv7v//4P5557btbCQCK
"text/plain": [
"<Figure size 1200x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"eva_total = list()\n",
"index_list = list()\n",
"eva_cols = ['MSE', 'RMSE', 'MAE', 'MAPE', 'R2']\n",
"for col in out_cols:\n",
" eva_list = list()\n",
" train_data = train_data[~train_data[col].isna()].reset_index(drop=True)\n",
" cur_test = list()\n",
" cur_real = list()\n",
" for (train_index, test_index) in kf.split(train_data):\n",
" train = train_data.loc[train_index]\n",
" valid = train_data.loc[test_index]\n",
" X_train, Y_train = train[feature_cols], np.log1p(train[col])\n",
" X_valid, Y_valid = valid[feature_cols], np.log1p(valid[col])\n",
" dtrain = xgb.DMatrix(X_train, Y_train)\n",
" dvalid = xgb.DMatrix(X_valid, Y_valid)\n",
" watchlist = [(dvalid, 'eval')]\n",
" gb_model = xgb.train(params_xgb, dtrain, num_boost_round, evals=watchlist,\n",
" early_stopping_rounds=50, verbose_eval=False)\n",
" y_pred = np.expm1(gb_model.predict(xgb.DMatrix(X_valid)))\n",
" y_true = np.expm1(Y_valid.values)\n",
" MSE = mean_squared_error(y_true, y_pred)\n",
" RMSE = np.sqrt(mean_squared_error(y_true, y_pred))\n",
" MAE = mean_absolute_error(y_true, y_pred)\n",
" MAPE = mean_absolute_percentage_error(y_true, y_pred)\n",
" R_2 = r2_score(y_true, y_pred)\n",
" cur_test.extend(y_pred[:7])\n",
" cur_real.extend(y_true[:7])\n",
" # print('MSE:', round(MSE, 4), end=', ')\n",
" # print('RMSE:', round(RMSE, 4), end=', ')\n",
" # print('MAE:', round(MAE, 4), end=', ')\n",
" # print('MAPE:', round(MAPE*100, 2), '%', end=', ')\n",
" # print('R_2:', round(R_2, 4)) #R方为负就说明拟合效果比平均值差\n",
" eva_list.append([MSE, RMSE, MAE, MAPE, R_2])\n",
" plt.figure(figsize=(12, 8))\n",
" plt.plot(range(len(cur_test)), cur_real, 'o-', label='real')\n",
" plt.plot(range(len(cur_test)), cur_test, '*-', label='pred')\n",
" plt.legend(loc='best')\n",
" plt.title(f'{col}')\n",
" plt.show()\n",
" eva_total.append(np.mean(eva_list, axis=0))\n",
" index_list.append(f\"{col}\")"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "dcce8331-256f-4e22-8ac5-f07dca12f3cf",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>MSE</th>\n",
" <th>RMSE</th>\n",
" <th>MAE</th>\n",
" <th>MAPE</th>\n",
" <th>R2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>碳材料结构特征-比表面积</th>\n",
" <td>303184.717382</td>\n",
" <td>544.657385</td>\n",
" <td>421.657610</td>\n",
" <td>0.847088</td>\n",
" <td>0.372696</td>\n",
" </tr>\n",
" <tr>\n",
" <th>碳材料结构特征-总孔体积</th>\n",
" <td>0.128721</td>\n",
" <td>0.354206</td>\n",
" <td>0.280979</td>\n",
" <td>0.900388</td>\n",
" <td>0.435381</td>\n",
" </tr>\n",
" <tr>\n",
" <th>碳材料结构特征-微孔体积</th>\n",
" <td>0.042627</td>\n",
" <td>0.205114</td>\n",
" <td>0.160595</td>\n",
" <td>3.522258</td>\n",
" <td>0.497659</td>\n",
" </tr>\n",
" <tr>\n",
" <th>碳材料结构特征-平均孔径</th>\n",
" <td>0.675843</td>\n",
" <td>0.763879</td>\n",
" <td>0.509585</td>\n",
" <td>0.172561</td>\n",
" <td>0.307433</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" MSE RMSE MAE MAPE R2\n",
"碳材料结构特征-比表面积 303184.717382 544.657385 421.657610 0.847088 0.372696\n",
"碳材料结构特征-总孔体积 0.128721 0.354206 0.280979 0.900388 0.435381\n",
"碳材料结构特征-微孔体积 0.042627 0.205114 0.160595 3.522258 0.497659\n",
"碳材料结构特征-平均孔径 0.675843 0.763879 0.509585 0.172561 0.307433"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame.from_records(eva_total, index=index_list, columns=eva_cols)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7ea3c810-754a-484b-b14e-e4fe571386b8",
"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.8.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}