[Прогнозирование временных рядов] Прогнозирование электрической нагрузки с одной функцией на основе алгоритма нейронной сети BP, LSTM, CNN-LSTM [практическое обучение на уровне няни]

Каталог статей серии

Принципы глубокого обучения ----- линейная регрессия + метод градиентного спуска Принципы
глубокого обучения ----- алгоритм логистической регрессии
Принципы глубокого обучения ----- полносвязная нейронная сеть Принципы
глубокого обучения ----- сверточный
глубина нейронной сети Принцип обучения ----- рекуррентная нейронная сеть (RNN, LSTM)
прогнозирование временных рядов ----- на основе алгоритма нейронной сети BP, LSTM, CNN-LSTM, прогнозирование однокомпонентной электрической нагрузки прогнозирование
временных рядов (множественное -features)-- ---Многофункциональное прогнозирование электрической нагрузки на основе алгоритма нейронной сети BP, LSTM, CNN-LSTM


Серия обучающих видео

Краткое введение в глубокое обучение и реальный бой
[практическое обучение] на основе прогнозирования электрической нагрузки с одной функцией нейронной сети BP
[практическое обучение] на основе прогнозирования электрической нагрузки с одной функцией нейронной сети RNN, LSTM
[практическое обучение] на основе нейронной сети CNN-LSTM однофакторное прогнозирование потребления электроэнергии Прогнозирование нагрузки
[Многофункциональное прогнозирование] Многофункциональное прогнозирование электрической нагрузки на основе нейронной сети BP
[Многофункциональное прогнозирование] Многофункциональное прогнозирование электрической нагрузки на основе RNN и LSTM [Многофункциональное прогнозирование -функция прогнозирования
] Многофункциональное прогнозирование мощности на основе сети CNN-LSTM

Каталог статей


предисловие

  Электроэнергия - это энергия, без которой люди не могут обойтись, но электрическая энергия - это энергия, которую нелегко хранить. Большая часть современной электроэнергии в Китае вырабатывается тепловой энергией, потребление электроэнергии в регионе меняется со временем. ;Если выработка электроэнергии ниже, чем потребление энергии людьми, это приведет к нестабильности напряжения, и многие люди не смогут использовать электричество.Если выработка электроэнергии выше, чем потребление энергии людьми, из-за сложного хранения энергии, привести к перерасходу электроэнергии. Поэтому, если есть точный прогноз будущего потребления электроэнергии, можно значительно избежать потерь электроэнергии, а также можно поддерживать стабильность энергосистемы.
  На вышеизложенном фоне прогнозирование мощности всегда было относительно горячей темой научных исследований; в условиях текущего быстрого развития технологии глубокого обучения для прогнозирования мощности применялось большое количество моделей нейронных сетей с глубоким обучением, и относительно хорошее прогнозирование также был достигнут результат. Задачи прогнозирования мощности можно разделить на прогнозирование с одной функцией и прогнозирование с несколькими функциями. загрузить данные.
  В этой статье в основном используются нейронная сеть BP, RNN, нейронная сеть LSTM и нейронная сеть CNN-LSTM в глубоком обучении для прогнозирования мощности с одной функцией и сравнения моделей.


1. Анализ данных о силовой нагрузке с одной характеристикой

1.1. Отображение данных

  Набор экспериментальных данных для глубокого обучения прогнозированию однокомпонентной электрической нагрузки выглядит следующим образом:
  конкретные данные можно получить в моем курсе:
  [практическое обучение] на основе однофункционального прогнозирования электрической нагрузки нейронной сети BP
  [практическое обучение] на основе нейронной сети RNN, LSTM. Прогнозирование электрической нагрузки по одному признаку   [
  практическое обучение] Прогнозирование электрической нагрузки по одному признаку на основе нейронной сети CNN-LSTM.
вставьте сюда описание изображения
данные поступают каждые 15 минут, поэтому всего имеется 96 точек выборки. Таким образом, приведенные выше данные содержат в общей сложности 365 строк и 96 столбцов данных, каждая строка соответствует данным о мощности за один день, а каждый столбец соответствует данным о мощности в одной из точек выборки. Поскольку это исследование прогнозирования мощности с одной функцией, в данных нет других функций, кроме данных о мощности.

1.2 Анализ закона в силовой нагрузке

  Как показано на рисунке ниже, это карта отображения данных по электронагрузкам за весь 2014 год в определенном регионе.

вставьте сюда описание изображения
  Из рисунка видно, что в феврале энергопотребление в этом регионе было на самом низком уровне за весь год. В то же время общее потребление электроэнергии находится на относительно высоком уровне с июня по сентябрь, что может быть связано с погодой: жаркая погода в этот период приводит к относительно высокому потреблению электроэнергии.
  В то же время внимательно наблюдайте за энергопотреблением на картинке, оно, кажется, находится в состоянии взлетов и падений и повторяющихся циклов.Из здравого смысла жизни энергопотребление имеет сильную корреляцию с работой и отдыхом людей. Итак, давайте посмотрим, как выглядит недельная диаграмма мощности нагрузки.
вставьте сюда описание изображения
  Как показано на рисунке выше, недельное значение мощности нагрузки района отображается в виде графика, из рисунка видно, что потребление электроэнергии с понедельника по пятницу в будние дни выше, чем точечное пиковое значение, используемое на Суббота и воскресенье в дни отдыха высокие, что может свидетельствовать о том, что на работу тратится много электроэнергии. В то же время кривая электрической нагрузки на рисунке находится в циклическом состоянии, что, очевидно, показывает, что существует сильная корреляция между потреблением электроэнергии и работой и отдыхом людей, когда люди отдыхают, они поддерживают состояние очень низкого потребления электроэнергии. Когда люди работают и живут, потребление электроэнергии находится в очень высоком состоянии, и это состояние постоянно повторяется.


2. Однофункциональное прогнозирование электрической нагрузки на основе нейронной сети BP.

2.1. Нейросетевая модель BP, применяемая для прогнозирования энергетической нагрузки по одному признаку

  Прогнозирование электрической нагрузки по одному признаку по сути представляет собой регрессионную задачу, то есть выходное значение конечной нейронной сети представляет собой непрерывное неопределенное значение.
  Входные данные в нейронной сети называются признаком, который обычно представлен X, а выходные данные нейронной сети обычно представляются y; в то же время задача прогнозирования регрессии является задачей обучения с учителем, а данные имеет соответствующую метку, которая является нейронной сетью.Правильный ответ обычно представлен буквой Y. Существует определенная ошибка между выходом y нейронной сети и меткой Y. Используя эту ошибку, можно выполнить обратное распространение нейронной сети, используя обратное распространение, ошибка между выходом y и Y нейронной сети непрерывно уменьшается пока не приблизится к 0. .
  Вышеизложенное заключается в том, что модель прогнозирования нагрузки с одной функцией постоянно извлекает полезную информацию из данных, чтобы окончательный результат прогнозирования модели был близок к реальному значению.В задаче прогнозирования нагрузки с одной функцией, даже если данные о мощности вводится с функцией X, это также реальная метка данных Y, а на входе есть и только данные о мощности.По сравнению с многофункциональной задачей прогнозирования мощности, входные функции в настоящее время включают не только нагрузку на мощность данные, но также могут включать факторы, влияющие на силовую нагрузку.
  Давайте посмотрим, как нейронная сеть BP использует данные о мощности для выполнения задач прогнозирования нагрузки. Структура модели нейронной сети BP в данной задаче выглядит следующим образом:
вставьте сюда описание изображения
  Как показано на рисунке выше, это модельная схема нейронной сети BP для однофункционального прогнозирования силовой нагрузки.Из рисунка видно, что входные нейронной сети BP содержит только значение мощности нагрузки Нейронная сеть содержит два скрытых слоя, и вычисление скрытого слоя, наконец, выводит выходное значение нейронной сети через выходной слой. Это значение является прогнозируемым значением электрической нагрузки.


2.2 Предварительная обработка данных и разделение набора данных

  Ниже приведена часть предварительной обработки и разделения набора данных для прогнозирования электрической нагрузки с одной функцией:

# 获取前80%作为数据的训练集80%到90%作为验证集
# 划分训练集和验证集
train = dataset.iloc[0:int(len(a)*0.8), [0]]
val = dataset.iloc[int(len(a)*0.8):int(len(a)*0.9), [0]]


# 进行数据归一化,将数据归一化到0-1之间
scaler = MinMaxScaler(feature_range=(0, 1))
train = scaler.fit_transform(train)
val = scaler.fit_transform(val)


"""
进行训练集数据特征和对应标签的划分,其中前面96个采样点中的负荷特征
来预测第97个点的电力负荷值。
"""

# 设置训练集的特征列表和对应标签列表
x_train = []
y_train = []


# 将前96个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(train)):
    x_train.append(train[i - 96:i, :])
    y_train.append(train[i])

# 将训练集由list格式变为array格式
x_train, y_train = np.array(x_train), np.array(y_train)
x_train, y_train = np.reshape(x_train, (x_train.shape[0], 96)), np.reshape(y_train, (y_train.shape[0], 1))

# print(x_train.shape)
# print(y_train.shape)


# 设置训练集的特征列表和对应标签列表
x_val = []
y_val = []


# 将前48个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(val)):
    x_val.append(val[i - 96:i, :])
    y_val.append(val[i])

# 将训练集由list格式变为array格式
x_val, y_val = np.array(x_val), np.array(y_val)
x_val, y_val = np.reshape(x_val, (x_val.shape[0], 96)), np.reshape(y_val, (y_val.shape[0], 1))

  Прежде всего, нормализуйте полученные данные.Числа в данных имеют тенденцию быть относительно большими, что замедляет расчет временной сети.Поэтому первым шагом в прогнозировании данных является выполнение нормализованной предварительной обработки на нем.Функции нормализуются между 0-1. Поскольку экспериментальные данные представляют собой точку выборки 15 минут, то есть 96 точек выборки в день, при настройке входа и метки нейронной сети установите первые 1-96 точек выборки данных для предсказания 97-й точки, 2 -97 точек выборки, чтобы предсказать 98-ю точку, и продолжайте вращаться в соответствии с вышеуказанными правилами.
  В то же время установите список функций и меток, соответствующих обучающему набору и проверочному набору, чтобы установить соответствующие данные и метки, чтобы последующая нейронная сеть могла использовать функции данных для обучения и обратить ошибку, рассчитанную с помощью выходное значение прямого распространения и реальная метка.Обновите параметры веса нейронной сети для распространения, чтобы нейронная сеть могла постоянно получать полезную информацию из данных.


2.3 Построение модели

Ниже представлена ​​модель нейронной сети BP, построенная с использованием фреймворка глубокого обучения:

# 利用keras搭建BP神经网络,该网络隐藏层一共有两层,神经元分别为10
model = Sequential()
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1))

# 对模型进行编译,选用Adam优化器,学习率为0.01
model.compile(optimizer=keras.optimizers.Adam(0.01), loss='mean_squared_error')

# 将训练集和测试集放入网络进行训练,每批次送入的数据为512个数据,一共训练30轮,将测试集样本放入到神经网络中测试其验证集的loss值
history = model.fit(x_train, y_train, batch_size=512, epochs=30, validation_data=(x_val, y_val))

# 保存训练好的模型
model.save('BP_model.h5')

На данный момент нейронная сеть BP построена, и разделенный обучающий набор можно использовать для обучения нейронной сети.
Ниже приведен процесс обучения сети силовой нагрузки BP.Из рисунка ниже видно, что потери обучающей выборки и проверочной выборки нейронной сети постоянно уменьшаются.Очевидно, что модель нейронной сети постоянно сходится. Взгляните на итоговую диаграмму сравнения значений потерь нейронной сети BP, как показано ниже: Как показано на рисунке
вставьте сюда описание изображения
выше, на этом рисунке записаны значения потерь обучающего набора и проверочного набора в течение 30 раундов обучения Нейронная сеть BP.Очевидно, после 20 раундов Модель нейронной сети сошлась.


2.4 Предсказание модели

  Из папки проекта вы можете видеть, что файл модели, который был сохранен и обучен, был сгенерирован.Используя файл параметров модели, вы можете напрямую выполнять вывод модели по характеристикам входных данных.Сгенерированный файл модели показан на рисунок ниже: в настоящее время вы можете использовать обученную модель
вставьте сюда описание изображения
  для тестирования, чтобы проверить и денормализовать прогнозируемые значения. Конкретный код выглядит следующим образом:

# 导入训练好的模型权重文件
model = load_model("BP_model.h5")


# 测试集输入模型进行预测
predicted = model.predict(x_test)
# print(predicted.shape)
# print(test.shape)

# 将真实值标签进行反归一化操作,方便后续和真实值进行对比
real = scaler.inverse_transform(test[96:])

# 将模型预测出的值进行反归一化操作
prediction = scaler.inverse_transform(predicted)

  Сравните прогнозируемое значение с реальной меткой и нарисуйте диаграмму сравнения прогнозируемого значения и реального значения следующим образом.
вставьте сюда описание изображения
  Из сравнения на приведенном выше рисунке видно, что нейронная сеть BP оказывает определенное влияние на прогнозирование силовой нагрузки, но видно, что существуют определенные ошибки между прогнозами пиков и пиков впадин и фактическими значениями. В частности, индекс оценки модели может использоваться для оценки модели.

# 计算模型的评价指标
R2 = r2_score(real, prediction)
MAE = mean_absolute_error(real, prediction)
RMSE = np.sqrt(mean_squared_error(real, prediction))
MAPE = np.mean(np.abs((real-prediction) / prediction))

# 打印模型的评价指标
print('R2:', R2)
print('MAE:', MAE)
print('RMSE:', RMSE)
print('MAPE:', MAPE)

  Конкретный расчет индекса оценки выглядит следующим образом:
вставьте сюда описание изображения
  Для получения более подробных объяснений и полных кодов вы можете перейти на мой курс, чтобы получить:
  [практическое обучение] прогнозирование электрической нагрузки с одной функцией на основе нейронной сети BP
  [практическое обучение] одиночное - функция потребления электроэнергии на основе нейронной сети RNN и LSTM Прогнозирование нагрузки
  [практическое обучение] на основе прогнозирования электрической нагрузки с одной функцией нейронной сети CNN-LSTM


3. Однофункциональное прогнозирование электрической нагрузки на основе нейронной сети RNN и LSTM.

3.1 Модели нейронных сетей RNN и LSTM применяются для прогнозирования энергетической нагрузки с одной функцией.

  В статье подробно объясняется принцип работы модели нейронной сети RNN/LSTM.Если вы этого не понимаете, вы можете подробно прочитать эту статью.Посмотрите на записанный мной курс, который объясняет эту модель в деталь.
  [практическое обучение] На основе прогнозирования электрической нагрузки с одной функцией нейронной сети BP
  [практическое обучение] на основе прогнозирования электрической нагрузки с одной функцией нейронной сети RNN, LSTM [
  практическое обучение] на основе одиночной нейронной сети CNN-LSTM - функция прогнозирования нагрузки на электроэнергию.
  Теперь мы уже знаем. Модель нейронной сети RNN и модель нейронной сети LSTM можно представить следующей схемой:
вставьте сюда описание изображения

  Как показано на рисунке выше, этот рисунок представляет собой сравнительную диаграмму между нейронной сетью RNN и нейронной сетью LSTM, Верхний рисунок — структурная схема нейронной сети RNN, а нижний рисунок — структурная схема нейронной сети LSTM. , Очевидно, что модуль нейронной сети отличается.Кроме того, нейронная сеть RNN и нейронная сеть LSTM в основном одинаковы. Затем давайте возьмем нейронную сеть LSTM в качестве примера, чтобы увидеть, как нейронная сеть LSTM выполняет задачи прогнозирования мощности с одной функцией.
вставьте сюда описание изображения

  Как показано на рисунке выше, он показывает, как многофункциональные данные о силовой нагрузке вводятся в нейронную сеть LSTM; здесь важно подчеркнуть, что этот рисунок нельзя рассматривать в целом, а следует рассматривать слева направо, что есть, в порядке. Ввод данных для 3 временных шагов представлен на рисунке.
  Сначала введите значение данных мощности нагрузки в момент времени t-1 для расчета блока нейронной сети LSTM, а рассчитанные значения отправляются в два места соответственно.Первое используется в качестве вывода скрытого слоя нейронной сети. на следующий слой, а второй используется как выход скрытого слоя нейронной сети, как вход следующего временного шага, поэтому вход данных в момент времени t — это данные о силовой нагрузке в этот момент, а выходной результат временного шага в предыдущий раз, поэтому вход во время t включает информацию о предыдущем времени. Выход в момент времени t имеет те же два выхода, что и в момент времени t-1. Вычисление во время t+1 такое же, как вычисление во время t, поэтому вычисление продолжается в соответствии с вышеупомянутым правилом, пока вычисление не закончится в последний установленный момент времени.
  Данные в этой статье — это точка выборки каждые 15 минут, то есть в день будет производиться выборка 96 точек. Поскольку данные о мощности, проанализированные выше, периодически меняются в зависимости от работы и отдыха людей, при прогнозировании мощности по одному признаку данные о нагрузке первых 96 точек выборки берутся в качестве входных признаков модели для прогнозирования мощности 97-й выборки. пункт Загрузить данные, продолжайте прокручивать в соответствии с законом.
  Следовательно, в этом эксперименте нейронная сеть LSTM должна непрерывно вычислять 96 временных шагов, пока не будет получено окончательное прогнозируемое значение. Здесь я хочу подчеркнуть, что вычисление 96 временных шагов не означает, что существует 96 единиц вычисления, упомянутых выше, а то, что одна и та же единица повторяет вычисления 96 раз, поэтому такую ​​нейронную сеть еще называют циклической нейронной сетью. Точно так же процесс расчета нейронной сети RNN и нейронной сети LSTM одинаков.


3.2 Предварительная обработка данных и разделение набора данных

  Ниже приведена часть предварительной обработки и разделения набора данных для прогнозирования электрической нагрузки:

# 进行数据归一化,将数据归一化到0-1之间
scaler = MinMaxScaler(feature_range=(0, 1))
train = scaler.fit_transform(train)
val = scaler.fit_transform(val)


"""
进行训练集数据特征和对应标签的划分,其中前面96个采样点中的负荷特征
来预测第97个点的电力负荷值。
"""

# 设置训练集的特征列表和对应标签列表
x_train = []
y_train = []

# 将前96个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(train)):
    x_train.append(train[i - 96:i, :])
    y_train.append(train[i])

# 将训练集由list格式变为array格式
x_train, y_train = np.array(x_train), np.array(y_train)

# 设置训练集的特征列表和对应标签列表
x_val = []
y_val = []

# 将前96个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(val)):
    x_val.append(val[i - 96:i, :])
    y_val.append(val[i])

# 将训练集由list格式变为array格式
x_val, y_val = np.array(x_val), np.array(y_val)

  Вышеупомянутая предварительная обработка данных модели нейронной сети LSTM и разделение обучающего набора и набора проверки.Это то же самое, что и предварительная обработка предыдущего набора данных нейронной сети BP.После того, как данные получены, данные должны быть Этот шаг ускоряет обновление параметров нейронной сети, а также способствует повышению точности предсказания нейронной сети.
  Здесь следует подчеркнуть, что формат данных выходной сетевой модели RNN и LSTM — [количество выборок, временной шаг, количество признаков]; количество выборок легко понять, то есть сколько выборок имеется в обучающая выборка; временной шаг — циклическая нейронная сеть. Сколько вычислений в общей сложности требуется сети? Например, в этом случае эксперимент использует факторы влияния и данные нагрузки предыдущих 96 временных шагов в качестве признаков для прогнозирования данные 97-й точки.Тогда нейросеть цикла должна пройти цикл 96 раз, каждый раз Вычисляя характеристические данные шага по времени, характеристические данные также легко понять, характеристика в этом эксперименте является нагрузкой, (здесь следует следует отметить, что данные по электрической нагрузке являются как характеристикой, так и меткой). Итак, давайте взглянем на размерность данных окончательного набора данных:
вставьте сюда описание изображения
  очевидно, обучающий набор имеет 27936 выборок, временной шаг равен 96, а признак равен 1; очевидно, проверочный набор имеет 3408 выборок, временной шаг равен 96. а особенность 1. .


3.3 Построение модели

  Ниже представлена ​​модель нейронной сети RNN, построенная с использованием среды глубокого обучения:

# 利用keras搭建RNN神经网络,该网络隐藏层一共有两层,神经元分别为10
model = Sequential()
model.add(SimpleRNN(10, return_sequences=True, activation='relu'))
model.add(SimpleRNN(10, return_sequences=False, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1))

# 对模型进行编译,选用Adam优化器,学习率为0.01
model.compile(optimizer=keras.optimizers.Adam(0.01), loss='mean_squared_error')

# 将训练集和测试集放入网络进行训练,每批次送入的数据为512个数据,一共训练30轮,将测试集样本放入到神经网络中测试其验证集的loss值
history = model.fit(x_train, y_train, batch_size=512, epochs=30, validation_data=(x_val, y_val))

# 保存训练好的模型
model.save('RNN_model.h5')

  Ниже представлена ​​модель нейронной сети LSTM, построенная с использованием среды глубокого обучения:

# 利用keras搭建LSTM神经网络,该网络隐藏层一共有两层,神经元分别为10
model = Sequential()
model.add(LSTM(10, return_sequences=True, activation='relu'))
model.add(LSTM(10, return_sequences=False, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1))

# 对模型进行编译,选用Adam优化器,学习率为0.01
model.compile(optimizer=keras.optimizers.Adam(0.01), loss='mean_squared_error')

# 将训练集和测试集放入网络进行训练,每批次送入的数据为512个数据,一共训练30轮,将测试集样本放入到神经网络中测试其验证集的loss值
history = model.fit(x_train, y_train, batch_size=512, epochs=30, validation_data=(x_val, y_val))

# 保存训练好的模型
model.save('LSTM_model.h5')

  Ниже в качестве примера для объяснения используется нейронная сеть LSTM. Процесс обучения нейронной сети LSTM показан на рисунке ниже.Видно, что значение потерь непрерывно уменьшается.После завершения обучения модели значение потерь модели выглядит следующим образом: Очевидно, что сеть близка до сходимости примерно за 5 раундов.Для
вставьте сюда описание изображения
  нейронной сети BP сходимость происходит быстрее.


3.4 Предсказание модели

  После завершения обучения модели обученная модель сохраняется, и файл параметров модели можно использовать для прямого вывода модели по характеристикам входных данных.Сгенерированные параметры модели следующие:

вставьте сюда описание изображения
  В это время обученную модель можно использовать для проверки теста, а прогнозируемое прогнозируемое значение можно денормализовать. Конкретный код выглядит следующим образом:

model = load_model("LSTM_model.h5")

# 测试集输入模型进行预测
predicted = model.predict(x_test)
# print(predicted.shape)
# print(test.shape)

# 将真实值标签进行反归一化操作,方便后续和真实值进行对比
real = scaler.inverse_transform(test[96:])


# 将模型预测出的值进行反归一化操作
prediction = scaler.inverse_transform(predicted)

  Сравните прогнозируемое значение с реальной меткой и нарисуйте диаграмму сравнения прогнозируемого значения и реального значения следующим образом.
вставьте сюда описание изображения
  Из сравнения на приведенном выше рисунке видно, что влияние нейронной сети LSTM на прогнозирование мощности очень хорошее, и модель можно оценить с помощью индекса оценки модели.

# 计算模型的评价指标
R2 = r2_score(real, prediction)
MAE = mean_absolute_error(real, prediction)
RMSE = np.sqrt(mean_squared_error(real, prediction))
MAPE = np.mean(np.abs((real-prediction) / prediction))

# 打印模型的评价指标
print('R2:', R2)
print('MAE:', MAE)
print('RMSE:', RMSE)
print('MAPE:', MAPE)

  Расчет индекса конкретной оценки выглядит следующим образом.
вставьте сюда описание изображения
  Более подробное объяснение и полный код можно получить в моем курсе:
  [практическое обучение] на основе прогнозирования электрической нагрузки с одной функцией нейронной сети BP
  [практическое обучение] на основе RNN, нейронной сети LSTM Прогнозирование однокомпонентной электрической нагрузки сети
  [практическое обучение] на основе прогнозирования однофункциональной электрической нагрузки нейронной сети CNN-LSTM


4. Однофункциональное прогнозирование электрической нагрузки на основе нейронной сети CNN-LSTM.

4.1 Модель нейронной сети CNN-LSTM, примененная к многофункциональному прогнозированию энергетической нагрузки

  По сравнению с одной моделью нейронной сети в некоторых сценариях эффект комбинированной модели часто лучше, чем у одиночной модели, потому что комбинированная модель часто имеет дополнительные преимущества. Сетевая модель CNN-LSTM является первой комбинированной моделью нейронной сети, описанной в этой серии. Из названия модели нейронной сети нетрудно понять, что модель нейронной сети представляет собой комбинацию нейронной сети CNN и нейронной сети LSTM для изучения и прогнозирования данных о силовой нагрузке. Но здесь я хочу подчеркнуть, что используемая здесь нейронная сеть CNN — это одномерная сверточная нейронная сеть, а сверточная нейронная сеть, с которой все соприкасаются в процессе обучения глубокому обучению, — это в основном двумерная сверточная нейронная сеть, потому что по сравнению с другими Что касается нейронной сети, двумерная сверточная нейронная сеть действительно лучше других нейронных сетей в извлечении признаков изображений; но в этой статье используется комбинированная модель нейронной сети для извлечения признаков мощности данные о нагрузке Из приведенного выше анализа мы можем знать, что данные об электрической нагрузке являются типичными данными модели временного ряда. Следовательно, одномерная сверточная нейронная сеть может использоваться для извлечения данных временных рядов. Перед изучением одномерной сверточной нейронной сети рекомендуется изучить принцип глубокого обучения двумерной сверточной нейронной сети ----- сверточной нейронной сети Вот статьи по теме и соответствующие видеокурсы, которые я написал.
  [практическое обучение] на основе прогнозирования электрической нагрузки с одной функцией нейронной сети BP
  [практическое обучение] на основе прогнозирования электрической нагрузки с одной функцией нейронной сети RNN, LSTM [
  практическое обучение] на основе одной функции нейронной сети CNN-LSTM -функция прогнозирования нагрузки на электроэнергию

4.1.1.Операция одномерной свертки

  По сравнению с операцией двумерной свертки, которая выполняет операции свертки путем скольжения влево, вправо, вверх и вниз по всей карте объектов, операция одномерной свертки выполняет непрерывное скольжение только по объекту данных H для операций свертки. В частности, как показано на рисунке.
вставьте сюда описание изображения
  Как показано на рисунке выше, если предположить, что размерность данных в это время составляет H×W (конечно, в задаче прогнозирования мощности с одной функцией, поскольку входные данные имеют только одну характеристику нагрузки, размерность данные в это время часто H×1), то это Если высота ядра свертки установлена, как показано на рисунке, если высота ядра свертки установлена ​​​​на 3, то размерность ядра свертки должно быть 3×W, потому что операция одномерной свертки выполняет скольжение только в одном направлении; конечно, операция свертки также может выполняться в операциях двумерной свертки, таких как установка шага. Используйте установленное ядро ​​свертки, чтобы непрерывно перемещаться по функциям данных, умножайте соответствующие факторы на ядро ​​свертки и соответствующее восприимчивое поле и, наконец, суммируйте. Повторяйте операцию до тех пор, пока вы больше не сможете проводить пальцем вниз. Конкретная операция показана на рисунке выше.
  Конечно, данные для одномерной свертки не обязательно являются одноканальными данными.Данные могут иметь несколько каналов.В то же время есть надежда искусственно установить канал выходных данных после операции свертки.Конкретный расчет показано на рисунке ниже: Как показано на рисунке выше
вставьте сюда описание изображения
  , предположим, что размер входных данных равен H×W×C, тогда количество каналов соответствующего ядра свертки должно быть C в это время, а ширина свертки ядро одномерной операции свертки должно быть таким же, как ширина карты признаков, тогда ширина ядра свертки также равна W; в то же время установите высоту ядра свертки на FH, тогда размерность ядро свертки FH×W×C; если вы хотите установить количество каналов выходных данных, то вы должны установить число ядер свертки; предполагая, что размер канала данных для вывода равен FN, тогда количество ядер свертки должно быть установлено на FN. Следовательно, размерность окончательных выходных данных по расчету составляет OH×1×FN.

4.1.2 Операция одномерного объединения

  (1) Максимальное объединение
  Максимальное объединение — это выбор максимального значения для выбранной области, что совпадает с операцией двумерного объединения, как показано на следующем рисунке:
вставьте сюда описание изображения

  (2) Объединение средних значений
  Объединение средних значений заключается в выборе среднего значения для выбранной области, которое совпадает с операцией двумерного объединения, как показано на следующем рисунке:
вставьте сюда описание изображения

4.2 Модель CNN-LSTM, применяемая для прогнозирования электрической нагрузки с несколькими влияющими факторами

  После анализа приведенной выше операции одномерной свертки и операции объединения строится комбинированная модель нейронной сети CNN-LSTM, как показано на рисунке ниже.
вставьте сюда описание изображения
  Из рисунка видно, что на вход нейронной сети поступают данные о силовой нагрузке с одним признаком, причем выборка данных осуществляется каждые 15 минут, поэтому выборка за день составляет 96 временных точек, а данные о силовой нагрузке представляют собой типичные данные временного ряда Предыдущие данные Временные данные оказывают определенное влияние на последующие данные, поэтому данные первых 96 точек выборки являются входными данными нейронной сети.
Сначала над данными выполняется одномерная операция свертки.Из приведенного выше видно, что данные после одномерной операции свертки представляют собой данные N × 1. На рисунке семь ядер свертки используются для выполнения одного -мерный алгоритм свертки, таким образом, получено 7 N×1-мерных данных, то есть для получения канала данных с 7 каналами данных и длиной и шириной N×1 данных.
  Затем выполните операцию одномерного объединения свернутых данных.Независимо от того, является ли это двумерным объединением или одномерным объединением, количество каналов данных после операции объединения остается неизменным. Длина данных после операции одномерного объединения меньше исходной (конечно, она может остаться прежней или стать больше, в зависимости от конкретных значений параметров операции объединения). Данные после операции объединения также могут быть подвергнуты операции одномерной свертки, но для облегчения наблюдения за общей структурой модель в этой статье рисует операцию свертки и объединения.
  Наконец, структура признаков, извлеченная сверточной нейронной сетью, вводится в нейронную сеть LSTM, а информация о временных рядах изучается нейронной сетью LSTM. И в конце структуры нейронной сети подключается полностью подключенный слой нейронной сети, и полностью подключенная нейронная сеть прогнозирует ранее извлеченные и изученные функции и, наконец, выводит прогнозируемое значение.


4.3 Предварительная обработка данных и разделение набора данных

  Ниже приведена часть предварительной обработки и разделения набора данных для прогнозирования электрической нагрузки:

# 进行数据归一化,将数据归一化到0-1之间
scaler = MinMaxScaler(feature_range=(0, 1))
train = scaler.fit_transform(train)
val = scaler.fit_transform(val)


"""
进行训练集数据特征和对应标签的划分,其中前面96个采样点中负荷特征
来预测第97个点的电力负荷值。
"""

# 设置训练集的特征列表和对应标签列表
x_train = []
y_train = []


# 将前96个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(train)):
    x_train.append(train[i - 96:i, :])
    y_train.append(train[i])

# 将训练集由list格式变为array格式
x_train, y_train = np.array(x_train), np.array(y_train)


# print(x_train.shape)
# print(y_train.shape)


# 设置训练集的特征列表和对应标签列表
x_val = []
y_val = []


# 将前48个采样点的天气特征和电价特征和负荷特征作为训练特征添加到列表中
# 按照上述规律不断滑动取值
for i in np.arange(96, len(val)):
    x_val.append(val[i - 96:i, :])
    y_val.append(val[i])

# 将训练集由list格式变为array格式
x_val, y_val = np.array(x_val), np.array(y_val)

4.4 Построение модели

  Ниже представлена ​​модель нейронной сети CNN-LSTM, построенная с использованием среды глубокого обучения:

# 利用keras搭建RNN神经网络,该网络隐藏层一共有两层,神经元分别为10
model = Sequential()
model.add(Conv1D(filters=32, kernel_size=3, strides=1, padding="same", activation="relu"))
model.add(MaxPooling1D(pool_size=2, strides=1, padding="same"))
model.add(Conv1D(filters=64, kernel_size=2, strides=1, padding="same", activation="relu"))
model.add(MaxPooling1D(pool_size=3, strides=1, padding="same"))
model.add(LSTM(10, return_sequences=True, activation='relu'))
model.add(LSTM(10, return_sequences=False, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1))

# 对模型进行编译,选用Adam优化器,学习率为0.01
model.compile(optimizer=keras.optimizers.Adam(0.01), loss='mean_squared_error')

# 将训练集和测试集放入网络进行训练,每批次送入的数据为512个数据,一共训练30轮,将测试集样本放入到神经网络中测试其验证集的loss值
history = model.fit(x_train, y_train, batch_size=512, epochs=30, validation_data=(x_val, y_val))

# 保存训练好的模型
model.save('CNN_LSTM_model.h5')

  На рисунке ниже показана карта значений потерь нейронной сети CNN-LSTM, Из рисунка видно, что значение потерь нейронной сети быстро падает. Это показывает, что сеть сходится очень быстро.
вставьте сюда описание изображения


4.5 Предсказание модели

  После завершения обучения модели обученная модель сохраняется, и файл параметров модели можно использовать для прямого вывода модели по характеристикам входных данных.Сгенерированные параметры модели следующие: В это время обученная модель
вставьте сюда описание изображения
  может использоваться для проверки теста, а прогнозируемые значения прогноза денормализованы. Конкретный код выглядит следующим образом:

model = load_model("CNN_LSTM_model.h5")


# 测试集输入模型进行预测
predicted = model.predict(x_test)
# print(predicted.shape)
# print(test.shape)

# 将真实值标签进行反归一化操作,方便后续和真实值进行对比
real = scaler.inverse_transform(test[96:])


# 将模型预测出的值进行反归一化操作
prediction = scaler.inverse_transform(predicted)

  Сравните прогнозируемое значение с реальной меткой и нарисуйте диаграмму сравнения прогнозируемого значения и реального значения следующим образом.
вставьте сюда описание изображения
  Из сравнения на приведенном выше рисунке видно, что нейронная сеть CNN-LSTM все еще может прогнозировать силовую нагрузку, В частности, модель можно оценить с помощью индекса оценки модели.
  Конкретные индексные коды оценки следующие:

# 计算模型的评价指标
R2 = r2_score(real, prediction)
MAE = mean_absolute_error(real, prediction)
RMSE = np.sqrt(mean_squared_error(real, prediction))
MAPE = np.mean(np.abs((real-prediction) / prediction))

# 打印模型的评价指标
print('R2:', R2)
print('MAE:', MAE)
print('RMSE:', RMSE)
print('MAPE:', MAPE)

  Конкретный расчет индекса оценки выглядит следующим образом:
вставьте сюда описание изображения
  Для получения более подробных объяснений и полных кодов вы можете перейти на мой курс, чтобы получить:
  [практическое обучение] прогнозирование электрической нагрузки с одной функцией на основе нейронной сети BP
  [практическое обучение] одиночное - функция потребления электроэнергии на основе нейронной сети RNN и LSTM Прогнозирование нагрузки
  [практическое обучение] на основе прогнозирования электрической нагрузки с одной функцией нейронной сети CNN-LSTM


5. Резюме сравнительного анализа однофункциональных моделей прогнозирования электрической нагрузки.

  Мы построили нейронные сети BP, LSTM и CNN-LSTM, протестировали их с помощью тестового набора и рассчитали индекс индекса оценки соответствующей модели.Далее мы будем использовать значение такого индекса оценки для оценки построенного выше нейронная сеть модель для анализа. Конкретные значения индекса оценки показаны в таблице ниже:

Модель/оценка предложения R2 МАЭ СКО MAPE
АД 0,976 186,134 231.039 0,0208
ЛСТМ 0,995 80.457 108.091 0,011
CNN-LSTM 0,994 91,2 118.535 0,013

  Как показано в приведенной выше таблице, это индекс оценки многофункционального прогнозирования электрической нагрузки с использованием BP, LSTM и нейронной сети CNN-LSTM в этой статье; индексы оценки включают R2, MAE, RMSE и MAPE; R2 означает, что чем ближе значение к 1, тем лучше, а MAE, RMSE и MAPE чем ближе к 0, тем лучше, из таблицы можно сделать вывод, что лучший эффект имеет LSTM, за ним CNN-LSTM, а худший BP Анализ позволяет сделать следующие выводы:
  1. Объем данных в этой статье относительно достаточен, поэтому последние три модели алгоритмов на самом деле очень хороши с точки зрения эффекта. Он может очень хорошо предсказать значение электрической нагрузки.
  2. Судя по большому количеству статей, окончательно доказано, что эффект CNN-LSTM лучше, чем у LSTM, но эффект, полученный в этой статье, заключается в том, что LSTM имеет лучший эффект. Причины следующие: ( 1) LSTM и
  CNN. Параметры модели LSTM не были настроены, поэтому это не обязательно оптимальная модель.
  (2) В этой статье не проводится статистика по большому количеству экспериментов, а только экспериментальные результаты, полученные из одного или двух экспериментов, которые могут быть случайными.
  (3) Данные в этой статье относительно достаточны. Можно ли показать превосходство модели CNN-LSTM, когда данных относительно мало.
  (4) Хотя эффект модели CNN-LSTM хуже, чем у LSTM, независимо от того, является ли он следствием карты предсказания модели или индекса оценки модели, прямая разница между двумя моделями на самом деле очень мала; эффект модели LSTM не очень хорош. В некоторых случаях эффект от использования CNN-LSTM будет лучше.


6. Последующий план обновления модели прогнозирования энергетической нагрузки

  Ожидается, что следующие статьи и обучающие видеоролики, связанные с моделью прогнозирования мощности связанных алгоритмов, будут обновлены к концу 23 года. Если вы хотите продолжить изучение прогнозирования мощности или вам нужно завершить проектирование, вы можете подписаться на меня ( или +q) 1343077375, и в то же время коллекция статей, я буду продолжать обновлять связанные статьи и обучающие видео.
  6.1 Однофункциональное прогнозирование электрической нагрузки на основе алгоритмов нейронных сетей BP, LSTM и CNN-LSTM (окончание)
  6.2 Многофункциональное прогнозирование электрической нагрузки на основе алгоритмов BP, RNN, LSTM и CNN-LSTM (окончание)
  6.3. Байесовские алгоритмы BP, RNN, LSTM и CNN-LSTM для прогнозирования мощности,
  оптимизированные для Шри-Ланки 6.4, алгоритмы BP, RNN, LSTM и CNN-LSTM для прогнозирования мощности на основе оптимизации роя частиц
  6.5, BP, RNN, и LSTM на основе алгоритма оптимизации муравьиной колонии, прогнозирования мощности по алгоритму CNN-LSTM
  6.6, прогнозирования мощности по алгоритму BP, RNN, LSTM, CNN-LSTM на основе генетического алгоритма
  6.7, прогнозирования мощности по алгоритму BP, RNN, LSTM, CNN-LSTM на основе алгоритма
  6.8 волчьей стаи, BP, RNN, LSTM, прогнозирование мощности на основе алгоритма CNN-LSTM на основе алгоритма
  6.9 волчьей стаи, прогнозирование мощности на основе алгоритма BP, RNN, LSTM, CNN-LSTM на основе механизма внимания
  6.10, прогнозирование силовой нагрузки на основе алгоритма трансформатора

Supongo que te gusta

Origin blog.csdn.net/didiaopao/article/details/127039659
Recomendado
Clasificación