22-T67/keras_multi-attention_multi...

2080 lines
6.5 MiB
Plaintext
Raw Normal View History

2023-03-30 10:25:44 +08:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"os.environ['CUDA_DEVICE_ORDER'] = 'PCB_BUS_ID'\n",
"os.environ['CUDA_VISIBLE_DEVICES'] = '0'"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"import matplotlib.pyplot as plt\n",
"#新增加的两行\n",
"from pylab import mpl\n",
"# 设置显示中文字体\n",
"mpl.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n",
"\n",
"mpl.rcParams[\"axes.unicode_minus\"] = False"
]
},
{
"cell_type": "code",
"execution_count": 3,
"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>24_PM2.5</th>\n",
" <th>24_PM10</th>\n",
" <th>24_SO2</th>\n",
" <th>24_NO2</th>\n",
" <th>24_O3</th>\n",
" <th>24_CO</th>\n",
" <th>23_PM2.5</th>\n",
" <th>23_PM10</th>\n",
" <th>23_SO2</th>\n",
" <th>23_NO2</th>\n",
" <th>...</th>\n",
" <th>NH3_resdient</th>\n",
" <th>NH3_agricultural</th>\n",
" <th>VOC_industrial</th>\n",
" <th>VOC_transportation</th>\n",
" <th>VOC_resdient</th>\n",
" <th>VOC_power</th>\n",
" <th>PM2.5_industrial</th>\n",
" <th>PM2.5_transportation</th>\n",
" <th>PM2.5_resdient</th>\n",
" <th>PM2.5_power</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</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></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",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2015-01-03 01:00:00</th>\n",
" <td>136.0</td>\n",
" <td>214.0</td>\n",
" <td>317.0</td>\n",
" <td>38.0</td>\n",
" <td>8.0</td>\n",
" <td>3.71</td>\n",
" <td>114.0</td>\n",
" <td>176.0</td>\n",
" <td>305.0</td>\n",
" <td>38.0</td>\n",
" <td>...</td>\n",
" <td>0.033910</td>\n",
" <td>0.359273</td>\n",
" <td>1.177423</td>\n",
" <td>1.084925</td>\n",
" <td>0.937173</td>\n",
" <td>0.037724</td>\n",
" <td>0.926851</td>\n",
" <td>0.077715</td>\n",
" <td>0.827110</td>\n",
" <td>0.436028</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-03 02:00:00</th>\n",
" <td>114.0</td>\n",
" <td>176.0</td>\n",
" <td>305.0</td>\n",
" <td>38.0</td>\n",
" <td>8.0</td>\n",
" <td>3.55</td>\n",
" <td>97.0</td>\n",
" <td>154.0</td>\n",
" <td>306.0</td>\n",
" <td>37.0</td>\n",
" <td>...</td>\n",
" <td>0.033910</td>\n",
" <td>0.359273</td>\n",
" <td>1.177423</td>\n",
" <td>1.134240</td>\n",
" <td>0.937173</td>\n",
" <td>0.036215</td>\n",
" <td>0.926851</td>\n",
" <td>0.081248</td>\n",
" <td>0.827110</td>\n",
" <td>0.418587</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-03 03:00:00</th>\n",
" <td>97.0</td>\n",
" <td>154.0</td>\n",
" <td>306.0</td>\n",
" <td>37.0</td>\n",
" <td>7.0</td>\n",
" <td>3.51</td>\n",
" <td>87.0</td>\n",
" <td>141.0</td>\n",
" <td>316.0</td>\n",
" <td>38.0</td>\n",
" <td>...</td>\n",
" <td>0.033910</td>\n",
" <td>0.327791</td>\n",
" <td>1.177423</td>\n",
" <td>1.232869</td>\n",
" <td>0.937173</td>\n",
" <td>0.035712</td>\n",
" <td>0.926851</td>\n",
" <td>0.088313</td>\n",
" <td>0.827110</td>\n",
" <td>0.412773</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-03 04:00:00</th>\n",
" <td>87.0</td>\n",
" <td>141.0</td>\n",
" <td>316.0</td>\n",
" <td>38.0</td>\n",
" <td>7.0</td>\n",
" <td>3.55</td>\n",
" <td>85.0</td>\n",
" <td>139.0</td>\n",
" <td>292.0</td>\n",
" <td>37.0</td>\n",
" <td>...</td>\n",
" <td>0.033910</td>\n",
" <td>0.350014</td>\n",
" <td>1.177423</td>\n",
" <td>1.273965</td>\n",
" <td>0.937173</td>\n",
" <td>0.036718</td>\n",
" <td>0.926851</td>\n",
" <td>0.091256</td>\n",
" <td>0.827110</td>\n",
" <td>0.424400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-01-03 05:00:00</th>\n",
" <td>85.0</td>\n",
" <td>139.0</td>\n",
" <td>292.0</td>\n",
" <td>37.0</td>\n",
" <td>7.0</td>\n",
" <td>3.62</td>\n",
" <td>106.0</td>\n",
" <td>167.0</td>\n",
" <td>316.0</td>\n",
" <td>37.0</td>\n",
" <td>...</td>\n",
" <td>0.071588</td>\n",
" <td>0.388904</td>\n",
" <td>1.177423</td>\n",
" <td>1.290403</td>\n",
" <td>1.978475</td>\n",
" <td>0.039736</td>\n",
" <td>0.926851</td>\n",
" <td>0.092434</td>\n",
" <td>1.746121</td>\n",
" <td>0.459282</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 187 columns</p>\n",
"</div>"
],
"text/plain": [
" 24_PM2.5 24_PM10 24_SO2 24_NO2 24_O3 24_CO \\\n",
"date \n",
"2015-01-03 01:00:00 136.0 214.0 317.0 38.0 8.0 3.71 \n",
"2015-01-03 02:00:00 114.0 176.0 305.0 38.0 8.0 3.55 \n",
"2015-01-03 03:00:00 97.0 154.0 306.0 37.0 7.0 3.51 \n",
"2015-01-03 04:00:00 87.0 141.0 316.0 38.0 7.0 3.55 \n",
"2015-01-03 05:00:00 85.0 139.0 292.0 37.0 7.0 3.62 \n",
"\n",
" 23_PM2.5 23_PM10 23_SO2 23_NO2 ... NH3_resdient \\\n",
"date ... \n",
"2015-01-03 01:00:00 114.0 176.0 305.0 38.0 ... 0.033910 \n",
"2015-01-03 02:00:00 97.0 154.0 306.0 37.0 ... 0.033910 \n",
"2015-01-03 03:00:00 87.0 141.0 316.0 38.0 ... 0.033910 \n",
"2015-01-03 04:00:00 85.0 139.0 292.0 37.0 ... 0.033910 \n",
"2015-01-03 05:00:00 106.0 167.0 316.0 37.0 ... 0.071588 \n",
"\n",
" NH3_agricultural VOC_industrial VOC_transportation \\\n",
"date \n",
"2015-01-03 01:00:00 0.359273 1.177423 1.084925 \n",
"2015-01-03 02:00:00 0.359273 1.177423 1.134240 \n",
"2015-01-03 03:00:00 0.327791 1.177423 1.232869 \n",
"2015-01-03 04:00:00 0.350014 1.177423 1.273965 \n",
"2015-01-03 05:00:00 0.388904 1.177423 1.290403 \n",
"\n",
" VOC_resdient VOC_power PM2.5_industrial \\\n",
"date \n",
"2015-01-03 01:00:00 0.937173 0.037724 0.926851 \n",
"2015-01-03 02:00:00 0.937173 0.036215 0.926851 \n",
"2015-01-03 03:00:00 0.937173 0.035712 0.926851 \n",
"2015-01-03 04:00:00 0.937173 0.036718 0.926851 \n",
"2015-01-03 05:00:00 1.978475 0.039736 0.926851 \n",
"\n",
" PM2.5_transportation PM2.5_resdient PM2.5_power \n",
"date \n",
"2015-01-03 01:00:00 0.077715 0.827110 0.436028 \n",
"2015-01-03 02:00:00 0.081248 0.827110 0.418587 \n",
"2015-01-03 03:00:00 0.088313 0.827110 0.412773 \n",
"2015-01-03 04:00:00 0.091256 0.827110 0.424400 \n",
"2015-01-03 05:00:00 0.092434 1.746121 0.459282 \n",
"\n",
"[5 rows x 187 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = pd.read_csv('./new_train_data.csv', index_col='date')\n",
"# data.drop(columns=['wd'], inplace=True) # 风向还没想好怎么处理\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import seaborn as sns"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(37, 6)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"out_cols = ['PM2.5', 'PM10', 'SO2', 'NO2', 'O3', 'CO']\n",
"feature_cols = [x for x in data.columns if x not in out_cols and x != 'date']\n",
"len(feature_cols), len(out_cols)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# for col in data.columns:\n",
"# data[col] = data[col].astype(float)\n",
"# if data[col].max() > 1:\n",
"# data[col] = np.log1p(data[col])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2023-03-29 17:14:45.550871: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0\n"
]
}
],
"source": [
"import tensorflow as tf\n",
"from tensorflow import keras\n",
"from tensorflow.keras import layers\n",
"import tensorflow.keras.backend as K"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"class TransformerBlock(layers.Layer):\n",
" def __init__(self, embed_dim, num_heads, ff_dim, name, rate=0.1):\n",
" super().__init__()\n",
" self.att = layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim, name=name)\n",
" self.ffn = keras.Sequential(\n",
" [layers.Dense(ff_dim, activation=\"relu\"), layers.Dense(embed_dim),]\n",
" )\n",
" self.layernorm1 = layers.LayerNormalization(epsilon=1e-6)\n",
" self.layernorm2 = layers.LayerNormalization(epsilon=1e-6)\n",
" self.dropout1 = layers.Dropout(rate)\n",
" self.dropout2 = layers.Dropout(rate)\n",
"\n",
" def call(self, inputs, training):\n",
" attn_output = self.att(inputs, inputs)\n",
" attn_output = self.dropout1(attn_output, training=training)\n",
" out1 = self.layernorm1(inputs + attn_output)\n",
" ffn_output = self.ffn(out1)\n",
" ffn_output = self.dropout2(ffn_output, training=training)\n",
" return self.layernorm2(out1 + ffn_output)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"from tensorflow.keras import Model"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"from tensorflow.keras.initializers import Constant"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"# def build_multi_task(num_heads, ff_dim):\n",
"# def build_output(lstm_out, out_name):\n",
"# transformer_block = TransformerBlock(128, num_heads, ff_dim, name='first_attn')\n",
"# out = transformer_block(lstm_out)\n",
"# out = layers.GlobalAveragePooling1D()(out)\n",
"# out = layers.Dropout(0.1)(out)\n",
"# out = layers.Dense(32, activation=\"relu\")(out)\n",
" # out = layers.Dense(1, name=out_name, activation=\"sigmoid\")(out)\n",
"# return out\n",
"# inputs = layers.Input(shape=(1,len(feature_cols)), name='input')\n",
"# x = layers.Conv1D(filters=64, kernel_size=1, activation='relu')(inputs)\n",
"# # x = layers.Dropout(rate=0.1)(x)\n",
"# lstm_out = layers.Bidirectional(layers.LSTM(units=64, return_sequences=True))(x)\n",
"\n",
"# pm25 = build_output(lstm_out, 'pm25')\n",
"# pm10 = build_output(lstm_out, 'pm10')\n",
"# so2 = build_output(lstm_out, 'so2')\n",
"# no2 = build_output(lstm_out, 'no2')\n",
"# o3 = build_output(lstm_out, 'o3')\n",
"# co = build_output(lstm_out, 'co')\n",
"\n",
"# model = Model(inputs=[inputs], outputs=[pm25, pm10, so2, no2, o3, co])\n",
"# model.summary()\n",
"# return model"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"# def build_multi_task(num_heads, ff_dim):\n",
"# def build_output(out, out_name):\n",
"# self_block = TransformerBlock(64, num_heads, ff_dim, name='first_attn')\n",
"# out = self_block(out)\n",
"# out = layers.GlobalAveragePooling1D()(out)\n",
"# out = layers.Dropout(0.1)(out)\n",
"# out = layers.Dense(32, activation=\"relu\")(out)\n",
"# out = layers.Dense(1, name=out_name, activation=\"sigmoid\")(out)\n",
"# return out\n",
"# inputs = layers.Input(shape=(1,len(feature_cols)), name='input')\n",
"# x = layers.Conv1D(filters=64, kernel_size=1, activation='relu')(inputs)\n",
"# # x = layers.Dropout(rate=0.1)(x)\n",
"# lstm_out = layers.Bidirectional(layers.LSTM(units=64, return_sequences=True))(x)\n",
"# lstm_out = layers.Dense(128, activation='relu')(lstm_out)\n",
"# transformer_block = TransformerBlock(128, num_heads, ff_dim)\n",
"# out = transformer_block(lstm_out)\n",
"# out = layers.GlobalAveragePooling1D()(out)\n",
"# out = layers.Dropout(0.1)(out)\n",
"# out = layers.Dense(64, activation='relu')(out)\n",
"# out = K.expand_dims(out, axis=1)\n",
"\n",
"# pm25 = build_output(out, 'pm25')\n",
"# pm10 = build_output(out, 'pm10')\n",
"# so2 = build_output(out, 'so2')\n",
"# no2 = build_output(out, 'no2')\n",
"# o3 = build_output(out, 'o3')\n",
"# co = build_output(out, 'co')\n",
"\n",
"# model = Model(inputs=[inputs], outputs=[pm25, pm10, so2, no2, o3, co])\n",
"# model.summary()\n",
"# return model"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"def build_multi_task(num_heads, ff_dim):\n",
" def build_output(out, out_name):\n",
" self_block = TransformerBlock(64, num_heads, ff_dim, name=f'{out_name}_attn')\n",
" out = self_block(out)\n",
" out = layers.GlobalAveragePooling1D()(out)\n",
" out = layers.Dropout(0.1)(out)\n",
" out = layers.Dense(32, activation=\"relu\")(out)\n",
" # out = layers.Dense(1, name=out_name, activation=\"sigmoid\")(out)\n",
" return out\n",
" inputs = layers.Input(shape=(1,len(feature_cols)), name='input')\n",
" x = layers.Conv1D(filters=64, kernel_size=1, activation='relu')(inputs)\n",
" # x = layers.Dropout(rate=0.1)(x)\n",
" lstm_out = layers.Bidirectional(layers.LSTM(units=64, return_sequences=True))(x)\n",
" lstm_out = layers.Dense(128, activation='relu')(lstm_out)\n",
" transformer_block = TransformerBlock(128, num_heads, ff_dim, name='first_attn')\n",
" out = transformer_block(lstm_out)\n",
" out = layers.GlobalAveragePooling1D()(out)\n",
" out = layers.Dropout(0.1)(out)\n",
" out = layers.Dense(64, activation='relu')(out)\n",
" out = K.expand_dims(out, axis=1)\n",
"\n",
" pm25 = build_output(out, 'pm25')\n",
" pm10 = build_output(out, 'pm10')\n",
" so2 = build_output(out, 'so2')\n",
" no2 = build_output(out, 'no2')\n",
" o3 = build_output(out, 'o3')\n",
" co = build_output(out, 'co')\n",
"\n",
" merge = layers.Concatenate(axis=1)([pm25, pm10, so2, no2, o3, co])\n",
" merge = K.expand_dims(merge, axis=1)\n",
" merge_attn = TransformerBlock(32*6, 3, 16, name='last_attn')\n",
"\n",
" out = merge_attn(merge)\n",
" out = layers.GlobalAveragePooling1D()(out)\n",
" out = layers.Dropout(0.1)(out)\n",
"\n",
" pm25 = layers.Dense(32, activation='relu')(out)\n",
" pm10 = layers.Dense(32, activation='relu')(out)\n",
" so2 = layers.Dense(32, activation='relu')(out)\n",
" no2 = layers.Dense(32, activation='relu')(out)\n",
" o3 = layers.Dense(32, activation='relu')(out)\n",
" co = layers.Dense(32, activation='relu')(out)\n",
"\n",
" pm25 = layers.Dense(1, activation='sigmoid', name='pm25')(pm25)\n",
" pm10 = layers.Dense(1, activation='sigmoid', name='pm10')(pm10)\n",
" so2 = layers.Dense(1, activation='sigmoid', name='so2')(so2)\n",
" no2 = layers.Dense(1, activation='sigmoid', name='no2')(no2)\n",
" o3 = layers.Dense(1, activation='sigmoid', name='o3')(o3)\n",
" co = layers.Dense(1, activation='sigmoid', name='co')(co)\n",
"\n",
" model = Model(inputs=[inputs], outputs=[pm25, pm10, so2, no2, o3, co])\n",
" model.summary()\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"from tensorflow.python.keras.utils.vis_utils import plot_model\n",
"from tensorflow.keras import optimizers"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"use_cols = feature_cols + out_cols\n",
"use_data = data[use_cols].dropna()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"for col in use_cols:\n",
" use_data[col] = use_data[col].astype('float32')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"maxs = use_data.max()\n",
"mins = use_data.min()\n",
"use_cols = use_data.columns"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"for col in use_cols:\n",
" # use_data[col] = use_data[col].apply(lambda x: 0 if x < 0 else x)\n",
" # use_data[col] = np.log1p(use_data[col])\n",
" use_data[col] = (use_data[col] - mins[col]) / (maxs[col] - mins[col])"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"train_data, valid = train_test_split(use_data[use_cols], test_size=0.1, random_state=42, shuffle=True)\n",
"valid_data, test_data = train_test_split(valid, test_size=0.5, random_state=42, shuffle=True)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"opt = optimizers.Adam(learning_rate=5e-5)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"def compile_multitask_model(model, gamma):\n",
" w = 1 / gamma\n",
" model.compile(optimizer=opt,\n",
" loss={'pm25': 'mae', \n",
" 'pm10': 'mae', \n",
" 'so2': 'mae', \n",
" 'no2': 'mae', \n",
" 'o3': 'mae', \n",
" 'co': 'mae'},\n",
" metrics=['mse'])\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"model = compile_multitask_model(model, gamma=6)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"train_cols = [x for x in out_cols if x not in out_cols]"
]
},
{
"cell_type": "code",
"execution_count": 26,
"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>24_PM2.5</th>\n",
" <th>24_PM10</th>\n",
" <th>24_SO2</th>\n",
" <th>24_NO2</th>\n",
" <th>24_O3</th>\n",
" <th>24_CO</th>\n",
" <th>23_PM2.5</th>\n",
" <th>23_PM10</th>\n",
" <th>23_SO2</th>\n",
" <th>23_NO2</th>\n",
" <th>...</th>\n",
" <th>PM2.5_industrial</th>\n",
" <th>PM2.5_transportation</th>\n",
" <th>PM2.5_resdient</th>\n",
" <th>PM2.5_power</th>\n",
" <th>PM2.5</th>\n",
" <th>PM10</th>\n",
" <th>SO2</th>\n",
" <th>NO2</th>\n",
" <th>O3</th>\n",
" <th>CO</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</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></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",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-04-21 07:00:00</th>\n",
" <td>0.130977</td>\n",
" <td>0.163872</td>\n",
" <td>0.142349</td>\n",
" <td>0.331325</td>\n",
" <td>0.015873</td>\n",
" <td>0.175287</td>\n",
" <td>0.151767</td>\n",
" <td>0.176067</td>\n",
" <td>0.172598</td>\n",
" <td>0.355422</td>\n",
" <td>...</td>\n",
" <td>0.259570</td>\n",
" <td>0.821789</td>\n",
" <td>0.130550</td>\n",
" <td>0.558376</td>\n",
" <td>0.051975</td>\n",
" <td>0.069360</td>\n",
" <td>0.030645</td>\n",
" <td>0.295181</td>\n",
" <td>0.073016</td>\n",
" <td>0.103448</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-12-18 13:00:00</th>\n",
" <td>0.162162</td>\n",
" <td>0.104421</td>\n",
" <td>0.103203</td>\n",
" <td>0.349398</td>\n",
" <td>0.073016</td>\n",
" <td>0.204023</td>\n",
" <td>0.178794</td>\n",
" <td>0.114329</td>\n",
" <td>0.101423</td>\n",
" <td>0.361446</td>\n",
" <td>...</td>\n",
" <td>0.581076</td>\n",
" <td>0.619134</td>\n",
" <td>0.280542</td>\n",
" <td>0.390375</td>\n",
" <td>0.056133</td>\n",
" <td>0.038872</td>\n",
" <td>0.032258</td>\n",
" <td>0.162651</td>\n",
" <td>0.155556</td>\n",
" <td>0.125000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-07-28 07:00:00</th>\n",
" <td>0.166320</td>\n",
" <td>0.106707</td>\n",
" <td>0.039146</td>\n",
" <td>0.150602</td>\n",
" <td>0.107937</td>\n",
" <td>0.181034</td>\n",
" <td>0.170478</td>\n",
" <td>0.109756</td>\n",
" <td>0.039146</td>\n",
" <td>0.186747</td>\n",
" <td>...</td>\n",
" <td>0.338909</td>\n",
" <td>0.661377</td>\n",
" <td>0.164996</td>\n",
" <td>0.722157</td>\n",
" <td>0.153846</td>\n",
" <td>0.099085</td>\n",
" <td>0.037097</td>\n",
" <td>0.156627</td>\n",
" <td>0.085714</td>\n",
" <td>0.145115</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-09-27 21:00:00</th>\n",
" <td>0.141372</td>\n",
" <td>0.096799</td>\n",
" <td>0.033808</td>\n",
" <td>0.451807</td>\n",
" <td>0.028571</td>\n",
" <td>0.222701</td>\n",
" <td>0.143451</td>\n",
" <td>0.101372</td>\n",
" <td>0.028470</td>\n",
" <td>0.457831</td>\n",
" <td>...</td>\n",
" <td>0.422103</td>\n",
" <td>0.447063</td>\n",
" <td>0.098317</td>\n",
" <td>0.545690</td>\n",
" <td>0.041580</td>\n",
" <td>0.042683</td>\n",
" <td>0.027419</td>\n",
" <td>0.216867</td>\n",
" <td>0.142857</td>\n",
" <td>0.099138</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-09-08 23:00:00</th>\n",
" <td>0.081081</td>\n",
" <td>0.088415</td>\n",
" <td>0.014235</td>\n",
" <td>0.656627</td>\n",
" <td>0.088889</td>\n",
" <td>0.090517</td>\n",
" <td>0.081081</td>\n",
" <td>0.096037</td>\n",
" <td>0.016014</td>\n",
" <td>0.728916</td>\n",
" <td>...</td>\n",
" <td>0.331071</td>\n",
" <td>0.135968</td>\n",
" <td>0.005011</td>\n",
" <td>0.112853</td>\n",
" <td>0.051975</td>\n",
" <td>0.051829</td>\n",
" <td>0.012903</td>\n",
" <td>0.403614</td>\n",
" <td>0.219048</td>\n",
" <td>0.070402</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-05-05 17:00:00</th>\n",
" <td>0.097713</td>\n",
" <td>0.087652</td>\n",
" <td>0.090747</td>\n",
" <td>0.114458</td>\n",
" <td>0.453968</td>\n",
" <td>0.107759</td>\n",
" <td>0.099792</td>\n",
" <td>0.090701</td>\n",
" <td>0.092527</td>\n",
" <td>0.144578</td>\n",
" <td>...</td>\n",
" <td>0.712507</td>\n",
" <td>0.655019</td>\n",
" <td>0.146814</td>\n",
" <td>0.788907</td>\n",
" <td>0.064449</td>\n",
" <td>0.086128</td>\n",
" <td>0.014516</td>\n",
" <td>0.054217</td>\n",
" <td>0.266667</td>\n",
" <td>0.057471</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-01 10:00:00</th>\n",
" <td>0.033264</td>\n",
" <td>0.022104</td>\n",
" <td>0.019573</td>\n",
" <td>0.084337</td>\n",
" <td>0.371429</td>\n",
" <td>0.077586</td>\n",
" <td>0.027027</td>\n",
" <td>0.019055</td>\n",
" <td>0.014235</td>\n",
" <td>0.048193</td>\n",
" <td>...</td>\n",
" <td>0.554177</td>\n",
" <td>0.626956</td>\n",
" <td>0.018196</td>\n",
" <td>0.388151</td>\n",
" <td>0.085239</td>\n",
" <td>0.064024</td>\n",
" <td>0.024194</td>\n",
" <td>0.246988</td>\n",
" <td>0.260317</td>\n",
" <td>0.142241</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-09-27 09:00:00</th>\n",
" <td>0.064449</td>\n",
" <td>0.056402</td>\n",
" <td>0.037367</td>\n",
" <td>0.337349</td>\n",
" <td>0.088889</td>\n",
" <td>0.106322</td>\n",
" <td>0.060291</td>\n",
" <td>0.052591</td>\n",
" <td>0.055160</td>\n",
" <td>0.283133</td>\n",
" <td>...</td>\n",
" <td>0.658467</td>\n",
" <td>0.681554</td>\n",
" <td>0.040906</td>\n",
" <td>0.254681</td>\n",
" <td>0.064449</td>\n",
" <td>0.051067</td>\n",
" <td>0.022581</td>\n",
" <td>0.253012</td>\n",
" <td>0.098413</td>\n",
" <td>0.089080</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015-02-08 22:00:00</th>\n",
" <td>0.054054</td>\n",
" <td>0.035823</td>\n",
" <td>0.113879</td>\n",
" <td>0.174699</td>\n",
" <td>0.098413</td>\n",
" <td>0.218391</td>\n",
" <td>0.054054</td>\n",
" <td>0.034299</td>\n",
" <td>0.113879</td>\n",
" <td>0.120482</td>\n",
" <td>...</td>\n",
" <td>0.475407</td>\n",
" <td>0.329360</td>\n",
" <td>0.219197</td>\n",
" <td>0.546827</td>\n",
" <td>0.141372</td>\n",
" <td>0.079268</td>\n",
" <td>0.298387</td>\n",
" <td>0.367470</td>\n",
" <td>0.028571</td>\n",
" <td>0.350575</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-12-03 03:00:00</th>\n",
" <td>0.284823</td>\n",
" <td>0.160061</td>\n",
" <td>0.343416</td>\n",
" <td>0.373494</td>\n",
" <td>0.012698</td>\n",
" <td>0.372126</td>\n",
" <td>0.228690</td>\n",
" <td>0.131860</td>\n",
" <td>0.316726</td>\n",
" <td>0.373494</td>\n",
" <td>...</td>\n",
" <td>0.025917</td>\n",
" <td>0.038973</td>\n",
" <td>0.195944</td>\n",
" <td>0.309794</td>\n",
" <td>0.611227</td>\n",
" <td>0.292683</td>\n",
" <td>0.566129</td>\n",
" <td>0.560241</td>\n",
" <td>0.015873</td>\n",
" <td>0.636494</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>44112 rows × 187 columns</p>\n",
"</div>"
],
"text/plain": [
" 24_PM2.5 24_PM10 24_SO2 24_NO2 24_O3 \\\n",
"date \n",
"2017-04-21 07:00:00 0.130977 0.163872 0.142349 0.331325 0.015873 \n",
"2020-12-18 13:00:00 0.162162 0.104421 0.103203 0.349398 0.073016 \n",
"2015-07-28 07:00:00 0.166320 0.106707 0.039146 0.150602 0.107937 \n",
"2016-09-27 21:00:00 0.141372 0.096799 0.033808 0.451807 0.028571 \n",
"2019-09-08 23:00:00 0.081081 0.088415 0.014235 0.656627 0.088889 \n",
"... ... ... ... ... ... \n",
"2016-05-05 17:00:00 0.097713 0.087652 0.090747 0.114458 0.453968 \n",
"2020-07-01 10:00:00 0.033264 0.022104 0.019573 0.084337 0.371429 \n",
"2019-09-27 09:00:00 0.064449 0.056402 0.037367 0.337349 0.088889 \n",
"2015-02-08 22:00:00 0.054054 0.035823 0.113879 0.174699 0.098413 \n",
"2016-12-03 03:00:00 0.284823 0.160061 0.343416 0.373494 0.012698 \n",
"\n",
" 24_CO 23_PM2.5 23_PM10 23_SO2 23_NO2 ... \\\n",
"date ... \n",
"2017-04-21 07:00:00 0.175287 0.151767 0.176067 0.172598 0.355422 ... \n",
"2020-12-18 13:00:00 0.204023 0.178794 0.114329 0.101423 0.361446 ... \n",
"2015-07-28 07:00:00 0.181034 0.170478 0.109756 0.039146 0.186747 ... \n",
"2016-09-27 21:00:00 0.222701 0.143451 0.101372 0.028470 0.457831 ... \n",
"2019-09-08 23:00:00 0.090517 0.081081 0.096037 0.016014 0.728916 ... \n",
"... ... ... ... ... ... ... \n",
"2016-05-05 17:00:00 0.107759 0.099792 0.090701 0.092527 0.144578 ... \n",
"2020-07-01 10:00:00 0.077586 0.027027 0.019055 0.014235 0.048193 ... \n",
"2019-09-27 09:00:00 0.106322 0.060291 0.052591 0.055160 0.283133 ... \n",
"2015-02-08 22:00:00 0.218391 0.054054 0.034299 0.113879 0.120482 ... \n",
"2016-12-03 03:00:00 0.372126 0.228690 0.131860 0.316726 0.373494 ... \n",
"\n",
" PM2.5_industrial PM2.5_transportation PM2.5_resdient \\\n",
"date \n",
"2017-04-21 07:00:00 0.259570 0.821789 0.130550 \n",
"2020-12-18 13:00:00 0.581076 0.619134 0.280542 \n",
"2015-07-28 07:00:00 0.338909 0.661377 0.164996 \n",
"2016-09-27 21:00:00 0.422103 0.447063 0.098317 \n",
"2019-09-08 23:00:00 0.331071 0.135968 0.005011 \n",
"... ... ... ... \n",
"2016-05-05 17:00:00 0.712507 0.655019 0.146814 \n",
"2020-07-01 10:00:00 0.554177 0.626956 0.018196 \n",
"2019-09-27 09:00:00 0.658467 0.681554 0.040906 \n",
"2015-02-08 22:00:00 0.475407 0.329360 0.219197 \n",
"2016-12-03 03:00:00 0.025917 0.038973 0.195944 \n",
"\n",
" PM2.5_power PM2.5 PM10 SO2 NO2 \\\n",
"date \n",
"2017-04-21 07:00:00 0.558376 0.051975 0.069360 0.030645 0.295181 \n",
"2020-12-18 13:00:00 0.390375 0.056133 0.038872 0.032258 0.162651 \n",
"2015-07-28 07:00:00 0.722157 0.153846 0.099085 0.037097 0.156627 \n",
"2016-09-27 21:00:00 0.545690 0.041580 0.042683 0.027419 0.216867 \n",
"2019-09-08 23:00:00 0.112853 0.051975 0.051829 0.012903 0.403614 \n",
"... ... ... ... ... ... \n",
"2016-05-05 17:00:00 0.788907 0.064449 0.086128 0.014516 0.054217 \n",
"2020-07-01 10:00:00 0.388151 0.085239 0.064024 0.024194 0.246988 \n",
"2019-09-27 09:00:00 0.254681 0.064449 0.051067 0.022581 0.253012 \n",
"2015-02-08 22:00:00 0.546827 0.141372 0.079268 0.298387 0.367470 \n",
"2016-12-03 03:00:00 0.309794 0.611227 0.292683 0.566129 0.560241 \n",
"\n",
" O3 CO \n",
"date \n",
"2017-04-21 07:00:00 0.073016 0.103448 \n",
"2020-12-18 13:00:00 0.155556 0.125000 \n",
"2015-07-28 07:00:00 0.085714 0.145115 \n",
"2016-09-27 21:00:00 0.142857 0.099138 \n",
"2019-09-08 23:00:00 0.219048 0.070402 \n",
"... ... ... \n",
"2016-05-05 17:00:00 0.266667 0.057471 \n",
"2020-07-01 10:00:00 0.260317 0.142241 \n",
"2019-09-27 09:00:00 0.098413 0.089080 \n",
"2015-02-08 22:00:00 0.028571 0.350575 \n",
"2016-12-03 03:00:00 0.015873 0.636494 \n",
"\n",
"[44112 rows x 187 columns]"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_data"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/50\n",
"690/690 [==============================] - 13s 19ms/step - loss: 0.2332 - pm25_loss: 0.0390 - pm10_loss: 0.0279 - so2_loss: 0.0278 - no2_loss: 0.0548 - o3_loss: 0.0448 - co_loss: 0.0388 - pm25_mse: 0.0031 - pm10_mse: 0.0016 - so2_mse: 0.0023 - no2_mse: 0.0054 - o3_mse: 0.0041 - co_mse: 0.0028 - val_loss: 0.6660 - val_pm25_loss: 0.0833 - val_pm10_loss: 0.0885 - val_so2_loss: 0.1071 - val_no2_loss: 0.1400 - val_o3_loss: 0.1600 - val_co_loss: 0.0871 - val_pm25_mse: 0.0168 - val_pm10_mse: 0.0188 - val_so2_mse: 0.0248 - val_no2_mse: 0.0340 - val_o3_mse: 0.0483 - val_co_mse: 0.0170\n",
"Epoch 2/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.2003 - pm25_loss: 0.0326 - pm10_loss: 0.0244 - so2_loss: 0.0248 - no2_loss: 0.0470 - o3_loss: 0.0376 - co_loss: 0.0339 - pm25_mse: 0.0022 - pm10_mse: 0.0013 - so2_mse: 0.0018 - no2_mse: 0.0040 - o3_mse: 0.0028 - co_mse: 0.0021 - val_loss: 0.6676 - val_pm25_loss: 0.0836 - val_pm10_loss: 0.0868 - val_so2_loss: 0.1035 - val_no2_loss: 0.1513 - val_o3_loss: 0.1520 - val_co_loss: 0.0905 - val_pm25_mse: 0.0169 - val_pm10_mse: 0.0182 - val_so2_mse: 0.0238 - val_no2_mse: 0.0398 - val_o3_mse: 0.0442 - val_co_mse: 0.0179\n",
"Epoch 3/50\n",
"690/690 [==============================] - 11s 17ms/step - loss: 0.1805 - pm25_loss: 0.0290 - pm10_loss: 0.0223 - so2_loss: 0.0225 - no2_loss: 0.0425 - o3_loss: 0.0334 - co_loss: 0.0308 - pm25_mse: 0.0018 - pm10_mse: 0.0011 - so2_mse: 0.0015 - no2_mse: 0.0033 - o3_mse: 0.0022 - co_mse: 0.0018 - val_loss: 0.6681 - val_pm25_loss: 0.0839 - val_pm10_loss: 0.0857 - val_so2_loss: 0.1027 - val_no2_loss: 0.1514 - val_o3_loss: 0.1545 - val_co_loss: 0.0899 - val_pm25_mse: 0.0169 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0237 - val_no2_mse: 0.0400 - val_o3_mse: 0.0461 - val_co_mse: 0.0175\n",
"Epoch 4/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1671 - pm25_loss: 0.0267 - pm10_loss: 0.0206 - so2_loss: 0.0213 - no2_loss: 0.0398 - o3_loss: 0.0303 - co_loss: 0.0284 - pm25_mse: 0.0015 - pm10_mse: 9.8021e-04 - so2_mse: 0.0013 - no2_mse: 0.0029 - o3_mse: 0.0018 - co_mse: 0.0015 - val_loss: 0.6596 - val_pm25_loss: 0.0856 - val_pm10_loss: 0.0833 - val_so2_loss: 0.1020 - val_no2_loss: 0.1457 - val_o3_loss: 0.1520 - val_co_loss: 0.0911 - val_pm25_mse: 0.0171 - val_pm10_mse: 0.0171 - val_so2_mse: 0.0234 - val_no2_mse: 0.0373 - val_o3_mse: 0.0455 - val_co_mse: 0.0176\n",
"Epoch 5/50\n",
"690/690 [==============================] - 11s 17ms/step - loss: 0.1573 - pm25_loss: 0.0252 - pm10_loss: 0.0192 - so2_loss: 0.0201 - no2_loss: 0.0378 - o3_loss: 0.0286 - co_loss: 0.0264 - pm25_mse: 0.0014 - pm10_mse: 8.6174e-04 - so2_mse: 0.0012 - no2_mse: 0.0026 - o3_mse: 0.0016 - co_mse: 0.0013 - val_loss: 0.6741 - val_pm25_loss: 0.0834 - val_pm10_loss: 0.0846 - val_so2_loss: 0.1018 - val_no2_loss: 0.1565 - val_o3_loss: 0.1564 - val_co_loss: 0.0914 - val_pm25_mse: 0.0171 - val_pm10_mse: 0.0177 - val_so2_mse: 0.0233 - val_no2_mse: 0.0424 - val_o3_mse: 0.0469 - val_co_mse: 0.0181\n",
"Epoch 6/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1500 - pm25_loss: 0.0238 - pm10_loss: 0.0182 - so2_loss: 0.0192 - no2_loss: 0.0363 - o3_loss: 0.0274 - co_loss: 0.0251 - pm25_mse: 0.0012 - pm10_mse: 7.8217e-04 - so2_mse: 0.0011 - no2_mse: 0.0024 - o3_mse: 0.0015 - co_mse: 0.0012 - val_loss: 0.6692 - val_pm25_loss: 0.0851 - val_pm10_loss: 0.0845 - val_so2_loss: 0.1007 - val_no2_loss: 0.1507 - val_o3_loss: 0.1572 - val_co_loss: 0.0910 - val_pm25_mse: 0.0176 - val_pm10_mse: 0.0176 - val_so2_mse: 0.0231 - val_no2_mse: 0.0404 - val_o3_mse: 0.0482 - val_co_mse: 0.0181\n",
"Epoch 7/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1438 - pm25_loss: 0.0229 - pm10_loss: 0.0174 - so2_loss: 0.0186 - no2_loss: 0.0350 - o3_loss: 0.0260 - co_loss: 0.0240 - pm25_mse: 0.0011 - pm10_mse: 7.0840e-04 - so2_mse: 0.0010 - no2_mse: 0.0022 - o3_mse: 0.0013 - co_mse: 0.0011 - val_loss: 0.6538 - val_pm25_loss: 0.0840 - val_pm10_loss: 0.0852 - val_so2_loss: 0.1031 - val_no2_loss: 0.1435 - val_o3_loss: 0.1489 - val_co_loss: 0.0892 - val_pm25_mse: 0.0175 - val_pm10_mse: 0.0179 - val_so2_mse: 0.0238 - val_no2_mse: 0.0376 - val_o3_mse: 0.0431 - val_co_mse: 0.0179\n",
"Epoch 8/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1385 - pm25_loss: 0.0221 - pm10_loss: 0.0166 - so2_loss: 0.0178 - no2_loss: 0.0337 - o3_loss: 0.0251 - co_loss: 0.0232 - pm25_mse: 0.0011 - pm10_mse: 6.5187e-04 - so2_mse: 9.3330e-04 - no2_mse: 0.0021 - o3_mse: 0.0012 - co_mse: 0.0010 - val_loss: 0.6569 - val_pm25_loss: 0.0827 - val_pm10_loss: 0.0854 - val_so2_loss: 0.1016 - val_no2_loss: 0.1436 - val_o3_loss: 0.1552 - val_co_loss: 0.0884 - val_pm25_mse: 0.0171 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0235 - val_no2_mse: 0.0376 - val_o3_mse: 0.0472 - val_co_mse: 0.0176\n",
"Epoch 9/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1349 - pm25_loss: 0.0212 - pm10_loss: 0.0161 - so2_loss: 0.0175 - no2_loss: 0.0330 - o3_loss: 0.0246 - co_loss: 0.0225 - pm25_mse: 9.9345e-04 - pm10_mse: 6.0136e-04 - so2_mse: 8.9766e-04 - no2_mse: 0.0020 - o3_mse: 0.0012 - co_mse: 9.6550e-04 - val_loss: 0.6593 - val_pm25_loss: 0.0825 - val_pm10_loss: 0.0868 - val_so2_loss: 0.1005 - val_no2_loss: 0.1525 - val_o3_loss: 0.1500 - val_co_loss: 0.0870 - val_pm25_mse: 0.0172 - val_pm10_mse: 0.0184 - val_so2_mse: 0.0232 - val_no2_mse: 0.0405 - val_o3_mse: 0.0446 - val_co_mse: 0.0173\n",
"Epoch 10/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1309 - pm25_loss: 0.0207 - pm10_loss: 0.0155 - so2_loss: 0.0171 - no2_loss: 0.0321 - o3_loss: 0.0236 - co_loss: 0.0219 - pm25_mse: 9.3529e-04 - pm10_mse: 5.6009e-04 - so2_mse: 8.5888e-04 - no2_mse: 0.0019 - o3_mse: 0.0011 - co_mse: 9.0392e-04 - val_loss: 0.6582 - val_pm25_loss: 0.0830 - val_pm10_loss: 0.0843 - val_so2_loss: 0.1017 - val_no2_loss: 0.1429 - val_o3_loss: 0.1571 - val_co_loss: 0.0892 - val_pm25_mse: 0.0170 - val_pm10_mse: 0.0176 - val_so2_mse: 0.0235 - val_no2_mse: 0.0375 - val_o3_mse: 0.0485 - val_co_mse: 0.0179\n",
"Epoch 11/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1283 - pm25_loss: 0.0203 - pm10_loss: 0.0152 - so2_loss: 0.0167 - no2_loss: 0.0314 - o3_loss: 0.0232 - co_loss: 0.0215 - pm25_mse: 9.1349e-04 - pm10_mse: 5.3300e-04 - so2_mse: 8.1375e-04 - no2_mse: 0.0018 - o3_mse: 0.0010 - co_mse: 8.8792e-04 - val_loss: 0.6643 - val_pm25_loss: 0.0828 - val_pm10_loss: 0.0846 - val_so2_loss: 0.1023 - val_no2_loss: 0.1540 - val_o3_loss: 0.1519 - val_co_loss: 0.0886 - val_pm25_mse: 0.0170 - val_pm10_mse: 0.0177 - val_so2_mse: 0.0237 - val_no2_mse: 0.0417 - val_o3_mse: 0.0457 - val_co_mse: 0.0176\n",
"Epoch 12/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1259 - pm25_loss: 0.0198 - pm10_loss: 0.0150 - so2_loss: 0.0165 - no2_loss: 0.0309 - o3_loss: 0.0226 - co_loss: 0.0211 - pm25_mse: 8.6479e-04 - pm10_mse: 5.1626e-04 - so2_mse: 8.0258e-04 - no2_mse: 0.0018 - o3_mse: 9.9486e-04 - co_mse: 8.5558e-04 - val_loss: 0.6619 - val_pm25_loss: 0.0837 - val_pm10_loss: 0.0858 - val_so2_loss: 0.1036 - val_no2_loss: 0.1451 - val_o3_loss: 0.1550 - val_co_loss: 0.0887 - val_pm25_mse: 0.0176 - val_pm10_mse: 0.0181 - val_so2_mse: 0.0240 - val_no2_mse: 0.0388 - val_o3_mse: 0.0471 - val_co_mse: 0.0180\n",
"Epoch 13/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1235 - pm25_loss: 0.0196 - pm10_loss: 0.0146 - so2_loss: 0.0162 - no2_loss: 0.0303 - o3_loss: 0.0222 - co_loss: 0.0206 - pm25_mse: 8.5601e-04 - pm10_mse: 4.9180e-04 - so2_mse: 7.6929e-04 - no2_mse: 0.0017 - o3_mse: 9.6504e-04 - co_mse: 8.1659e-04 - val_loss: 0.6584 - val_pm25_loss: 0.0828 - val_pm10_loss: 0.0853 - val_so2_loss: 0.1023 - val_no2_loss: 0.1457 - val_o3_loss: 0.1557 - val_co_loss: 0.0867 - val_pm25_mse: 0.0174 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0236 - val_no2_mse: 0.0387 - val_o3_mse: 0.0477 - val_co_mse: 0.0174\n",
"Epoch 14/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1210 - pm25_loss: 0.0191 - pm10_loss: 0.0143 - so2_loss: 0.0158 - no2_loss: 0.0299 - o3_loss: 0.0217 - co_loss: 0.0203 - pm25_mse: 8.1625e-04 - pm10_mse: 4.6297e-04 - so2_mse: 7.2483e-04 - no2_mse: 0.0017 - o3_mse: 9.1613e-04 - co_mse: 7.8936e-04 - val_loss: 0.6591 - val_pm25_loss: 0.0826 - val_pm10_loss: 0.0869 - val_so2_loss: 0.1019 - val_no2_loss: 0.1494 - val_o3_loss: 0.1498 - val_co_loss: 0.0885 - val_pm25_mse: 0.0173 - val_pm10_mse: 0.0185 - val_so2_mse: 0.0235 - val_no2_mse: 0.0403 - val_o3_mse: 0.0441 - val_co_mse: 0.0180\n",
"Epoch 15/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1196 - pm25_loss: 0.0190 - pm10_loss: 0.0140 - so2_loss: 0.0158 - no2_loss: 0.0294 - o3_loss: 0.0213 - co_loss: 0.0200 - pm25_mse: 8.0990e-04 - pm10_mse: 4.4497e-04 - so2_mse: 7.2605e-04 - no2_mse: 0.0016 - o3_mse: 8.9130e-04 - co_mse: 7.7173e-04 - val_loss: 0.6597 - val_pm25_loss: 0.0829 - val_pm10_loss: 0.0857 - val_so2_loss: 0.1023 - val_no2_loss: 0.1473 - val_o3_loss: 0.1530 - val_co_loss: 0.0884 - val_pm25_mse: 0.0173 - val_pm10_mse: 0.0181 - val_so2_mse: 0.0237 - val_no2_mse: 0.0398 - val_o3_mse: 0.0462 - val_co_mse: 0.0179\n",
"Epoch 16/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1177 - pm25_loss: 0.0185 - pm10_loss: 0.0138 - so2_loss: 0.0154 - no2_loss: 0.0291 - o3_loss: 0.0211 - co_loss: 0.0197 - pm25_mse: 7.7055e-04 - pm10_mse: 4.3773e-04 - so2_mse: 6.9458e-04 - no2_mse: 0.0016 - o3_mse: 8.6953e-04 - co_mse: 7.4449e-04 - val_loss: 0.6606 - val_pm25_loss: 0.0818 - val_pm10_loss: 0.0847 - val_so2_loss: 0.1006 - val_no2_loss: 0.1530 - val_o3_loss: 0.1511 - val_co_loss: 0.0894 - val_pm25_mse: 0.0168 - val_pm10_mse: 0.0178 - val_so2_mse: 0.0232 - val_no2_mse: 0.0413 - val_o3_mse: 0.0455 - val_co_mse: 0.0176\n",
"Epoch 17/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1163 - pm25_loss: 0.0185 - pm10_loss: 0.0137 - so2_loss: 0.0152 - no2_loss: 0.0288 - o3_loss: 0.0207 - co_loss: 0.0195 - pm25_mse: 7.7383e-04 - pm10_mse: 4.2540e-04 - so2_mse: 6.6704e-04 - no2_mse: 0.0016 - o3_mse: 8.3579e-04 - co_mse: 7.3199e-04 - val_loss: 0.6612 - val_pm25_loss: 0.0831 - val_pm10_loss: 0.0843 - val_so2_loss: 0.1018 - val_no2_loss: 0.1472 - val_o3_loss: 0.1559 - val_co_loss: 0.0889 - val_pm25_mse: 0.0174 - val_pm10_mse: 0.0177 - val_so2_mse: 0.0236 - val_no2_mse: 0.0395 - val_o3_mse: 0.0481 - val_co_mse: 0.0179\n",
"Epoch 18/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1147 - pm25_loss: 0.0181 - pm10_loss: 0.0135 - so2_loss: 0.0150 - no2_loss: 0.0284 - o3_loss: 0.0204 - co_loss: 0.0192 - pm25_mse: 7.2693e-04 - pm10_mse: 4.1564e-04 - so2_mse: 6.4517e-04 - no2_mse: 0.0015 - o3_mse: 8.1594e-04 - co_mse: 7.0265e-04 - val_loss: 0.6583 - val_pm25_loss: 0.0828 - val_pm10_loss: 0.0841 - val_so2_loss: 0.1002 - val_no2_loss: 0.1490 - val_o3_loss: 0.1546 - val_co_loss: 0.0875 - val_pm25_mse: 0.0170 - val_pm10_mse: 0.0176 - val_so2_mse: 0.0231 - val_no2_mse: 0.0400 - val_o3_mse: 0.0475 - val_co_mse: 0.0173\n",
"Epoch 19/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1139 - pm25_loss: 0.0180 - pm10_loss: 0.0133 - so2_loss: 0.0150 - no2_loss: 0.0284 - o3_loss: 0.0203 - co_loss: 0.0191 - pm25_mse: 7.2973e-04 - pm10_mse: 3.9422e-04 - so2_mse: 6.5502e-04 - no2_mse: 0.0015 - o3_mse: 8.0642e-04 - co_mse: 6.9577e-04 - val_loss: 0.6550 - val_pm25_loss: 0.0823 - val_pm10_loss: 0.0854 - val_so2_loss: 0.1022 - val_no2_loss: 0.1446 - val_o3_loss: 0.1525 - val_co_loss: 0.0880 - val_pm25_mse: 0.0172 - val_pm10_mse: 0.0181 - val_so2_mse: 0.0237 - val_no2_mse: 0.0380 - val_o3_mse: 0.0457 - val_co_mse: 0.0178\n",
"Epoch 20/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1125 - pm25_loss: 0.0177 - pm10_loss: 0.0132 - so2_loss: 0.0148 - no2_loss: 0.0280 - o3_loss: 0.0200 - co_loss: 0.0188 - pm25_mse: 7.0545e-04 - pm10_mse: 3.9227e-04 - so2_mse: 6.3487e-04 - no2_mse: 0.0015 - o3_mse: 7.8305e-04 - co_mse: 6.7808e-04 - val_loss: 0.6481 - val_pm25_loss: 0.0813 - val_pm10_loss: 0.0851 - val_so2_loss: 0.1032 - val_no2_loss: 0.1401 - val_o3_loss: 0.1514 - val_co_loss: 0.0870 - val_pm25_mse: 0.0167 - val_pm10_mse: 0.0181 - val_so2_mse: 0.0239 - val_no2_mse: 0.0358 - val_o3_mse: 0.0450 - val_co_mse: 0.0174\n",
"Epoch 21/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1119 - pm25_loss: 0.0177 - pm10_loss: 0.0131 - so2_loss: 0.0146 - no2_loss: 0.0279 - o3_loss: 0.0199 - co_loss: 0.0187 - pm25_mse: 7.0314e-04 - pm10_mse: 3.8956e-04 - so2_mse: 6.1240e-04 - no2_mse: 0.0015 - o3_mse: 7.7719e-04 - co_mse: 6.7488e-04 - val_loss: 0.6602 - val_pm25_loss: 0.0825 - val_pm10_loss: 0.0851 - val_so2_loss: 0.1020 - val_no2_loss: 0.1498 - val_o3_loss: 0.1531 - val_co_loss: 0.0876 - val_pm25_mse: 0.0171 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0237 - val_no2_mse: 0.0403 - val_o3_mse: 0.0468 - val_co_mse: 0.0177\n",
"Epoch 22/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1100 - pm25_loss: 0.0173 - pm10_loss: 0.0128 - so2_loss: 0.0143 - no2_loss: 0.0275 - o3_loss: 0.0195 - co_loss: 0.0185 - pm25_mse: 6.6950e-04 - pm10_mse: 3.7277e-04 - so2_mse: 5.8999e-04 - no2_mse: 0.0014 - o3_mse: 7.4992e-04 - co_mse: 6.5288e-04 - val_loss: 0.6713 - val_pm25_loss: 0.0840 - val_pm10_loss: 0.0854 - val_so2_loss: 0.1017 - val_no2_loss: 0.1527 - val_o3_loss: 0.1566 - val_co_loss: 0.0910 - val_pm25_mse: 0.0179 - val_pm10_mse: 0.0181 - val_so2_mse: 0.0237 - val_no2_mse: 0.0427 - val_o3_mse: 0.0487 - val_co_mse: 0.0187\n",
"Epoch 23/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1097 - pm25_loss: 0.0173 - pm10_loss: 0.0128 - so2_loss: 0.0143 - no2_loss: 0.0275 - o3_loss: 0.0194 - co_loss: 0.0185 - pm25_mse: 6.7541e-04 - pm10_mse: 3.6521e-04 - so2_mse: 5.8931e-04 - no2_mse: 0.0014 - o3_mse: 7.4037e-04 - co_mse: 6.6391e-04 - val_loss: 0.6614 - val_pm25_loss: 0.0829 - val_pm10_loss: 0.0846 - val_so2_loss: 0.1011 - val_no2_loss: 0.1520 - val_o3_loss: 0.1504 - val_co_loss: 0.0903 - val_pm25_mse: 0.0172 - val_pm10_mse: 0.0178 - val_so2_mse: 0.0234 - val_no2_mse: 0.0412 - val_o3_mse: 0.0449 - val_co_mse: 0.0181\n",
"Epoch 24/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1084 - pm25_loss: 0.0171 - pm10_loss: 0.0126 - so2_loss: 0.0142 - no2_loss: 0.0272 - o3_loss: 0.0192 - co_loss: 0.0182 - pm25_mse: 6.5768e-04 - pm10_mse: 3.5788e-04 - so2_mse: 5.7106e-04 - no2_mse: 0.0014 - o3_mse: 7.2528e-04 - co_mse: 6.3424e-04 - val_loss: 0.6572 - val_pm25_loss: 0.0836 - val_pm10_loss: 0.0853 - val_so2_loss: 0.1021 - val_no2_loss: 0.1426 - val_o3_loss: 0.1561 - val_co_loss: 0.0874 - val_pm25_mse: 0.0176 - val_pm10_mse: 0.0181 - val_so2_mse: 0.0236 - val_no2_mse: 0.0380 - val_o3_mse: 0.0482 - val_co_mse: 0.0178\n",
"Epoch 25/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1078 - pm25_loss: 0.0170 - pm10_loss: 0.0125 - so2_loss: 0.0140 - no2_loss: 0.0272 - o3_loss: 0.0190 - co_loss: 0.0181 - pm25_mse: 6.5638e-04 - pm10_mse: 3.4962e-04 - so2_mse: 5.6850e-04 - no2_mse: 0.0014 - o3_mse: 7.0940e-04 - co_mse: 6.3257e-04 - val_loss: 0.6582 - val_pm25_loss: 0.0826 - val_pm10_loss: 0.0857 - val_so2_loss: 0.1022 - val_no2_loss: 0.1497 - val_o3_loss: 0.1503 - val_co_loss: 0.0876 - val_pm25_mse: 0.0172 - val_pm10_mse: 0.0182 - val_so2_mse: 0.0237 - val_no2_mse: 0.0408 - val_o3_mse: 0.0448 - val_co_mse: 0.0177\n",
"Epoch 26/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1067 - pm25_loss: 0.0168 - pm10_loss: 0.0124 - so2_loss: 0.0139 - no2_loss: 0.0269 - o3_loss: 0.0188 - co_loss: 0.0180 - pm25_mse: 6.3574e-04 - pm10_mse: 3.4226e-04 - so2_mse: 5.5284e-04 - no2_mse: 0.0014 - o3_mse: 6.9490e-04 - co_mse: 6.2231e-04 - val_loss: 0.6668 - val_pm25_loss: 0.0838 - val_pm10_loss: 0.0848 - val_so2_loss: 0.1002 - val_no2_loss: 0.1538 - val_o3_loss: 0.1555 - val_co_loss: 0.0887 - val_pm25_mse: 0.0176 - val_pm10_mse: 0.0179 - val_so2_mse: 0.0231 - val_no2_mse: 0.0426 - val_o3_mse: 0.0479 - val_co_mse: 0.0180\n",
"Epoch 27/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1060 - pm25_loss: 0.0167 - pm10_loss: 0.0122 - so2_loss: 0.0138 - no2_loss: 0.0268 - o3_loss: 0.0186 - co_loss: 0.0179 - pm25_mse: 6.2988e-04 - pm10_mse: 3.3928e-04 - so2_mse: 5.4696e-04 - no2_mse: 0.0014 - o3_mse: 6.8858e-04 - co_mse: 6.1392e-04 - val_loss: 0.6545 - val_pm25_loss: 0.0829 - val_pm10_loss: 0.0849 - val_so2_loss: 0.1032 - val_no2_loss: 0.1422 - val_o3_loss: 0.1550 - val_co_loss: 0.0863 - val_pm25_mse: 0.0172 - val_pm10_mse: 0.0179 - val_so2_mse: 0.0239 - val_no2_mse: 0.0374 - val_o3_mse: 0.0476 - val_co_mse: 0.0176\n",
"Epoch 28/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1055 - pm25_loss: 0.0165 - pm10_loss: 0.0122 - so2_loss: 0.0137 - no2_loss: 0.0267 - o3_loss: 0.0187 - co_loss: 0.0177 - pm25_mse: 6.1787e-04 - pm10_mse: 3.3690e-04 - so2_mse: 5.3732e-04 - no2_mse: 0.0014 - o3_mse: 6.8977e-04 - co_mse: 6.0403e-04 - val_loss: 0.6602 - val_pm25_loss: 0.0831 - val_pm10_loss: 0.0852 - val_so2_loss: 0.1013 - val_no2_loss: 0.1478 - val_o3_loss: 0.1541 - val_co_loss: 0.0887 - val_pm25_mse: 0.0174 - val_pm10_mse: 0.0181 - val_so2_mse: 0.0234 - val_no2_mse: 0.0401 - val_o3_mse: 0.0472 - val_co_mse: 0.0179\n",
"Epoch 29/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1051 - pm25_loss: 0.0165 - pm10_loss: 0.0121 - so2_loss: 0.0136 - no2_loss: 0.0266 - o3_loss: 0.0186 - co_loss: 0.0177 - pm25_mse: 6.2427e-04 - pm10_mse: 3.3626e-04 - so2_mse: 5.2777e-04 - no2_mse: 0.0014 - o3_mse: 6.8583e-04 - co_mse: 5.9979e-04 - val_loss: 0.6590 - val_pm25_loss: 0.0832 - val_pm10_loss: 0.0868 - val_so2_loss: 0.1012 - val_no2_loss: 0.1461 - val_o3_loss: 0.1534 - val_co_loss: 0.0882 - val_pm25_mse: 0.0177 - val_pm10_mse: 0.0186 - val_so2_mse: 0.0235 - val_no2_mse: 0.0392 - val_o3_mse: 0.0470 - val_co_mse: 0.0181\n",
"Epoch 30/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1042 - pm25_loss: 0.0164 - pm10_loss: 0.0121 - so2_loss: 0.0135 - no2_loss: 0.0264 - o3_loss: 0.0183 - co_loss: 0.0175 - pm25_mse: 6.1534e-04 - pm10_mse: 3.2614e-04 - so2_mse: 5.3001e-04 - no2_mse: 0.0014 - o3_mse: 6.6255e-04 - co_mse: 5.9483e-04 - val_loss: 0.6618 - val_pm25_loss: 0.0831 - val_pm10_loss: 0.0846 - val_so2_loss: 0.1023 - val_no2_loss: 0.1482 - val_o3_loss: 0.1549 - val_co_loss: 0.0886 - val_pm25_mse: 0.0175 - val_pm10_mse: 0.0178 - val_so2_mse: 0.0238 - val_no2_mse: 0.0405 - val_o3_mse: 0.0475 - val_co_mse: 0.0181\n",
"Epoch 31/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1035 - pm25_loss: 0.0162 - pm10_loss: 0.0119 - so2_loss: 0.0134 - no2_loss: 0.0264 - o3_loss: 0.0181 - co_loss: 0.0175 - pm25_mse: 5.9792e-04 - pm10_mse: 3.1864e-04 - so2_mse: 5.2179e-04 - no2_mse: 0.0013 - o3_mse: 6.4994e-04 - co_mse: 5.8687e-04 - val_loss: 0.6585 - val_pm25_loss: 0.0826 - val_pm10_loss: 0.0848 - val_so2_loss: 0.0991 - val_no2_loss: 0.1517 - val_o3_loss: 0.1508 - val_co_loss: 0.0894 - val_pm25_mse: 0.0171 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0228 - val_no2_mse: 0.0414 - val_o3_mse: 0.0456 - val_co_mse: 0.0180\n",
"Epoch 32/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1028 - pm25_loss: 0.0161 - pm10_loss: 0.0118 - so2_loss: 0.0132 - no2_loss: 0.0263 - o3_loss: 0.0180 - co_loss: 0.0174 - pm25_mse: 5.9557e-04 - pm10_mse: 3.1492e-04 - so2_mse: 4.9868e-04 - no2_mse: 0.0013 - o3_mse: 6.4688e-04 - co_mse: 5.7651e-04 - val_loss: 0.6626 - val_pm25_loss: 0.0828 - val_pm10_loss: 0.0844 - val_so2_loss: 0.1020 - val_no2_loss: 0.1491 - val_o3_loss: 0.1566 - val_co_loss: 0.0877 - val_pm25_mse: 0.0172 - val_pm10_mse: 0.0178 - val_so2_mse: 0.0237 - val_no2_mse: 0.0410 - val_o3_mse: 0.0484 - val_co_mse: 0.0179\n",
"Epoch 33/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1023 - pm25_loss: 0.0161 - pm10_loss: 0.0117 - so2_loss: 0.0133 - no2_loss: 0.0261 - o3_loss: 0.0180 - co_loss: 0.0172 - pm25_mse: 5.9043e-04 - pm10_mse: 3.0794e-04 - so2_mse: 5.0748e-04 - no2_mse: 0.0013 - o3_mse: 6.4401e-04 - co_mse: 5.7312e-04 - val_loss: 0.6591 - val_pm25_loss: 0.0831 - val_pm10_loss: 0.0845 - val_so2_loss: 0.1015 - val_no2_loss: 0.1461 - val_o3_loss: 0.1533 - val_co_loss: 0.0906 - val_pm25_mse: 0.0172 - val_pm10_mse: 0.0178 - val_so2_mse: 0.0236 - val_no2_mse: 0.0391 - val_o3_mse: 0.0469 - val_co_mse: 0.0184\n",
"Epoch 34/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1019 - pm25_loss: 0.0160 - pm10_loss: 0.0117 - so2_loss: 0.0131 - no2_loss: 0.0261 - o3_loss: 0.0179 - co_loss: 0.0171 - pm25_mse: 5.8674e-04 - pm10_mse: 3.1048e-04 - so2_mse: 4.9479e-04 - no2_mse: 0.0013 - o3_mse: 6.3890e-04 - co_mse: 5.7154e-04 - val_loss: 0.6655 - val_pm25_loss: 0.0831 - val_pm10_loss: 0.0850 - val_so2_loss: 0.1017 - val_no2_loss: 0.1480 - val_o3_loss: 0.1576 - val_co_loss: 0.0901 - val_pm25_mse: 0.0172 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0236 - val_no2_mse: 0.0404 - val_o3_mse: 0.0495 - val_co_mse: 0.0183\n",
"Epoch 35/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1011 - pm25_loss: 0.0159 - pm10_loss: 0.0117 - so2_loss: 0.0131 - no2_loss: 0.0258 - o3_loss: 0.0177 - co_loss: 0.0170 - pm25_mse: 5.8263e-04 - pm10_mse: 3.0657e-04 - so2_mse: 4.9633e-04 - no2_mse: 0.0013 - o3_mse: 6.2868e-04 - co_mse: 5.5694e-04 - val_loss: 0.6539 - val_pm25_loss: 0.0825 - val_pm10_loss: 0.0839 - val_so2_loss: 0.1018 - val_no2_loss: 0.1436 - val_o3_loss: 0.1540 - val_co_loss: 0.0880 - val_pm25_mse: 0.0169 - val_pm10_mse: 0.0177 - val_so2_mse: 0.0236 - val_no2_mse: 0.0381 - val_o3_mse: 0.0473 - val_co_mse: 0.0175\n",
"Epoch 36/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1007 - pm25_loss: 0.0158 - pm10_loss: 0.0115 - so2_loss: 0.0129 - no2_loss: 0.0258 - o3_loss: 0.0177 - co_loss: 0.0169 - pm25_mse: 5.7141e-04 - pm10_mse: 3.0444e-04 - so2_mse: 4.7820e-04 - no2_mse: 0.0013 - o3_mse: 6.2529e-04 - co_mse: 5.5519e-04 - val_loss: 0.6573 - val_pm25_loss: 0.0825 - val_pm10_loss: 0.0848 - val_so2_loss: 0.1033 - val_no2_loss: 0.1448 - val_o3_loss: 0.1542 - val_co_loss: 0.0876 - val_pm25_mse: 0.0172 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0241 - val_no2_mse: 0.0388 - val_o3_mse: 0.0473 - val_co_mse: 0.0178\n",
"Epoch 37/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.1006 - pm25_loss: 0.0158 - pm10_loss: 0.0115 - so2_loss: 0.0129 - no2_loss: 0.0258 - o3_loss: 0.0176 - co_loss: 0.0169 - pm25_mse: 5.7186e-04 - pm10_mse: 2.9683e-04 - so2_mse: 4.8355e-04 - no2_mse: 0.0013 - o3_mse: 6.2410e-04 - co_mse: 5.5257e-04 - val_loss: 0.6605 - val_pm25_loss: 0.0830 - val_pm10_loss: 0.0850 - val_so2_loss: 0.1005 - val_no2_loss: 0.1450 - val_o3_loss: 0.1586 - val_co_loss: 0.0884 - val_pm25_mse: 0.0174 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0232 - val_no2_mse: 0.0394 - val_o3_mse: 0.0500 - val_co_mse: 0.0178\n",
"Epoch 38/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0998 - pm25_loss: 0.0156 - pm10_loss: 0.0114 - so2_loss: 0.0129 - no2_loss: 0.0256 - o3_loss: 0.0174 - co_loss: 0.0169 - pm25_mse: 5.5708e-04 - pm10_mse: 2.9609e-04 - so2_mse: 4.8605e-04 - no2_mse: 0.0013 - o3_mse: 6.0751e-04 - co_mse: 5.5119e-04 - val_loss: 0.6543 - val_pm25_loss: 0.0828 - val_pm10_loss: 0.0851 - val_so2_loss: 0.1004 - val_no2_loss: 0.1472 - val_o3_loss: 0.1509 - val_co_loss: 0.0879 - val_pm25_mse: 0.0173 - val_pm10_mse: 0.0181 - val_so2_mse: 0.0233 - val_no2_mse: 0.0401 - val_o3_mse: 0.0453 - val_co_mse: 0.0177\n",
"Epoch 39/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0996 - pm25_loss: 0.0156 - pm10_loss: 0.0113 - so2_loss: 0.0128 - no2_loss: 0.0257 - o3_loss: 0.0174 - co_loss: 0.0168 - pm25_mse: 5.6576e-04 - pm10_mse: 2.9270e-04 - so2_mse: 4.7426e-04 - no2_mse: 0.0013 - o3_mse: 6.0135e-04 - co_mse: 5.4368e-04 - val_loss: 0.6670 - val_pm25_loss: 0.0826 - val_pm10_loss: 0.0842 - val_so2_loss: 0.1003 - val_no2_loss: 0.1550 - val_o3_loss: 0.1559 - val_co_loss: 0.0891 - val_pm25_mse: 0.0173 - val_pm10_mse: 0.0177 - val_so2_mse: 0.0233 - val_no2_mse: 0.0431 - val_o3_mse: 0.0483 - val_co_mse: 0.0181\n",
"Epoch 40/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0989 - pm25_loss: 0.0154 - pm10_loss: 0.0112 - so2_loss: 0.0127 - no2_loss: 0.0255 - o3_loss: 0.0173 - co_loss: 0.0167 - pm25_mse: 5.5163e-04 - pm10_mse: 2.8335e-04 - so2_mse: 4.5740e-04 - no2_mse: 0.0013 - o3_mse: 6.0434e-04 - co_mse: 5.3955e-04 - val_loss: 0.6561 - val_pm25_loss: 0.0830 - val_pm10_loss: 0.0844 - val_so2_loss: 0.1002 - val_no2_loss: 0.1470 - val_o3_loss: 0.1537 - val_co_loss: 0.0879 - val_pm25_mse: 0.0173 - val_pm10_mse: 0.0178 - val_so2_mse: 0.0232 - val_no2_mse: 0.0394 - val_o3_mse: 0.0472 - val_co_mse: 0.0176\n",
"Epoch 41/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0984 - pm25_loss: 0.0154 - pm10_loss: 0.0112 - so2_loss: 0.0126 - no2_loss: 0.0254 - o3_loss: 0.0172 - co_loss: 0.0166 - pm25_mse: 5.4599e-04 - pm10_mse: 2.8575e-04 - so2_mse: 4.6223e-04 - no2_mse: 0.0013 - o3_mse: 5.9550e-04 - co_mse: 5.3020e-04 - val_loss: 0.6543 - val_pm25_loss: 0.0826 - val_pm10_loss: 0.0849 - val_so2_loss: 0.1017 - val_no2_loss: 0.1467 - val_o3_loss: 0.1512 - val_co_loss: 0.0872 - val_pm25_mse: 0.0173 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0237 - val_no2_mse: 0.0391 - val_o3_mse: 0.0457 - val_co_mse: 0.0176\n",
"Epoch 42/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0984 - pm25_loss: 0.0154 - pm10_loss: 0.0112 - so2_loss: 0.0125 - no2_loss: 0.0254 - o3_loss: 0.0173 - co_loss: 0.0165 - pm25_mse: 5.5078e-04 - pm10_mse: 2.8158e-04 - so2_mse: 4.5397e-04 - no2_mse: 0.0013 - o3_mse: 5.9908e-04 - co_mse: 5.2796e-04 - val_loss: 0.6594 - val_pm25_loss: 0.0825 - val_pm10_loss: 0.0842 - val_so2_loss: 0.1007 - val_no2_loss: 0.1482 - val_o3_loss: 0.1552 - val_co_loss: 0.0885 - val_pm25_mse: 0.0171 - val_pm10_mse: 0.0177 - val_so2_mse: 0.0234 - val_no2_mse: 0.0404 - val_o3_mse: 0.0478 - val_co_mse: 0.0180\n",
"Epoch 43/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0978 - pm25_loss: 0.0152 - pm10_loss: 0.0111 - so2_loss: 0.0125 - no2_loss: 0.0254 - o3_loss: 0.0171 - co_loss: 0.0165 - pm25_mse: 5.4125e-04 - pm10_mse: 2.8138e-04 - so2_mse: 4.5162e-04 - no2_mse: 0.0013 - o3_mse: 5.8738e-04 - co_mse: 5.3130e-04 - val_loss: 0.6612 - val_pm25_loss: 0.0834 - val_pm10_loss: 0.0843 - val_so2_loss: 0.1005 - val_no2_loss: 0.1519 - val_o3_loss: 0.1522 - val_co_loss: 0.0889 - val_pm25_mse: 0.0176 - val_pm10_mse: 0.0178 - val_so2_mse: 0.0233 - val_no2_mse: 0.0419 - val_o3_mse: 0.0466 - val_co_mse: 0.0181\n",
"Epoch 44/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0975 - pm25_loss: 0.0152 - pm10_loss: 0.0111 - so2_loss: 0.0125 - no2_loss: 0.0253 - o3_loss: 0.0171 - co_loss: 0.0165 - pm25_mse: 5.3677e-04 - pm10_mse: 2.7633e-04 - so2_mse: 4.5067e-04 - no2_mse: 0.0013 - o3_mse: 5.8541e-04 - co_mse: 5.2256e-04 - val_loss: 0.6570 - val_pm25_loss: 0.0839 - val_pm10_loss: 0.0841 - val_so2_loss: 0.1006 - val_no2_loss: 0.1469 - val_o3_loss: 0.1518 - val_co_loss: 0.0899 - val_pm25_mse: 0.0176 - val_pm10_mse: 0.0178 - val_so2_mse: 0.0234 - val_no2_mse: 0.0394 - val_o3_mse: 0.0462 - val_co_mse: 0.0181\n",
"Epoch 45/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0973 - pm25_loss: 0.0152 - pm10_loss: 0.0110 - so2_loss: 0.0124 - no2_loss: 0.0252 - o3_loss: 0.0171 - co_loss: 0.0164 - pm25_mse: 5.3606e-04 - pm10_mse: 2.7196e-04 - so2_mse: 4.4353e-04 - no2_mse: 0.0012 - o3_mse: 5.8985e-04 - co_mse: 5.2791e-04 - val_loss: 0.6557 - val_pm25_loss: 0.0816 - val_pm10_loss: 0.0843 - val_so2_loss: 0.0979 - val_no2_loss: 0.1528 - val_o3_loss: 0.1484 - val_co_loss: 0.0907 - val_pm25_mse: 0.0167 - val_pm10_mse: 0.0179 - val_so2_mse: 0.0226 - val_no2_mse: 0.0410 - val_o3_mse: 0.0441 - val_co_mse: 0.0180\n",
"Epoch 46/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0973 - pm25_loss: 0.0153 - pm10_loss: 0.0110 - so2_loss: 0.0123 - no2_loss: 0.0252 - o3_loss: 0.0170 - co_loss: 0.0164 - pm25_mse: 5.4535e-04 - pm10_mse: 2.7624e-04 - so2_mse: 4.4083e-04 - no2_mse: 0.0012 - o3_mse: 5.7941e-04 - co_mse: 5.2028e-04 - val_loss: 0.6552 - val_pm25_loss: 0.0823 - val_pm10_loss: 0.0839 - val_so2_loss: 0.0989 - val_no2_loss: 0.1488 - val_o3_loss: 0.1520 - val_co_loss: 0.0893 - val_pm25_mse: 0.0170 - val_pm10_mse: 0.0176 - val_so2_mse: 0.0228 - val_no2_mse: 0.0401 - val_o3_mse: 0.0463 - val_co_mse: 0.0180\n",
"Epoch 47/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0962 - pm25_loss: 0.0151 - pm10_loss: 0.0108 - so2_loss: 0.0123 - no2_loss: 0.0249 - o3_loss: 0.0170 - co_loss: 0.0162 - pm25_mse: 5.2758e-04 - pm10_mse: 2.6199e-04 - so2_mse: 4.3608e-04 - no2_mse: 0.0012 - o3_mse: 5.7838e-04 - co_mse: 5.0790e-04 - val_loss: 0.6524 - val_pm25_loss: 0.0818 - val_pm10_loss: 0.0847 - val_so2_loss: 0.1009 - val_no2_loss: 0.1477 - val_o3_loss: 0.1507 - val_co_loss: 0.0866 - val_pm25_mse: 0.0170 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0234 - val_no2_mse: 0.0396 - val_o3_mse: 0.0455 - val_co_mse: 0.0174\n",
"Epoch 48/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0965 - pm25_loss: 0.0150 - pm10_loss: 0.0109 - so2_loss: 0.0123 - no2_loss: 0.0252 - o3_loss: 0.0168 - co_loss: 0.0164 - pm25_mse: 5.2843e-04 - pm10_mse: 2.6876e-04 - so2_mse: 4.3716e-04 - no2_mse: 0.0013 - o3_mse: 5.7539e-04 - co_mse: 5.1675e-04 - val_loss: 0.6573 - val_pm25_loss: 0.0820 - val_pm10_loss: 0.0839 - val_so2_loss: 0.1001 - val_no2_loss: 0.1474 - val_o3_loss: 0.1548 - val_co_loss: 0.0891 - val_pm25_mse: 0.0171 - val_pm10_mse: 0.0176 - val_so2_mse: 0.0232 - val_no2_mse: 0.0398 - val_o3_mse: 0.0478 - val_co_mse: 0.0180\n",
"Epoch 49/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0961 - pm25_loss: 0.0150 - pm10_loss: 0.0108 - so2_loss: 0.0122 - no2_loss: 0.0251 - o3_loss: 0.0169 - co_loss: 0.0162 - pm25_mse: 5.2412e-04 - pm10_mse: 2.6725e-04 - so2_mse: 4.2533e-04 - no2_mse: 0.0012 - o3_mse: 5.7784e-04 - co_mse: 5.0353e-04 - val_loss: 0.6569 - val_pm25_loss: 0.0825 - val_pm10_loss: 0.0847 - val_so2_loss: 0.0997 - val_no2_loss: 0.1492 - val_o3_loss: 0.1517 - val_co_loss: 0.0892 - val_pm25_mse: 0.0172 - val_pm10_mse: 0.0180 - val_so2_mse: 0.0230 - val_no2_mse: 0.0406 - val_o3_mse: 0.0459 - val_co_mse: 0.0178\n",
"Epoch 50/50\n",
"690/690 [==============================] - 12s 17ms/step - loss: 0.0956 - pm25_loss: 0.0149 - pm10_loss: 0.0107 - so2_loss: 0.0122 - no2_loss: 0.0250 - o3_loss: 0.0167 - co_loss: 0.0161 - pm25_mse: 5.1678e-04 - pm10_mse: 2.6319e-04 - so2_mse: 4.3059e-04 - no2_mse: 0.0012 - o3_mse: 5.6103e-04 - co_mse: 5.0597e-04 - val_loss: 0.6567 - val_pm25_loss: 0.0831 - val_pm10_loss: 0.0838 - val_so2_loss: 0.1020 - val_no2_loss: 0.1449 - val_o3_loss: 0.1542 - val_co_loss: 0.0887 - val_pm25_mse: 0.0174 - val_pm10_mse: 0.0175 - val_so2_mse: 0.0238 - val_no2_mse: 0.0390 - val_o3_mse: 0.0477 - val_co_mse: 0.0182\n"
]
}
],
"source": [
"model_history = model.fit(\n",
" {'input': np.expand_dims(train_data[feature_cols].values, axis=1)},\n",
" {\n",
" 'pm25': train_data['PM2.5'], \n",
" 'pm10':train_data['PM10'],\n",
" 'so2': train_data['SO2'], \n",
" 'no2': train_data['NO2'], \n",
" 'o3': train_data['O3'], \n",
" 'co': train_data['CO'],\n",
" },\n",
" validation_data=(np.expand_dims(valid_data[feature_cols].values, axis=1), valid_data[out_cols].values),\n",
" epochs=50, batch_size=64, verbose=1)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[array([[0.02576166],\n",
" [0.17945182],\n",
" [0.06094658],\n",
" ...,\n",
" [0.05389276],\n",
" [0.09377471],\n",
" [0.13254392]], dtype=float32),\n",
" array([[0.03676841],\n",
" [0.12384248],\n",
" [0.04926959],\n",
" ...,\n",
" [0.08627176],\n",
" [0.08261123],\n",
" [0.07822514]], dtype=float32),\n",
" array([[0.00334924],\n",
" [0.03361022],\n",
" [0.00760874],\n",
" ...,\n",
" [0.01287785],\n",
" [0.0179143 ],\n",
" [0.01522398]], dtype=float32),\n",
" array([[0.02466571],\n",
" [0.24751806],\n",
" [0.28095278],\n",
" ...,\n",
" [0.45145005],\n",
" [0.08254912],\n",
" [0.4848558 ]], dtype=float32),\n",
" array([[0.27359694],\n",
" [0.32201412],\n",
" [0.11083704],\n",
" ...,\n",
" [0.02645177],\n",
" [0.5149532 ],\n",
" [0.04898548]], dtype=float32),\n",
" array([[0.0195317 ],\n",
" [0.18470812],\n",
" [0.07515424],\n",
" ...,\n",
" [0.0780178 ],\n",
" [0.06473574],\n",
" [0.12362501]], dtype=float32)]"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rst = model.predict(np.expand_dims(test_data[feature_cols], axis=1))\n",
"rst"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"pred_rst = pd.DataFrame.from_records(np.squeeze(np.asarray(rst), axis=2).T, columns=out_cols)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"real_rst = test_data[out_cols].copy()"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"for col in out_cols:\n",
" pred_rst[col] = pred_rst[col] * (maxs[col] - mins[col]) + mins[col]\n",
" real_rst[col] = real_rst[col] * (maxs[col] - mins[col]) + mins[col]"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"y_pred_pm25 = pred_rst['PM2.5'].values.reshape(-1,)\n",
"y_pred_pm10 = pred_rst['PM10'].values.reshape(-1,)\n",
"y_pred_so2 = pred_rst['SO2'].values.reshape(-1,)\n",
"y_pred_no2 = pred_rst['NO2'].values.reshape(-1,)\n",
"y_pred_o3 = pred_rst['O3'].values.reshape(-1,)\n",
"y_pred_co = pred_rst['CO'].values.reshape(-1,)\n",
"y_true_pm25 = real_rst['PM2.5'].values.reshape(-1,)\n",
"y_true_pm10 = real_rst['PM10'].values.reshape(-1,)\n",
"y_true_so2 = real_rst['SO2'].values.reshape(-1,)\n",
"y_true_no2 = real_rst['NO2'].values.reshape(-1,)\n",
"y_true_o3 = real_rst['O3'].values.reshape(-1,)\n",
"y_true_co = real_rst['CO'].values.reshape(-1,)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score, mean_absolute_percentage_error"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"def print_eva(y_true, y_pred, tp):\n",
" MSE = mean_squared_error(y_true, y_pred)\n",
" RMSE = np.sqrt(MSE)\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",
" print(f\"COL: {tp}, MSE: {format(MSE, '.2E')}\", end=',')\n",
" print(f'RMSE: {round(RMSE, 4)}', end=',')\n",
" print(f'MAPE: {round(MAPE, 4) * 100} %', end=',')\n",
" print(f'MAE: {round(MAE, 4)}', end=',')\n",
" print(f'R_2: {round(R_2, 4)}')\n",
" return [MSE, RMSE, MAE, MAPE, R_2]"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"COL: pm25, MSE: 1.09E+02,RMSE: 10.422200202941895,MAPE: 12.559999525547028 %,MAE: 6.230599880218506,R_2: 0.9559\n",
"COL: pm10, MSE: 3.40E+02,RMSE: 18.428300857543945,MAPE: 11.68999969959259 %,MAE: 12.01930046081543,R_2: 0.9395\n",
"COL: so2, MSE: 1.35E+02,RMSE: 11.639599800109863,MAPE: 20.329999923706055 %,MAE: 6.62060022354126,R_2: 0.9567\n",
"COL: no2, MSE: 2.97E+01,RMSE: 5.448800086975098,MAPE: 10.360000282526016 %,MAE: 3.8643999099731445,R_2: 0.9526\n",
"COL: o3, MSE: 4.93E+01,RMSE: 7.019100189208984,MAPE: 15.330000221729279 %,MAE: 4.6255998611450195,R_2: 0.9802\n",
"COL: co, MSE: 1.92E-02,RMSE: 0.1386999934911728,MAPE: 8.969999849796295 %,MAE: 0.0982000008225441,R_2: 0.9616\n"
]
}
],
"source": [
"pm25_eva = print_eva(y_true_pm25, y_pred_pm25, tp='pm25')\n",
"pm10_eva = print_eva(y_true_pm10, y_pred_pm10, tp='pm10')\n",
"so2_eva = print_eva(y_true_so2, y_pred_so2, tp='so2')\n",
"nox_eva = print_eva(y_true_no2, y_pred_no2, tp='no2')\n",
"o3_eva = print_eva(y_true_o3, y_pred_o3, tp='o3')\n",
"co_eva = print_eva(y_true_co, y_pred_co, tp='co')"
]
},
{
"cell_type": "code",
"execution_count": 64,
"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>R_2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>PM25</th>\n",
" <td>108.621880</td>\n",
" <td>10.422182</td>\n",
" <td>6.230620</td>\n",
" <td>0.125599</td>\n",
" <td>0.955881</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PM10</th>\n",
" <td>339.600830</td>\n",
" <td>18.428261</td>\n",
" <td>12.019309</td>\n",
" <td>0.116882</td>\n",
" <td>0.939480</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SO2</th>\n",
" <td>135.480988</td>\n",
" <td>11.639630</td>\n",
" <td>6.620558</td>\n",
" <td>0.203316</td>\n",
" <td>0.956686</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NO2</th>\n",
" <td>29.689177</td>\n",
" <td>5.448778</td>\n",
" <td>3.864434</td>\n",
" <td>0.103608</td>\n",
" <td>0.952610</td>\n",
" </tr>\n",
" <tr>\n",
" <th>O3</th>\n",
" <td>49.268276</td>\n",
" <td>7.019136</td>\n",
" <td>4.625617</td>\n",
" <td>0.153265</td>\n",
" <td>0.980247</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CO</th>\n",
" <td>0.019225</td>\n",
" <td>0.138656</td>\n",
" <td>0.098185</td>\n",
" <td>0.089745</td>\n",
" <td>0.961569</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" MSE RMSE MAE MAPE R_2\n",
"PM25 108.621880 10.422182 6.230620 0.125599 0.955881\n",
"PM10 339.600830 18.428261 12.019309 0.116882 0.939480\n",
"SO2 135.480988 11.639630 6.620558 0.203316 0.956686\n",
"NO2 29.689177 5.448778 3.864434 0.103608 0.952610\n",
"O3 49.268276 7.019136 4.625617 0.153265 0.980247\n",
"CO 0.019225 0.138656 0.098185 0.089745 0.961569"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame.from_records([pm25_eva, pm10_eva, so2_eva, nox_eva, o3_eva,co_eva], columns=['MSE', 'RMSE', 'MAE', 'MAPE', 'R_2'], index=['PM25', 'PM10', 'SO2', 'NO2', 'O3', 'CO'])"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7fe5c01bc6d0>"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1152x648 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(16, 9))\n",
"plt.plot(pred_rst['PM10'].values[50:150], 'o-', label='pred')\n",
"plt.plot(real_rst['PM10'].values[50:150], '*-', label='real')\n",
"plt.legend(loc='best')"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(32, 1)"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.get_weights()[-2].shape"
]
},
{
"cell_type": "code",
"execution_count": 39,
"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>PM2.5</th>\n",
" <th>PM10</th>\n",
" <th>SO2</th>\n",
" <th>NO2</th>\n",
" <th>O3</th>\n",
" <th>CO</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2020-02-21 17:00:00</th>\n",
" <td>15.0</td>\n",
" <td>51.000000</td>\n",
" <td>3.0</td>\n",
" <td>8.000000</td>\n",
" <td>87.000008</td>\n",
" <td>0.370</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-08 03:00:00</th>\n",
" <td>90.0</td>\n",
" <td>166.000000</td>\n",
" <td>32.0</td>\n",
" <td>49.000000</td>\n",
" <td>99.000000</td>\n",
" <td>1.560</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-07-21 05:00:00</th>\n",
" <td>33.0</td>\n",
" <td>71.000000</td>\n",
" <td>10.0</td>\n",
" <td>56.000000</td>\n",
" <td>32.000000</td>\n",
" <td>0.790</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-25 15:00:00</th>\n",
" <td>70.0</td>\n",
" <td>121.999992</td>\n",
" <td>16.0</td>\n",
" <td>24.000000</td>\n",
" <td>165.000015</td>\n",
" <td>1.070</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-02-27 12:00:00</th>\n",
" <td>205.0</td>\n",
" <td>303.000000</td>\n",
" <td>66.0</td>\n",
" <td>62.000000</td>\n",
" <td>92.000008</td>\n",
" <td>1.990</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-03-21 04:00:00</th>\n",
" <td>131.0</td>\n",
" <td>218.999985</td>\n",
" <td>47.0</td>\n",
" <td>52.999996</td>\n",
" <td>29.000000</td>\n",
" <td>1.510</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-11-16 13:00:00</th>\n",
" <td>251.0</td>\n",
" <td>382.500000</td>\n",
" <td>234.0</td>\n",
" <td>105.000000</td>\n",
" <td>23.500002</td>\n",
" <td>2.915</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-13 06:00:00</th>\n",
" <td>30.0</td>\n",
" <td>123.000008</td>\n",
" <td>18.0</td>\n",
" <td>76.000000</td>\n",
" <td>14.000000</td>\n",
" <td>0.890</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-05-15 15:00:00</th>\n",
" <td>36.0</td>\n",
" <td>94.000000</td>\n",
" <td>14.0</td>\n",
" <td>22.000000</td>\n",
" <td>144.000000</td>\n",
" <td>0.500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-10-15 21:00:00</th>\n",
" <td>67.0</td>\n",
" <td>103.000008</td>\n",
" <td>15.0</td>\n",
" <td>92.000000</td>\n",
" <td>12.000001</td>\n",
" <td>1.200</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2451 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" PM2.5 PM10 SO2 NO2 O3 CO\n",
"date \n",
"2020-02-21 17:00:00 15.0 51.000000 3.0 8.000000 87.000008 0.370\n",
"2017-07-08 03:00:00 90.0 166.000000 32.0 49.000000 99.000000 1.560\n",
"2020-07-21 05:00:00 33.0 71.000000 10.0 56.000000 32.000000 0.790\n",
"2018-06-25 15:00:00 70.0 121.999992 16.0 24.000000 165.000015 1.070\n",
"2018-02-27 12:00:00 205.0 303.000000 66.0 62.000000 92.000008 1.990\n",
"... ... ... ... ... ... ...\n",
"2016-03-21 04:00:00 131.0 218.999985 47.0 52.999996 29.000000 1.510\n",
"2016-11-16 13:00:00 251.0 382.500000 234.0 105.000000 23.500002 2.915\n",
"2018-06-13 06:00:00 30.0 123.000008 18.0 76.000000 14.000000 0.890\n",
"2020-05-15 15:00:00 36.0 94.000000 14.0 22.000000 144.000000 0.500\n",
"2020-10-15 21:00:00 67.0 103.000008 15.0 92.000000 12.000001 1.200\n",
"\n",
"[2451 rows x 6 columns]"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"real_rst"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"from statistics import mean\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.metrics import explained_variance_score,r2_score, median_absolute_error, mean_squared_error, mean_absolute_error\n",
"from scipy import stats\n",
"import numpy as np\n",
"from matplotlib import rcParams\n",
"config = {\"font.size\": 32,\"mathtext.fontset\":'stix'}\n",
"rcParams.update(config)\n"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"config = {\"font.size\": 32,\"mathtext.fontset\":'stix'}\n",
"rcParams.update(config)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"def scatter_out_1(x, y, label, name): ## x,y为两个需要做对比分析的两个量。\n",
" # ==========计算评价指标==========\n",
" BIAS = mean(x - y)\n",
" MSE = mean_squared_error(x, y)\n",
" RMSE = np.power(MSE, 0.5)\n",
" R2 = r2_score(x, y)\n",
" MAE = mean_absolute_error(x, y)\n",
" EV = explained_variance_score(x, y)\n",
" print('==========算法评价指标==========')\n",
" print('Explained Variance(EV):', '%.3f' % (EV))\n",
" print('Mean Absolute Error(MAE):', '%.3f' % (MAE))\n",
" print('Mean squared error(MSE):', '%.3f' % (MSE))\n",
" print('Root Mean Squard Error(RMSE):', '%.3f' % (RMSE))\n",
" print('R_squared:', '%.3f' % (R2))\n",
" # ===========Calculate the point density==========\n",
" xy = np.vstack([x, y])\n",
" z = stats.gaussian_kde(xy)(xy)\n",
" # ===========Sort the points by density, so that the densest points are plotted last===========\n",
" idx = z.argsort()\n",
" x, y, z = x[idx], y[idx], z[idx]\n",
" def best_fit_slope_and_intercept(xs, ys):\n",
" m = (((mean(xs) * mean(ys)) - mean(xs * ys)) / ((mean(xs) * mean(xs)) - mean(xs * xs)))\n",
" b = mean(ys) - m * mean(xs)\n",
" return m, b\n",
" m, b = best_fit_slope_and_intercept(x, y)\n",
" regression_line = []\n",
" for a in x:\n",
" regression_line.append((m * a) + b)\n",
" fig,ax=plt.subplots(figsize=(12,9),dpi=400)\n",
" scatter=ax.scatter(x,y,marker='o',c=z*100,s=15,label='LST',cmap='Spectral_r')\n",
" cbar=plt.colorbar(scatter,shrink=1,orientation='vertical',extend='both',pad=0.015,aspect=30,label='Frequency')\n",
" min_value = min(min(x), min(y))\n",
" max_value = max(max(x), max(y))\n",
"\n",
" plt.plot([min_value-5,max_value+5],[min_value-5,max_value+5],'black',lw=1.5) # 画的1:1线线的颜色为black线宽为0.8\n",
" plt.plot(x,regression_line,'red',lw=1.5) # 预测与实测数据之间的回归线\n",
" plt.axis([min_value-5,max_value+5,min_value-5,max_value+5]) # 设置线的范围\n",
" plt.xlabel('Measured %s' % label)\n",
" plt.ylabel('Retrived %s' % label)\n",
" # plt.xticks(fontproperties='Times New Roman')\n",
" # plt.yticks(fontproperties='Times New Roman')\n",
"\n",
"\n",
" plt.text(min_value-5 + (max_value-min_value) * 0.05, int(max_value * 0.95), '$N=%.f$' % len(y)) # text的位置需要根据x,y的大小范围进行调整。\n",
" plt.text(min_value-5 + (max_value-min_value) * 0.05, int(max_value * 0.88), '$R^2=%.2f$' % R2)\n",
" plt.text(min_value-5 + (max_value-min_value) * 0.05, int(max_value * 0.81), '$RMSE=%.2f$' % RMSE)\n",
" plt.xlim(min_value-5,max_value+5) # 设置x坐标轴的显示范围\n",
" plt.ylim(min_value-5,max_value+5) # 设置y坐标轴的显示范围\n",
" # file_name = name.split('(')[0].strip()\n",
" plt.savefig(f'./figure/{name}.png',dpi=800,bbox_inches='tight',pad_inches=0)\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"==========算法评价指标==========\n",
"Explained Variance(EV): 0.941\n",
"Mean Absolute Error(MAE): 12.019\n",
"Mean squared error(MSE): 339.601\n",
"Root Mean Squard Error(RMSE): 18.428\n",
"R_squared: 0.939\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 4800x3600 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"scatter_out_1(real_rst['PM10'].values, pred_rst['PM10'].values, label='$PM_{10}\\ (\\mu g/m^3$)', name='PM10')"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"==========算法评价指标==========\n",
"Explained Variance(EV): 0.956\n",
"Mean Absolute Error(MAE): 6.231\n",
"Mean squared error(MSE): 108.622\n",
"Root Mean Squard Error(RMSE): 10.422\n",
"R_squared: 0.956\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 4800x3600 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"scatter_out_1(real_rst['PM2.5'].values, pred_rst['PM2.5'].values, label='$PM_{2.5} (\\mu g/m^3$)', name='PM25')"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"==========算法评价指标==========\n",
"Explained Variance(EV): 0.957\n",
"Mean Absolute Error(MAE): 6.621\n",
"Mean squared error(MSE): 135.481\n",
"Root Mean Squard Error(RMSE): 11.640\n",
"R_squared: 0.957\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 4800x3600 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"scatter_out_1(real_rst['SO2'].values, pred_rst['SO2'].values, label='$SO_2\\ (\\mu g/m^3)$', name='SO2')"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"==========算法评价指标==========\n",
"Explained Variance(EV): 0.956\n",
"Mean Absolute Error(MAE): 3.864\n",
"Mean squared error(MSE): 29.689\n",
"Root Mean Squard Error(RMSE): 5.449\n",
"R_squared: 0.953\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAEjAAAAyVCAYAAAAv6W6kAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAD2EAAA9hAHVrK90AAEAAElEQVR4nOzdeZyWdb0//teFAy4IhIYpJpanBeO0gEuER4lShBbzW6c6fcE2NRTre1pOi9jpnOMJtGxfNKBsETk1UxNpBxxxlKFIbMHTIm1mRgtjmRMJbjPO9fvDfp0GWWaY+55rBp7Px2MePu7P5/q8r9dMOHcO97zuoizLAAAAAAAAAAAAAAAAAAAAAAAA9MWwqgMAAAAAAAAAAAAAAAAAAAAAAABDjwIjAAAAAAAAAAAAAAAAAAAAAACgzxQYAQAAAAAAAAAAAAAAAAAAAAAAfabACAAAAAAAAAAAAAAAAAAAAAAA6DMFRgAAAAAAAAAAAAAAAAAAAAAAQJ8pMAIAAAAAAAAAAAAAAAAAAAAAAPpMgREAAAAAAAAAAAAAAAAAAAAAANBnCowAAAAAAAAAAAAAAAAAAAAAAIA+U2AEAAAAAAAAAAAAAAAAAAAAAAD0mQIjAAAAAAAAAAAAAAAAAAAAAACgzxQYAQAAAAAAAAAAAAAAAAAAAAAAfabACAAAAAAAAAAAAAAAAAAAAAAA6DMFRgAAAAAAAAAAAAAAAAAAAAAAQJ8pMAIAAAAAAAAAAAAAAAAAAAAAAPpMgREAAAAAAAAAAAAAAAAAAAAAANBnCowAAAAAAAAAAAAAAAAAAAAAAIA+U2AEAAAAAAAAAAAAAAAAAAAAAAD0mQIjAAAAAAAAAAAAAAAAAAAAAACgzxQYAQAAAAAAAAAAAAAAAAAAAAAAfabACAAAAAAAAAAAAAAAAAAAAAAA6DMFRgAAAAAAAAAAAAAAAAAAAAAAQJ8pMAIAAAAAAAAAAAAAAAAAAAAAAPpMgREAAAAAAAAAAAAAAAAAAAAAANBnCowAAAAAAAAAAAAAAAAAAAAAAIA+U2AEAAAAAAAAAAAAAAAAAAAAAAD0mQIjAAAAAAAAAAAAAAAAAAAAAACgzxQYAQAAAAAAAAAAAAAAAAAAAAAAfabACAAAAAAAAAAAAAAAAAAAAAAA6DMFRgAAAAAAAAAAAAAAAAAAAAAAQJ8pMAIAAAAAAAAAAAAAAAAAAAAAAPpMgREAAAAAAAAAAAAAAAAAAAAAANBnCowAAAAAAAAAAAAAAAAAAGAAFUVRVJ0BAACgFhQYAQAAAAAAAAAAAAAAAADAwJpTdQAAAIBaKMqyrDoDAAAAAAAAAAAAAAAAAADsE4qiGJ7kd0meXpZle9V5AAAA+mNY1QEAAAAAAAAAAAAAAAAAAGAf8vwkj03y0qqDAAAA9JcCIwAAAAAAAAAAAAAAAAAAGDiv+Ms/X15pCgAAgBooyrKsOgMAAHugKIojkrxou+U7ktxXQRwAAAAAAAAAAAAAAGDwOyjJMdutfb0sy81VhNkXFUUxPMldScYm6U5yZFmW7dWmAgAA2HMNVQcAAGCPvSjJkqpDAAAAAAAAAAAAAAAAQ9obkiytOsQ+5Pl5pLwoSYYleWmSy6uLAwAA0D/Dqg4AAAAAAAAAAAAAAAAAAAD7iFds9/jllaQAAACokYaqAwAAAAAAAAAAAAAAAAAAQA2VVQfYkc7OzowdOzYdHR1/XRs2bNhz29vby8MPP7zCZLtUVB0AAAAY3IZVHQAAAAAAAAAAAAAAAAAAAPZ2ra2tPcqLkqS7uzvNzc0VJQIAAOi/hqoDAACwx+7YfmHx4sV5+tOfXkUWAAAAAAAAAAAAAACgYl1dXfnABz6Qa665pi/HHvX7CdRHY2PjDtebmpoyf/78AU4DAABQG0VZllVnAABgDxRF8Zwk3/rbtW9961t5znOeU1EiAAAAAAAAAAAAAACgKvfee29e+cpXZtWqVX09Oq0sy5vrkalCg+6XZzs7O/O4xz0uHR0dj9obNmxYfvvb3+bwww+vINluFVUHAAAABrdhVQcAAAAAAAAAAAAAAAAAAGDPbd68OdOnT9+T8iIGSGtr6w7Li5Kku7s7zc3NA5wIAACgNhQYAQAAAAAAAAAAAAAAAAAMUbfddlumTp2aW2+9teoo7EJjY+Mu95uamgYoCQAAQG0pMAIAAAAAAAAAAAAAAAAAGIJuuummnHTSSdm0aVPVUdiFzs7OrFixYpfXrF27Nu3t7QMTCAAAoIYUGAEAAAAAAAAAAAAAAAAADDFXX311Tj/99GzZsqVX1w8fPjz/9m//VudU7Ehra2s6Ojp6rE3JuB6Pu7u709zcPJCxAAAAakKBEQAAAAAAAAAAAAAAAADAEFGWZRYtWpS5c+ems7OzV2fGjBmTlpaWnH766XVOx440Njb2eFwkmZOnZGQaeqw3NTUNYCoAAIDaUGAEAAAAAAAAAAAAAAAAADAEdHV1Zd68ebnooot6fWbChAlZt25dZsyYUcdk7ExnZ2dWrFjRY21ixmZssX+mZFyP9bVr16a9vX0A0wEAAPSfAiMAAAAAAAAAAAAAAAAAgEHu3nvvzRlnnJGlS5f2+szkyZOzfv36TJo0qY7J2JXW1tZ0dHT0WDs+hyVJTvjLP/9/3d3daW5uHrBsAAAAtaDACAAAAAAAAAAAAAAAAABgENu8eXOmT5+eVatW9frM7Nmzs3bt2hxxxBF1TMbuNDY29nhcJDku45IkEzM2I9PQY7+pqWmgogEAANSEAiMAAAAAAAAAAAAAAAAAgEHqtttuy9SpU3Prrbf2+sy5556ba665JgcffHAdk7E7nZ2dWbFiRY+1iRmb0cWIJElDMSxT/lJm9P9bu3Zt2tvbByoiAABAvykwAgAAAAAAAAAAAAAAAAAYhG666aacdNJJ2bRpU6/PLFq0KIsXL05DQ0Mdk9Ebra2t6ejo6LF2fA7r8fiE7R53d3enubm57tkAAABqRYERAAAAAAAAAAAAAAAAAMAgc/XVV+f000/Pli1benX98OHDs2zZslx44YUpiqLO6eiNxsbGHo+LJMdlXI+1iRmbkelZNtXU1FTvaAAAADWjwAgAAAAAAAAAAAAAAAAAYJAoyzKLFi3K3Llz09nZ2aszY8aMSUtLS+bMmVPndPRWZ2dnVqxY0WNtYsZmdDGix1pDMSxTtis1Wrt2bdrb2+sdEQAAoCYUGAEAAAAAAAAAAAAAAAAADAJdXV2ZN29eLrrool6fmTBhQtatW5cZM2bUMRl91dramo6Ojh5rx+ewHV57wnbr3d3daW5urls2AACAWlJgBAAAAAAAAAAAAAAAAABQsXvvvTdnnHFGli5d2uszkydPzvr16zNp0qQ6JmNPNDY29nhcJDku43Z47cSMzcg09FhramqqVzQAAICaUmAEAAAAAAAAAAAAAAAAAFChzZs3Z/r06Vm1alWvz8yePTtr167NEUccUcdk7InOzs6sWLGix9rEjM3oYsQOr28ohmXKduVGa9euTXt7e70iAgAA1IwCIwAAAAAAAAAAAAAAAACAitx2222ZOnVqbr311l6fOffcc3PNNdfk4IMPrmMy9lRra2s6Ojp6rB2fw3Z55oTt9ru7u9Pc3FzzbAAAALWmwAgAAAAAAAAAAAAAAAAAoAI33XRTTjrppGzatKnXZxYtWpTFixenoaGhjsnoj8bGxh6PiyTHZdwuz0zM2IxMz/9Nm5qaah0NAACg5hQYAQAAAAAAAAAAAAAAAAAMsKuvvjqnn356tmzZ0qvrhw8fnmXLluXCCy9MURR1Tsee6uzszIoVK3qsTczYjC5G7PJcQzEsU7YrOVq7dm3a29trHREAAKCmFBgBAAAAAAAAAAAAAAAAAAyQsiyzaNGizJ07N52dnb06M2bMmLS0tGTOnDl1Tkd/tba2pqOjo8fa8TmsV2dP2O667u7uNDc31ywbAABAPSgwAgAAAAAAAAAAAAAAAAAYAF1dXZk3b14uuuiiXp+ZMGFC1q1blxkzZtQxGbXS2NjY43GR5LiM69XZiRmbkWnosdbU1FSraAAAAHWhwAgAAAAAAAA
"text/plain": [
"<Figure size 4800x3600 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"scatter_out_1(real_rst['NO2'].values, pred_rst['NO2'].values, label='$NO_2\\ (\\mu g/m^3)$', name='NO2')"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"==========算法评价指标==========\n",
"Explained Variance(EV): 0.981\n",
"Mean Absolute Error(MAE): 4.626\n",
"Mean squared error(MSE): 49.268\n",
"Root Mean Squard Error(RMSE): 7.019\n",
"R_squared: 0.980\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 4800x3600 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"scatter_out_1(real_rst['O3'], pred_rst['O3'], label='$O_3 \\ (\\mu g/m^3)$', name='O3')"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"def scatter_out_2(x, y, name): ## x,y为两个需要做对比分析的两个量。\n",
" # ==========计算评价指标==========\n",
" BIAS = mean(x - y)\n",
" MSE = mean_squared_error(x, y)\n",
" RMSE = np.power(MSE, 0.5)\n",
" R2 = r2_score(x, y)\n",
" MAE = mean_absolute_error(x, y)\n",
" EV = explained_variance_score(x, y)\n",
" print('==========算法评价指标==========')\n",
" print('Explained Variance(EV):', '%.3f' % (EV))\n",
" print('Mean Absolute Error(MAE):', '%.3f' % (MAE))\n",
" print('Mean squared error(MSE):', '%.3f' % (MSE))\n",
" print('Root Mean Squard Error(RMSE):', '%.3f' % (RMSE))\n",
" print('R_squared:', '%.3f' % (R2))\n",
" # ===========Calculate the point density==========\n",
" xy = np.vstack([x, y])\n",
" z = stats.gaussian_kde(xy)(xy)\n",
" # ===========Sort the points by density, so that the densest points are plotted last===========\n",
" idx = z.argsort()\n",
" x, y, z = x[idx], y[idx], z[idx]\n",
" def best_fit_slope_and_intercept(xs, ys):\n",
" m = (((mean(xs) * mean(ys)) - mean(xs * ys)) / ((mean(xs) * mean(xs)) - mean(xs * xs)))\n",
" b = mean(ys) - m * mean(xs)\n",
" return m, b\n",
" m, b = best_fit_slope_and_intercept(x, y)\n",
" regression_line = []\n",
" for a in x:\n",
" regression_line.append((m * a) + b)\n",
" fig,ax=plt.subplots(figsize=(12,9),dpi=400)\n",
" scatter=ax.scatter(x,y,marker='o',c=z*100,s=15,label='LST',cmap='Spectral_r')\n",
" cbar=plt.colorbar(scatter,shrink=1,orientation='vertical',extend='both',pad=0.015,aspect=30,label='frequency')\n",
"\n",
" plt.plot([0, 6], [0, 6],'black',lw=1.5) # 画的1:1线线的颜色为black线宽为0.8\n",
" plt.plot(x,regression_line,'red',lw=1.5) # 预测与实测数据之间的回归线\n",
" plt.axis([0,6,0,6]) # 设置线的范围\n",
" plt.xlabel(f'Measured {name}')\n",
" plt.ylabel(f'Retrived {name}')\n",
" # plt.xticks(fontproperties='Times New Roman')\n",
" # plt.yticks(fontproperties='Times New Roman')\n",
"\n",
"\n",
" plt.text(0.3, 5.5, '$N=%.f$' % len(y)) # text的位置需要根据x,y的大小范围进行调整。\n",
" plt.text(0.3, 5.0, '$R^2=%.2f$' % R2)\n",
" plt.text(0.3, 4.5, '$RMSE=%.2f$' % RMSE)\n",
" plt.xlim(0, 6) # 设置x坐标轴的显示范围\n",
" plt.ylim(0, 6) # 设置y坐标轴的显示范围\n",
" file_name = name.split('(')[0].strip()\n",
" plt.savefig(f'./figure/CO.png',dpi=800,bbox_inches='tight',pad_inches=0)\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"==========算法评价指标==========\n",
"Explained Variance(EV): 0.902\n",
"Mean Absolute Error(MAE): 0.700\n",
"Mean squared error(MSE): 7.938\n",
"Root Mean Squard Error(RMSE): 2.818\n",
"R_squared: 0.902\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.\n",
"findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 4800x3600 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"scatter_out_2(np.expm1(real_rst['CO'].values), np.expm1(pred_rst['CO'].values), name='$CO \\ (mg/m^3)$')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "py37",
"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.13"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "e35e91facd2b4cfa08991d112893a00c4d14d1c91c990d1b62f3056d14d2f283"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}