1036 lines
209 KiB
Plaintext
1036 lines
209 KiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 1,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"C:\\Users\\asus\\AppData\\Roaming\\Python\\Python39\\site-packages\\pandas\\core\\computation\\expressions.py:21: UserWarning: Pandas requires version '2.8.4' or newer of 'numexpr' (version '2.8.3' currently installed).\n",
|
|||
|
" from pandas.core.computation.check import NUMEXPR_INSTALLED\n",
|
|||
|
"C:\\Users\\asus\\AppData\\Roaming\\Python\\Python39\\site-packages\\pandas\\core\\arrays\\masked.py:60: UserWarning: Pandas requires version '1.3.6' or newer of 'bottleneck' (version '1.3.5' currently installed).\n",
|
|||
|
" from pandas.core import (\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from math import sqrt\n",
|
|||
|
"from numpy import concatenate\n",
|
|||
|
"from matplotlib import pyplot\n",
|
|||
|
"import pandas as pd\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"from sklearn.preprocessing import MinMaxScaler\n",
|
|||
|
"from sklearn.preprocessing import LabelEncoder\n",
|
|||
|
"from sklearn.metrics import mean_squared_error\n",
|
|||
|
"from tensorflow.keras import Sequential\n",
|
|||
|
"\n",
|
|||
|
"from tensorflow.keras.layers import Dense\n",
|
|||
|
"from tensorflow.keras.layers import LSTM\n",
|
|||
|
"from tensorflow.keras.layers import Dropout\n",
|
|||
|
"from sklearn.model_selection import train_test_split\n",
|
|||
|
"import matplotlib.pyplot as plt"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"这段代码是一个函数 time_series_to_supervised,它用于将时间序列数据转换为监督学习问题的数据集。下面是该函数的各个部分的含义:\n",
|
|||
|
"\n",
|
|||
|
"data: 输入的时间序列数据,可以是列表或2D NumPy数组。\n",
|
|||
|
"n_in: 作为输入的滞后观察数,即用多少个时间步的观察值作为输入。默认值为96,表示使用前96个时间步的观察值作为输入。\n",
|
|||
|
"n_out: 作为输出的观测数量,即预测多少个时间步的观察值。默认值为10,表示预测未来10个时间步的观察值。\n",
|
|||
|
"dropnan: 布尔值,表示是否删除具有NaN值的行。默认为True,即删除具有NaN值的行。\n",
|
|||
|
"函数首先检查输入数据的维度,并初始化一些变量。然后,它创建一个新的DataFrame对象 df 来存储输入数据,并保存原始的列名。接着,它创建了两个空列表 cols 和 names,用于存储新的特征列和列名。\n",
|
|||
|
"\n",
|
|||
|
"接下来,函数开始构建特征列和对应的列名。首先,它将原始的观察序列添加到 cols 列表中,并将其列名添加到 names 列表中。然后,它依次将滞后的观察序列添加到 cols 列表中,并构建相应的列名,格式为 (原始列名)(t-滞后时间)。这样就创建了输入特征的部分。\n",
|
|||
|
"\n",
|
|||
|
"接着,函数开始构建输出特征的部分。它依次将未来的观察序列添加到 cols 列表中,并构建相应的列名,格式为 (原始列名)(t+未来时间)。\n",
|
|||
|
"\n",
|
|||
|
"最后,函数将所有的特征列拼接在一起,构成一个新的DataFrame对象 agg。如果 dropnan 参数为True,则删除具有NaN值的行。最后,函数返回处理后的数据集 agg。"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 2,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def time_series_to_supervised(data, n_in=96, n_out=10,dropnan=True):\n",
|
|||
|
" \"\"\"\n",
|
|||
|
" :param data:作为列表或2D NumPy数组的观察序列。需要。\n",
|
|||
|
" :param n_in:作为输入的滞后观察数(X)。值可以在[1..len(数据)]之间可选。默认为1。\n",
|
|||
|
" :param n_out:作为输出的观测数量(y)。值可以在[0..len(数据)]之间。可选的。默认为1。\n",
|
|||
|
" :param dropnan:Boolean是否删除具有NaN值的行。可选的。默认为True。\n",
|
|||
|
" :return:\n",
|
|||
|
" \"\"\"\n",
|
|||
|
" n_vars = 1 if type(data) is list else data.shape[1]\n",
|
|||
|
" df = pd.DataFrame(data)\n",
|
|||
|
" origNames = df.columns\n",
|
|||
|
" cols, names = list(), list()\n",
|
|||
|
" cols.append(df.shift(0))\n",
|
|||
|
" names += [('%s' % origNames[j]) for j in range(n_vars)]\n",
|
|||
|
" n_in = max(0, n_in)\n",
|
|||
|
" for i in range(n_in, 0, -1):\n",
|
|||
|
" time = '(t-%d)' % i\n",
|
|||
|
" cols.append(df.shift(i))\n",
|
|||
|
" names += [('%s%s' % (origNames[j], time)) for j in range(n_vars)]\n",
|
|||
|
" n_out = max(n_out, 0)\n",
|
|||
|
" for i in range(1, n_out+1):\n",
|
|||
|
" time = '(t+%d)' % i\n",
|
|||
|
" cols.append(df.shift(-i))\n",
|
|||
|
" names += [('%s%s' % (origNames[j], time)) for j in range(n_vars)]\n",
|
|||
|
" agg = pd.concat(cols, axis=1)\n",
|
|||
|
" agg.columns = names\n",
|
|||
|
" if dropnan:\n",
|
|||
|
" agg.dropna(inplace=True)\n",
|
|||
|
" return agg"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 3,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
" Temp Humidity GHI DHI Rainfall Power\n",
|
|||
|
"0 19.779453 40.025826 3.232706 1.690531 0.0 0.0\n",
|
|||
|
"1 19.714937 39.605961 3.194991 1.576346 0.0 0.0\n",
|
|||
|
"2 19.549330 39.608631 3.070866 1.576157 0.0 0.0\n",
|
|||
|
"3 19.405870 39.680702 3.038623 1.482489 0.0 0.0\n",
|
|||
|
"4 19.387363 39.319881 2.656474 1.134153 0.0 0.0\n",
|
|||
|
"(104256, 6)\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# 加载数据\n",
|
|||
|
"path1 = r\"D:\\project\\小论文1-基于ICEEMDAN分解的时序高维变化的短期光伏功率预测模型\\CEEMAN-PosConv1dbiLSTM-LSTM\\模型代码流程\\data6.csv\"#数据所在路径\n",
|
|||
|
"#我的数据是excel表,若是csv文件用pandas的read_csv()函数替换即可。\n",
|
|||
|
"datas1 = pd.DataFrame(pd.read_csv(path1))\n",
|
|||
|
"#我只取了data表里的第3、23、16、17、18、19、20、21、27列,如果取全部列的话这一行可以去掉\n",
|
|||
|
"# data1 = datas1.iloc[:,np.r_[3,23,16:22,27]]\n",
|
|||
|
"data1=datas1.interpolate()\n",
|
|||
|
"values1 = data1.values\n",
|
|||
|
"print(data1.head())\n",
|
|||
|
"print(data1.shape)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 4,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# data2= data1.drop(['date'], axis = 1)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 5,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# # 获取重构的原始数据\n",
|
|||
|
"# # 获取重构的原始数据\n",
|
|||
|
"# # 获取重构的原始数据\n",
|
|||
|
"path_re = r\"D:\\project\\小论文1-基于ICEEMDAN分解的时序高维变化的短期光伏功率预测模型\\CEEMAN-PosConv1dbiLSTM-LSTM\\模型代码流程\\完整的模型代码流程\\iceemdan_reconstructed_data_low.csv\"#数据所在路径\n",
|
|||
|
"# #我的数据是excel表,若是csv文件用pandas的read_csv()函数替换即可。\n",
|
|||
|
"data_re = pd.DataFrame(pd.read_csv(path_re))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 6,
|
|||
|
"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>column_name</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>0</th>\n",
|
|||
|
" <td>1.460307</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1</th>\n",
|
|||
|
" <td>1.460504</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2</th>\n",
|
|||
|
" <td>1.460698</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3</th>\n",
|
|||
|
" <td>1.460886</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4</th>\n",
|
|||
|
" <td>1.461071</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>...</th>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>104251</th>\n",
|
|||
|
" <td>1.663370</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>104252</th>\n",
|
|||
|
" <td>1.664516</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>104253</th>\n",
|
|||
|
" <td>1.665650</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>104254</th>\n",
|
|||
|
" <td>1.666774</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>104255</th>\n",
|
|||
|
" <td>1.667887</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"<p>104256 rows × 1 columns</p>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" column_name\n",
|
|||
|
"0 1.460307\n",
|
|||
|
"1 1.460504\n",
|
|||
|
"2 1.460698\n",
|
|||
|
"3 1.460886\n",
|
|||
|
"4 1.461071\n",
|
|||
|
"... ...\n",
|
|||
|
"104251 1.663370\n",
|
|||
|
"104252 1.664516\n",
|
|||
|
"104253 1.665650\n",
|
|||
|
"104254 1.666774\n",
|
|||
|
"104255 1.667887\n",
|
|||
|
"\n",
|
|||
|
"[104256 rows x 1 columns]"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 6,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"data_re"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 7,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAIjCAYAAADvBuGTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAD9iUlEQVR4nOydd5jUxP/H33v9OHqvAoJIlaaoKE1BioKggqJ+KYKKiqiIBRt2REHFiqgI9gZiQUEREcQuYEWkivQOd8fBcXf5/TG/2Z3MTpJJNtuOz+t57rndbMokmUzmPZ8yAcMwDBAEQRAEQRAEQRARkRLvAhAEQRAEQRAEQZQGSFwRBEEQBEEQBEH4AIkrgiAIgiAIgiAIHyBxRRAEQRAEQRAE4QMkrgiCIAiCIAiCIHyAxBVBEARBEARBEIQPkLgiCIIgCIIgCILwARJXBEEQBEEQBEEQPkDiiiAIgiAIgiAIwgdIXBEE4TuBQAD33ntvvIuhpEGDBjjvvPPiXYxjmq5du6Jr166eth02bBgaNGjga3lkZs6ciUAggI0bN0b1OG5I5GeKiJzFixcjEAhg8eLFEe8rEeuvSNeuXdGyZUvH9TZu3IhAIICZM2e6PgbfdvLkyR5KSBCRQeKKIKLAunXrcPXVV+P4449HVlYWypcvjzPOOANTp05FQUFBvItH+MihQ4dw7733+tIpSnQ++eQT9OrVC1WqVEFWVhaaNGmCcePGYc+ePfEuGnEM8PDDD2Pu3LnHfBmiyZtvvoknn3wy3sUgiKQmLd4FIIjSxrx58zBw4EBkZmZiyJAhaNmyJQoLC/HNN9/glltuwZ9//onp06fHu5hRpaCgAGlpx0bzcujQIdx3330A4NkakwyMGzcOU6ZMQevWrXHbbbehcuXKWL58OZ555hm8/fbb+PLLL3HiiSdq7evzzz/3XI4XX3wRJSUlnrcnkpeHH34YF110Efr3739MlyGavPnmm/jjjz9w4403xrsoqF+/PgoKCpCenh7vohCEK46N3g9BxIgNGzbgkksuQf369bFo0SLUqlUr+Nt1112HtWvXYt68eXEsYfQoKSlBYWEhsrKykJWVFe/iED7y1ltvYcqUKbj44ovxxhtvIDU1NfjbsGHD0K1bNwwcOBDLly+3FdWHDh1CmTJlkJGR4bks1NFyx+HDh5GRkYGUlGPLUSU/Px85OTnxLgYRAYFAgN4lRFJybLW2BBFlHn30UeTl5eHll182CStO48aNccMNNwS/FxUV4YEHHkCjRo2QmZmJBg0a4I477sCRI0dM2/E4ocWLF+Pkk09GdnY2WrVqFXRFmzNnDlq1aoWsrCy0b98eK1asMG0/bNgwlC1bFuvXr0fPnj2Rk5OD2rVr4/7774dhGKZ1J0+ejI4dO6JKlSrIzs5G+/bt8f7774edSyAQwOjRo/HGG2+gRYsWyMzMxPz584O/ifEhubm5uPHGG9GgQQNkZmaievXq6NGjB5YvX27a53vvvYf27dsjOzsbVatWxeWXX44tW7Yoz2XLli3o378/ypYti2rVqmHcuHEoLi62uDPhfP7552jTpg2ysrLQvHlzzJkzJ2yd/fv348Ybb0S9evWQmZmJxo0bY9KkSUHLycaNG1GtWjUAwH333YdAIBA8948++giBQAC//fZbcH+zZ89GIBDABRdcYDpOs2bNcPHFF5uWvf7668FrUblyZVxyySX477//wsr4ww8/oFevXqhQoQLKlCmDLl26YNmyZaZ17r33XgQCAaxduxbDhg1DxYoVUaFCBQwfPhyHDh1yvFb33XcfKlWqhOnTp5uEFQB06NABt912G37//XdTPeFxFb/88gs6d+6MMmXK4I477gj+Jlv5/v33X/Tr1w85OTmoXr06brrpJixYsCAsDkWOuRJjK6ZPnx58lk455RT89NNPpmP89ttvGDZsWNBdt2bNmrjiiis8uzXq7s/N9T9y5AhuuukmVKtWDeXKlUO/fv2wefNmrfLwuJ23334bd911F+rUqYMyZcrg4MGDAPTqCgBs2bIFI0aMQO3atZGZmYmGDRvimmuuQWFhYXCd9evXY+DAgahcuTLKlCmD0047LWzgiJfn3XffxUMPPYS6desiKysLZ599NtauXWtad82aNbjwwgtRs2ZNZGVloW7durjkkktw4MABAKxNyc/Px6xZs4LP2bBhw0zX96+//sKll16KSpUq4cwzzwRgHd+nit0rKSnB1KlTg21ptWrV0KtXL/z888+OZeDX7YorrkCNGjWQmZmJFi1aYMaMGWHH3rx5M/r372+q63Kbr8uff/6Js846C9nZ2ahbty4efPBBpWX3ww8/xLnnnhu8p40aNcIDDzxgajO7du2KefPm4d9//w2eH79GhYWFuOeee9C+fXtUqFABOTk56NSpE7766itP5QaAv/76C926dUOZMmVQp04dPProo6bfrWKu3nvvPTRv3hxZWVlo2bIlPvjgA9tYTKd2gSD8hixXBOEjH3/8MY4//nh07NhRa/2RI0di1qxZuOiii3DzzTfjhx9+wMSJE7Fq1Sp88MEHpnXXrl2LSy+9FFdffTUuv/xyTJ48GX379sW0adNwxx134NprrwUATJw4EYMGDcLq1atNo9XFxcXo1asXTjvtNDz66KOYP38+JkyYgKKiItx///3B9aZOnYp+/frhsssuQ2FhId5++20MHDgQn3zyCc4991xTmRYtWoR3330Xo0ePRtWqVS1fbqNGjcL777+P0aNHo3nz5tizZw+++eYbrFq1Cu3atQPAgrCHDx+OU045BRMnTsSOHTswdepULFu2DCtWrEDFihVN59KzZ0+ceuqpmDx5MhYuXIgpU6agUaNGuOaaaxyv+5o1a3DxxRdj1KhRGDp0KF555RUMHDgQ8+fPR48ePQAwK0uXLl2wZcsWXH311TjuuOPw7bffYvz48di2bRuefPJJVKtWDc8//zyuueYaDBgwICiaTjrpJNStWxeBQABLlizBSSedBABYunQpUlJS8M033wTLsmvXLvz9998YPXp0cNlDDz2Eu+++G4MGDcLIkSOxa9cuPP300+jcubPpWixatAi9e/dG+/btMWHCBKSkpOCVV17BWWedhaVLl6JDhw6m8x40aBAaNmyIiRMnYvny5XjppZdQvXp1TJo0yfZarV69GsOGDUP58uWV6wwZMgQTJkzAJ598gksuuSS4fM+ePejduzcuueQSXH755ahRo4Zy+/z8fJx11lnYtm0bbrjhBtSsWRNvvvmmq47bm2++idzcXFx99dUIBAJ49NFHccEFF2D9+vVBa9cXX3yB9evXY/jw4ahZs2bQRffPP//E999/j0AgoH08L/vTuf4jR47E66+/jksvvRQdO3bEokWLwp47Jx544AFkZGRg3LhxOHLkCDIyMrTrytatW9GhQwfs378fV111FZo2bYotW7bg/fffx6FDh5CRkYEdO3agY8eOOHToEMaMGYMqVapg1qxZ6NevH95//30MGDDAVJ5HHnkEKSkpGDduHA4cOIBHH30Ul112GX744QcArOPes2dPHDlyBNdffz1q1qyJLVu24JNPPsH+/ftRoUIFvPbaaxg5ciQ6dOiAq666CgDQqFEj03EGDhyIE044AQ8//HDYoJEOI0aMwMyZM9G7d2+MHDkSRUVFWLp0Kb7//nucfPLJtmXYsWMHTjvttOCgU7Vq1fDZZ59hxIgROHjwYNDNrqCgAGeffTY2bdqEMWPGoHbt2njttdewaNEi1+Xdvn07unXrhqKiItx+++3IycnB9OnTkZ2dHbbuzJkzUbZsWYwdOxZly5bFokWLcM899+DgwYN47LHHAAB33nknDhw4gM2bN+OJJ54AAJQtWxYAcPDgQbz00ksYPHgwrrzySuTm5uLll19Gz5498eOPP6JNmzauyr5v3z706tULF1xwAQYNGoT3338ft912G1q1aoXevXtbbjdv3jxcfPHFaNWqFSZOnIh9+/ZhxIgRqFOnjnJ9nXaBIHzHIAjCFw4cOGAAMM4//3yt9VeuXGkAMEaOHGlaPm7cOAOAsWjRouCy+vXrGwCMb7/9Nrh
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 1000x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"\n",
|
|||
|
"# # 假设你已经有了原始数据和重构数据\n",
|
|||
|
"# # 原始数据\n",
|
|||
|
"original_data = data1['Power'].values\n",
|
|||
|
"\n",
|
|||
|
"# # 创建时间序列(假设时间序列与数据对应)\n",
|
|||
|
"time = range(len(original_data))\n",
|
|||
|
"\n",
|
|||
|
"# # 创建画布和子图\n",
|
|||
|
"plt.figure(figsize=(10, 6))\n",
|
|||
|
"\n",
|
|||
|
"# # 绘制原始数据\n",
|
|||
|
"# plt.plot(time, original_data, label='Original Data', color='blue')\n",
|
|||
|
"\n",
|
|||
|
"# # 绘制重构数据\n",
|
|||
|
"plt.plot( data_re[:], label='Reconstructed Data', color='red')\n",
|
|||
|
"\n",
|
|||
|
"# # 添加标题和标签\n",
|
|||
|
"plt.title('Comparison between Original and reconstructed_data_high')\n",
|
|||
|
"plt.xlabel('Time')\n",
|
|||
|
"plt.ylabel('Power')\n",
|
|||
|
"plt.legend()\n",
|
|||
|
"\n",
|
|||
|
"# # 显示图形\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 8,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"data3=data1.iloc[:,:5]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 9,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
" Temp Humidity GHI DHI Rainfall column_name\n",
|
|||
|
"0 19.779453 40.025826 3.232706 1.690531 0.0 1.460307\n",
|
|||
|
"1 19.714937 39.605961 3.194991 1.576346 0.0 1.460504\n",
|
|||
|
"2 19.549330 39.608631 3.070866 1.576157 0.0 1.460698\n",
|
|||
|
"3 19.405870 39.680702 3.038623 1.482489 0.0 1.460886\n",
|
|||
|
"4 19.387363 39.319881 2.656474 1.134153 0.0 1.461071\n",
|
|||
|
"... ... ... ... ... ... ...\n",
|
|||
|
"104251 13.303740 34.212711 1.210789 0.787026 0.0 1.663370\n",
|
|||
|
"104252 13.120920 34.394939 2.142980 1.582670 0.0 1.664516\n",
|
|||
|
"104253 12.879215 35.167400 1.926214 1.545889 0.0 1.665650\n",
|
|||
|
"104254 12.915867 35.359989 1.317695 0.851529 0.0 1.666774\n",
|
|||
|
"104255 13.134816 34.500034 1.043269 0.597816 0.0 1.667887\n",
|
|||
|
"\n",
|
|||
|
"[104256 rows x 6 columns]\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"\n",
|
|||
|
"# # 创建data3和imf1_array对应的DataFrame\n",
|
|||
|
"data3_df = pd.DataFrame(data3)\n",
|
|||
|
"imf1_df = pd.DataFrame(data_re)\n",
|
|||
|
"\n",
|
|||
|
"# # 合并data3_df和imf1_df\n",
|
|||
|
"merged_df = pd.concat([data3_df, imf1_df], axis=1)\n",
|
|||
|
"\n",
|
|||
|
"# # 设置行数为35040行\n",
|
|||
|
"merged_df = merged_df.iloc[:104256]\n",
|
|||
|
"\n",
|
|||
|
"# # 打印合并后的表\n",
|
|||
|
"print(merged_df)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 10,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"(104256, 6)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 10,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"merged_df.shape"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 11,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"(104256, 6)\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# 使用MinMaxScaler进行归一化\n",
|
|||
|
"scaler = MinMaxScaler(feature_range=(0, 1))\n",
|
|||
|
"scaledData1 = scaler.fit_transform(merged_df)\n",
|
|||
|
"print(scaledData1.shape)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 12,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
" 0 1 2 3 4 5 0(t-96) \\\n",
|
|||
|
"96 0.555631 0.349673 0.190042 0.040558 0.0 0.777807 0.490360 \n",
|
|||
|
"97 0.564819 0.315350 0.211335 0.044613 0.0 0.777601 0.489088 \n",
|
|||
|
"98 0.576854 0.288321 0.229657 0.047549 0.0 0.777391 0.485824 \n",
|
|||
|
"99 0.581973 0.268243 0.247775 0.053347 0.0 0.777176 0.482997 \n",
|
|||
|
"100 0.586026 0.264586 0.266058 0.057351 0.0 0.776958 0.482632 \n",
|
|||
|
"\n",
|
|||
|
" 1(t-96) 2(t-96) 3(t-96) ... 2(t+2) 3(t+2) 4(t+2) 5(t+2) \\\n",
|
|||
|
"96 0.369105 0.002088 0.002013 ... 0.229657 0.047549 0.0 0.777391 \n",
|
|||
|
"97 0.364859 0.002061 0.001839 ... 0.247775 0.053347 0.0 0.777176 \n",
|
|||
|
"98 0.364886 0.001973 0.001839 ... 0.266058 0.057351 0.0 0.776958 \n",
|
|||
|
"99 0.365615 0.001950 0.001697 ... 0.282900 0.060958 0.0 0.776735 \n",
|
|||
|
"100 0.361965 0.001679 0.001167 ... 0.299668 0.065238 0.0 0.776508 \n",
|
|||
|
"\n",
|
|||
|
" 0(t+3) 1(t+3) 2(t+3) 3(t+3) 4(t+3) 5(t+3) \n",
|
|||
|
"96 0.581973 0.268243 0.247775 0.053347 0.0 0.777176 \n",
|
|||
|
"97 0.586026 0.264586 0.266058 0.057351 0.0 0.776958 \n",
|
|||
|
"98 0.590772 0.258790 0.282900 0.060958 0.0 0.776735 \n",
|
|||
|
"99 0.600396 0.249246 0.299668 0.065238 0.0 0.776508 \n",
|
|||
|
"100 0.607019 0.247850 0.313694 0.066189 0.0 0.776277 \n",
|
|||
|
"\n",
|
|||
|
"[5 rows x 600 columns]\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"n_steps_in =96 #历史时间长度\n",
|
|||
|
"n_steps_out=3#预测时间长度\n",
|
|||
|
"processedData1 = time_series_to_supervised(scaledData1,n_steps_in,n_steps_out)\n",
|
|||
|
"print(processedData1.head())"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 13,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"\n",
|
|||
|
"# processedData1.to_csv('processedData1.csv', index=False)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 14,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"data_x = processedData1.loc[:,'0(t-96)':'5(t-1)']\n",
|
|||
|
"data_y = processedData1.loc[:,'5(t+3)']"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 15,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"(104157, 576)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 15,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"data_x.shape"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 16,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"96 0.777176\n",
|
|||
|
"97 0.776958\n",
|
|||
|
"98 0.776735\n",
|
|||
|
"99 0.776508\n",
|
|||
|
"100 0.776277\n",
|
|||
|
" ... \n",
|
|||
|
"104248 0.897435\n",
|
|||
|
"104249 0.898092\n",
|
|||
|
"104250 0.898742\n",
|
|||
|
"104251 0.899387\n",
|
|||
|
"104252 0.900025\n",
|
|||
|
"Name: 5(t+3), Length: 104157, dtype: float64"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 16,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"data_y"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 17,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"(104157,)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 17,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"data_y.shape"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 18,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"(83325, 96, 6) (83325,) (10417, 96, 6) (10417,) (10415, 96, 6) (10415,)\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# 计算训练集、验证集和测试集的大小\n",
|
|||
|
"train_size = int(len(data_x) * 0.8)\n",
|
|||
|
"test_size = int(len(data_x) * 0.1)\n",
|
|||
|
"val_size = len(data_x) - train_size - test_size\n",
|
|||
|
"\n",
|
|||
|
"# 计算训练集、验证集和测试集的索引范围\n",
|
|||
|
"train_indices = range(train_size)\n",
|
|||
|
"val_indices = range(train_size, train_size + val_size)\n",
|
|||
|
"test_indices = range(train_size + val_size, len(data_x))\n",
|
|||
|
"\n",
|
|||
|
"# 根据索引范围划分数据集\n",
|
|||
|
"train_X1 = data_x.iloc[train_indices].values.reshape((-1, n_steps_in, scaledData1.shape[1]))\n",
|
|||
|
"val_X1 = data_x.iloc[val_indices].values.reshape((-1, n_steps_in, scaledData1.shape[1]))\n",
|
|||
|
"test_X1 = data_x.iloc[test_indices].values.reshape((-1, n_steps_in, scaledData1.shape[1]))\n",
|
|||
|
"train_y = data_y.iloc[train_indices].values\n",
|
|||
|
"val_y = data_y.iloc[val_indices].values\n",
|
|||
|
"test_y = data_y.iloc[test_indices].values\n",
|
|||
|
"\n",
|
|||
|
"# reshape input to be 3D [samples, timesteps, features]\n",
|
|||
|
"train_X = train_X1.reshape((train_X1.shape[0], n_steps_in, scaledData1.shape[1]))\n",
|
|||
|
"val_X = val_X1.reshape((val_X1.shape[0], n_steps_in, scaledData1.shape[1]))\n",
|
|||
|
"test_X = test_X1.reshape((test_X1.shape[0], n_steps_in, scaledData1.shape[1]))\n",
|
|||
|
"\n",
|
|||
|
"print(train_X.shape, train_y.shape, val_X.shape, val_y.shape, test_X.shape, test_y.shape)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 19,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"(83325, 96, 6)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 19,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"train_X1.shape"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 20,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"d:\\Anaconda3\\lib\\site-packages\\keras\\src\\layers\\rnn\\rnn.py:204: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
|
|||
|
" super().__init__(**kwargs)\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
|
|||
|
"</pre>\n"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
|
|||
|
"┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
|
|||
|
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
|
|||
|
"│ lstm (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">LSTM</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">69,120</span> │\n",
|
|||
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|||
|
"│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">129</span> │\n",
|
|||
|
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
|
|||
|
"</pre>\n"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
|
|||
|
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
|
|||
|
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
|
|||
|
"│ lstm (\u001b[38;5;33mLSTM\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m69,120\u001b[0m │\n",
|
|||
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|||
|
"│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m129\u001b[0m │\n",
|
|||
|
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">69,249</span> (270.50 KB)\n",
|
|||
|
"</pre>\n"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m69,249\u001b[0m (270.50 KB)\n"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">69,249</span> (270.50 KB)\n",
|
|||
|
"</pre>\n"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m69,249\u001b[0m (270.50 KB)\n"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
|
|||
|
"</pre>\n"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from keras.layers import GRU, Bidirectional\n",
|
|||
|
"from keras.models import Model\n",
|
|||
|
"from keras.layers import Input, Conv1D, MaxPooling1D, LSTM, Dense, Attention, Flatten\n",
|
|||
|
"import keras\n",
|
|||
|
"from keras.models import Sequential\n",
|
|||
|
"from keras.layers import LSTM, Dense\n",
|
|||
|
"\n",
|
|||
|
"# 创建模型\n",
|
|||
|
"model = Sequential()\n",
|
|||
|
"\n",
|
|||
|
"# 添加单层 LSTM\n",
|
|||
|
"model.add(LSTM(units=128, input_shape=(96, 6)))\n",
|
|||
|
"\n",
|
|||
|
"# 添加输出层\n",
|
|||
|
"model.add(Dense(1))\n",
|
|||
|
"\n",
|
|||
|
"# 编译模型\n",
|
|||
|
"model.compile(optimizer='adam', loss='mean_squared_error')\n",
|
|||
|
"\n",
|
|||
|
"# 查看模型结构\n",
|
|||
|
"model.summary()\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 21,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Epoch 1/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m45s\u001b[0m 34ms/step - loss: 0.0071 - val_loss: 1.3979e-05\n",
|
|||
|
"Epoch 2/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m45s\u001b[0m 35ms/step - loss: 1.7388e-05 - val_loss: 2.4750e-05\n",
|
|||
|
"Epoch 3/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m55s\u001b[0m 42ms/step - loss: 9.4934e-06 - val_loss: 2.6778e-06\n",
|
|||
|
"Epoch 4/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m77s\u001b[0m 59ms/step - loss: 7.7084e-06 - val_loss: 8.5239e-06\n",
|
|||
|
"Epoch 5/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m59s\u001b[0m 46ms/step - loss: 1.0285e-05 - val_loss: 7.4017e-06\n",
|
|||
|
"Epoch 6/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m64s\u001b[0m 49ms/step - loss: 4.5950e-06 - val_loss: 4.3379e-06\n",
|
|||
|
"Epoch 7/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m73s\u001b[0m 56ms/step - loss: 7.2545e-06 - val_loss: 5.1982e-05\n",
|
|||
|
"Epoch 8/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m78s\u001b[0m 60ms/step - loss: 8.1455e-06 - val_loss: 5.4236e-06\n",
|
|||
|
"Epoch 9/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m74s\u001b[0m 57ms/step - loss: 4.0686e-06 - val_loss: 1.6651e-06\n",
|
|||
|
"Epoch 10/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m69s\u001b[0m 53ms/step - loss: 4.4366e-06 - val_loss: 1.1472e-06\n",
|
|||
|
"Epoch 11/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m74s\u001b[0m 57ms/step - loss: 5.2050e-06 - val_loss: 1.9424e-07\n",
|
|||
|
"Epoch 12/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m75s\u001b[0m 58ms/step - loss: 2.9417e-06 - val_loss: 7.2545e-06\n",
|
|||
|
"Epoch 13/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m46s\u001b[0m 35ms/step - loss: 3.5579e-06 - val_loss: 8.3836e-07\n",
|
|||
|
"Epoch 14/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m61s\u001b[0m 47ms/step - loss: 2.9325e-06 - val_loss: 1.8872e-06\n",
|
|||
|
"Epoch 15/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m66s\u001b[0m 50ms/step - loss: 1.1996e-06 - val_loss: 4.9818e-07\n",
|
|||
|
"Epoch 16/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 31ms/step - loss: 1.9083e-06 - val_loss: 1.1571e-06\n",
|
|||
|
"Epoch 17/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 32ms/step - loss: 2.5659e-06 - val_loss: 2.3767e-07\n",
|
|||
|
"Epoch 18/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 32ms/step - loss: 1.9273e-06 - val_loss: 2.9061e-07\n",
|
|||
|
"Epoch 19/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 32ms/step - loss: 1.8791e-06 - val_loss: 2.7131e-06\n",
|
|||
|
"Epoch 20/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 32ms/step - loss: 2.5186e-06 - val_loss: 1.0457e-06\n",
|
|||
|
"Epoch 21/100\n",
|
|||
|
"\u001b[1m1302/1302\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 32ms/step - loss: 1.6832e-06 - val_loss: 3.1923e-06\n",
|
|||
|
"\u001b[1m326/326\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 9ms/step\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Compile and train the model\n",
|
|||
|
"model.compile(optimizer='adam', loss='mean_squared_error')\n",
|
|||
|
"from keras.callbacks import EarlyStopping, ModelCheckpoint\n",
|
|||
|
"\n",
|
|||
|
"# 定义早停机制\n",
|
|||
|
"early_stopping = EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=0, mode='min')\n",
|
|||
|
"\n",
|
|||
|
"# 拟合模型,并添加早停机制和模型检查点\n",
|
|||
|
"history = model.fit(train_X, train_y, epochs=100, batch_size=64, validation_data=(test_X, test_y), \n",
|
|||
|
" callbacks=[early_stopping])\n",
|
|||
|
"# 预测\n",
|
|||
|
"lstm_pred = model.predict(test_X)\n",
|
|||
|
"# 将预测结果的形状修改为与原始数据相同的形状"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 22,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"(10415, 1)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 22,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"lstm_pred.shape"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 23,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"(10415,)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 23,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"test_y.shape"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 24,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"test_y1=test_y.reshape(10415,1)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 25,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"array([[0.7652725 ],\n",
|
|||
|
" [0.76545048],\n",
|
|||
|
" [0.76562896],\n",
|
|||
|
" ...,\n",
|
|||
|
" [0.8987423 ],\n",
|
|||
|
" [0.89938682],\n",
|
|||
|
" [0.90002507]])"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 25,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"test_y1"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 26,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"results1 = np.broadcast_to(lstm_pred, (10415, 6))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 27,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"test_y2 = np.broadcast_to(test_y1, (10415, 6))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 28,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# 反归一化\n",
|
|||
|
"inv_forecast_y = scaler.inverse_transform(results1)\n",
|
|||
|
"inv_test_y = scaler.inverse_transform(test_y2)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 29,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"array([[ 33.72769272, 79.19746393, 1078.1022603 , 503.73660832,\n",
|
|||
|
" 18.21349214, 1.43294754],\n",
|
|||
|
" [ 33.73672318, 79.21506254, 1078.35293583, 503.85368135,\n",
|
|||
|
" 18.2177282 , 1.43325785],\n",
|
|||
|
" [ 33.74577882, 79.23271021, 1078.60431013, 503.97108072,\n",
|
|||
|
" 18.22197608, 1.43356904],\n",
|
|||
|
" ...,\n",
|
|||
|
" [ 40.49954372, 92.3944846 , 1266.08128876, 591.5284767 ,\n",
|
|||
|
" 21.39007466, 1.66565038],\n",
|
|||
|
" [ 40.53224485, 92.45821275, 1266.98903575, 591.95242188,\n",
|
|||
|
" 21.40541432, 1.6667741 ],\n",
|
|||
|
" [ 40.56462766, 92.52132055, 1267.88794639, 592.37224023,\n",
|
|||
|
" 21.42060465, 1.66788688]])"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 29,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"inv_test_y"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 30,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Test RMSE: 0.003\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 1600x800 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# 计算均方根误差\n",
|
|||
|
"rmse = sqrt(mean_squared_error(inv_test_y[:,5], inv_forecast_y[:,5]))\n",
|
|||
|
"print('Test RMSE: %.3f' % rmse)\n",
|
|||
|
"#画图\n",
|
|||
|
"plt.figure(figsize=(16,8))\n",
|
|||
|
"plt.plot(inv_test_y[:,5], label='true')\n",
|
|||
|
"plt.plot(inv_forecast_y[:,5], label='pre')\n",
|
|||
|
"plt.legend()\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 31,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"mean_squared_error: 3.192312293602162e-06\n",
|
|||
|
"mean_absolute_error: 0.0016849238078766036\n",
|
|||
|
"rmse: 0.001786704310623938\n",
|
|||
|
"r2 score: 0.9997179606290253\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from sklearn.metrics import mean_squared_error, mean_absolute_error # 评价指标\n",
|
|||
|
"# 使用sklearn调用衡量线性回归的MSE 、 RMSE、 MAE、r2\n",
|
|||
|
"from math import sqrt\n",
|
|||
|
"from sklearn.metrics import mean_absolute_error\n",
|
|||
|
"from sklearn.metrics import mean_squared_error\n",
|
|||
|
"from sklearn.metrics import r2_score\n",
|
|||
|
"print('mean_squared_error:', mean_squared_error(lstm_pred, test_y)) # mse)\n",
|
|||
|
"print(\"mean_absolute_error:\", mean_absolute_error(lstm_pred, test_y)) # mae\n",
|
|||
|
"print(\"rmse:\", sqrt(mean_squared_error(lstm_pred,test_y)))\n",
|
|||
|
"print(\"r2 score:\", r2_score(inv_test_y[:], inv_forecast_y[:]))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 32,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"df1 = pd.DataFrame(inv_test_y[:,5], columns=['column_name'])"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 33,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# 指定文件路径和文件名,保存DataFrame到CSV文件中\n",
|
|||
|
"df1.to_csv('xin9996低频_test(T+3).csv', index=False)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 34,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"df2 = pd.DataFrame(inv_forecast_y[:,5], columns=['column_name'])"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 35,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# 指定文件路径和文件名,保存DataFrame到CSV文件中\n",
|
|||
|
"df2.to_csv('xin9996低频_forecast(T+3).csv', index=False)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": []
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"kernelspec": {
|
|||
|
"display_name": "base",
|
|||
|
"language": "python",
|
|||
|
"name": "python3"
|
|||
|
},
|
|||
|
"language_info": {
|
|||
|
"codemirror_mode": {
|
|||
|
"name": "ipython",
|
|||
|
"version": 3
|
|||
|
},
|
|||
|
"file_extension": ".py",
|
|||
|
"mimetype": "text/x-python",
|
|||
|
"name": "python",
|
|||
|
"nbconvert_exporter": "python",
|
|||
|
"pygments_lexer": "ipython3",
|
|||
|
"version": "3.9.13"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|