Простое введение в множественную регрессию
Фон
Одноцикловые газотурбинные электростанции вырабатывают электроэнергию, используя природный газ и сжатый воздух. Воздух забирается из окружающей среды, сжимается и подается в камеру сгорания газовой турбины. Здесь впрыскивается природный газ, который смешивается со сжатым воздухом и воспламеняется. При сгорании образуется поток горячего газа под высоким давлением, который проходит через турбину, заставляя ее вращаться (с огромной скоростью). Следовательно, это вращает генератор, который соединен с турбиной для производства электроэнергии.
Для одноцикловых газовых турбин большая часть энергии тратится впустую в виде горячего выхлопа, достигая эффективности преобразования энергии в лучшем случае 35%. Электростанции с комбинированным циклом используют эту неэффективность, улавливая отходящее тепло с помощью парогенератора-утилизатора (HRSG), чтобы производить еще больше энергии.
Электростанции с комбинированным циклом - это электростанции, на которых для выработки электроэнергии одновременно используются как газовые, так и паровые турбины. Отработанное тепло, вырабатываемое газовой турбиной, используется для производства пара, который подается в паровую турбину для выработки еще большего количества электроэнергии. Это увеличивает мощность, производимую (до 50%) при том же количестве топлива, а также увеличивает эффективность установки примерно до 60%.
Выходная мощность электростанции с комбинированным циклом (ПГУ) зависит от нескольких параметров, таких как атмосферное давление, давление выхлопного пара, температура окружающей среды и относительная влажность. Возможность прогнозировать выходную электрическую мощность при полной нагрузке важна для эффективной и экономичной работы электростанции. В этой статье мы будем использовать машинное обучение для разработки прогнозной модели для прогнозирования выходной мощности при полной нагрузке CCPP.
Цели
- Разработать прогнозную модель для прогнозирования выходной мощности при полной нагрузке.
- Оцените производительность модели
Совет: Поскольку цель состоит в том, чтобы предсказать выходную мощность на основе некоторых параметров, это проблема регрессии. Регрессия направлена на установление связи между предикторами (переменными, которые помогают нам делать прогноз) и целью (значением, которое мы хотим предсказать).
Набор данных
В этой статье мы будем использовать набор данных, предоставленный Pinar Tufekci, который доступен в репозитории машинного обучения UCI. Набор данных был собран за шестилетний период и состоит из 9568 точек данных, собранных, когда электростанция была настроена на работу с полной нагрузкой.
Https://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant?ref=datanews.io
Множественная регрессия
Множественная регрессия - это расширение простой линейной регрессии. Это метод моделирования, который использует несколько предикторов или независимых переменных для прогнозирования целевой переменной или результата.
Общая форма множественной регрессии
Наш рабочий процесс
- Исследовательский анализ данных
- Разработайте модель
- Оцените модель
- Выберите лучшую модель
1. Исследовательский анализ данных
Сначала мы загрузим данные после импорта всех необходимых нам библиотек Python.
импортировать панды как pd, numpy как np, matplotlib.pyplot как plt
data = pd.read_csv (‘CCPP.csv’)
df = pd.DataFrame (данные)
Затем мы исследуем данные, чтобы прочувствовать их.
df.info ()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 9568 entries, 0 to 9567 Data columns (total 5 columns): AT 9568 non-null float64 V 9568 non-null float64 AP 9568 non-null float64 RH 9568 non-null float64 PE 9568 non-null float64 dtypes: float64(5) memory usage: 373.9 K
Мы видим, что этот набор данных состоит из 5 числовых переменных (float64). Для всех переменных нет пропущенных значений (9568 ненулевых), а тип данных (dtypes) является числом с плавающей запятой. Это, безусловно, хорошие новости, поскольку у нас чистый набор данных.
Далее мы смотрим на распределение набора данных.
df.describe ()
Набор данных состоит из 4-х среднечасовых переменных или характеристик и целевой переменной, которая является выходной мощностью (PE).
- Температура окружающей среды (AT) в диапазоне от 1,81 ° C до 37,11 ° C,
- Давление окружающей среды (AP) в диапазоне 992,89–1033,30 миллибар,
- Относительная влажность (RH) в диапазоне от 25,56% до 100,16%
- Выпускной вакуум (В) в диапазоне 25,36–81,56 см рт. Ст.
- Чистая часовая выработка электроэнергии (ПЭ) 420,26–495,76 МВт
Теперь, когда мы прочувствовали наш набор данных, нам нужно определить, какие функции помогут нам предсказать выходную мощность. Поскольку цель регрессии - создать математическую модель на основе функций для прогнозирования целевой переменной (PE), нам необходимо убедиться, что мы выбираем функции, которые имеют сильную корреляцию (высокую предсказательную силу) с целью. При этом будет полезна корреляционная матрица.
Корреляционная матрица - это структурированный подход к ранжированию важности предикторов или входных переменных (входных переменных, которые имеют наибольшее влияние) на выход . Для этого мы строим тепловую карту корреляционной матрицы с помощью Seaborn.
импортировать seaborn как sns
plt.figure (figsize = (7, 5))
sns.heatmap (df.corr (), annot = True)
Совет: C корреляция измеряется по шкале от -1 до 1. -1 означает полную отрицательную корреляцию, а 1 означает полную положительную корреляцию. 0 означает отсутствие корреляции.
Из корреляционной матрицы мы видим, что AT и V имеют сильную отрицательную корреляцию с целевой переменной (PE), поскольку их коэффициенты корреляции составляют -0,95 и -0,87 соответственно. AP и RH имеют слабую положительную корреляцию с PE с коэффициентами корреляции 0,52 и 0,39.
Мы можем визуализировать двумерное распределение набора данных (которое показывает, как каждая функция соотносится друг с другом и PE)
sns.set (style = ”ticks”)
sns.pairplot (df, diag_kind = ‘hist’)
При визуализации мы можем легко увидеть, что есть отличительный паттерн (отрицательная корреляция), наблюдаемый на AT и V по отношению к PE.
Внимание! Вы заметите, что AT и V сильно коррелируют друг с другом. Обычно это не очень хорошо, поскольку наши функции должны быть независимыми друг от друга. Эта проблема называется мультиколлинеарностью. Один из способов решения этой проблемы - выбрать функции, которые сильнее коррелируют с нашей целевой переменной (PE). В данном случае это будет AT (-0,95). В некоторых случаях мы можем решить проблему и использовать наши функции таким образом.
2. Разработайте модель
Здесь мы разработаем несколько регрессионных моделей с использованием разных алгоритмов машинного обучения и различных комбинаций функций. Я решил использовать алгоритмы линейной регрессии, регрессии дерева решений и регрессии случайного леса для этого набора данных.
Выбор функций
Важнейшая часть успеха проекта машинного обучения - это хороший набор функций или предикторов для обучения. Выбор функций включает в себя выбор наиболее полезных функций для обучения среди существующих функций.
Во-первых, давайте создадим 4 различных комбинации функций и обучим нашу модель с помощью 3 алгоритмов регрессии.
Модель 1. Мы выбираем только AT в качестве предиктора (поскольку он имеет наиболее сильную корреляцию с целевой переменной (PE))
df_1 = df[‘AT’]
Модель 2. Мы выбираем AT и V в качестве предикторов.
df_2 = df[[‘AT’, ‘V’]]
Модель 3. Мы выбираем AT, V и RH в качестве предикторов.
df_3 = df[[‘AT’, ‘V’, ‘RH’]]
Модель 4. Мы выбираем AT, V, AP и RH в качестве предикторов.
df_4 = df[[‘AT’, ‘V’, ‘AP’, ‘RH’]]
Альтернатива: df_4 = df.drop ([‘PE’], axis = 1)
Наша целевая переменная (PE) - y
y = df[‘PE’]
Теперь, когда мы закончили с выбором функций, пришло время обучить нашу модель машинного обучения.
Обучение модели
Прежде чем мы фактически обучим нашу модель машинного обучения, нам нужно сначала разделить наши данные на набор для обучения и тестирования. Обучающий набор будет использоваться для создания математической модели взаимосвязи между функциями и целевой переменной. Набор тестов будет использоваться для проверки модели. Для этого мы воспользуемся библиотекой sci-kit learn и импортируем модуль train_test_split.
Мы разделим набор данных на 80% обучающий набор и 20% тестовый набор (с использованием принципа Парето).
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split (df_1, y, test_size = 0.2, random_state = 0)
Этот шаг будет повторен для всех наборов данных других моделей, заменив df_1 на соответствующий массив функций. Например, Модель 4 с df_4.
Наконец, мы подошли к захватывающей части, где мы реализуем алгоритм регрессии и разрабатываем нашу модель прогнозирования. Для этого мы будем использовать регрессию OLS, регрессию дерева решений и регрессию случайного леса. Сначала мы импортируем LinearRegression из библиотеки sci-kit learn и обучаем модель.
Для линейной регрессии
из sklearn.linear_model import LinearRegression
regressor = LinearRegression ()
regressor.fit (X_train, y_train)
Теперь, когда мы обучили нашу модель на нашем обучающем наборе, мы готовы делать прогнозы на нашем тестовом наборе (наша модель никогда раньше не видела этот набор).
y_pred = regressor.predict (X_test)
Реализация кода для регрессии дерева решений и регрессии случайного леса можно увидеть ниже:
Для регрессии дерева решений
из sklearn.tree import DecisionTreeRegressor
dt_regressor = DecisionTreeRegressor ()
dt_regressor.fit (X_train, y_train)
Для прогнозов
y_pred = dt_regressor.predict (X_test)
Для случайной регрессии леса
из sklearn.ensemble import RandomForestRegressor
rf_regressor = RandomForestRegressor ()
rf_regressor.fit (X_train, y_train)
Для прогнозов
y_pred = rf_regressor.predict (X_test)
Случайный лес - это алгоритм ансамбля, который соответствует множеству деревьев решений на различных подвыборках набора данных. Прогнозы делаются путем усреднения предсказаний каждого дерева решений. Это повышает точность прогнозов и позволяет избежать переобучения.
Блестяще !, мы создали прогнозную модель и делали прогнозы с ее помощью. Пришло время оценить, насколько хорошо работает наша модель.
3. Оценка эффективности
При разработке модели машинного обучения важно оценивать ее производительность, чтобы убедиться, что она дает полезные результаты, а не переоснащение. Для задач регрессии существуют 3 ключевых показателя эффективности, которые используются для оценки эффективности вашей модели. Есть
- Среднеквадратичная ошибка (RMSE): измеряет среднюю ошибку модели при прогнозировании результата наблюдения.
Совет. Чем ниже показатель RMSE, тем лучше
from sklearn.metrics import mean_squared_error
mse = mean_squared_error (y_test, y_pred)
rmse = np.sqrt (mse)
rmse
2. R-Squared: это означает, насколько вариативность целевой переменной может быть объяснена набором функций, используемых при обучении модели.
Совет. Чем выше оценка R-квадрат, тем лучше
из sklearn.metrics import r2_score
r_squared = r2_score (y_test, y_pred)
r_squared
3. Средняя абсолютная ошибка: измеряет, насколько прогнозируемые значения отличаются от фактических.
Совет. Чем ниже значение MAE, тем лучше.
from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error (y_test, y_pred)
mae
Теперь, когда мы оценили все наши модели, мы видим, что алгоритм регрессии случайного леса с моделью 4 (все функции) дал нам наилучшую производительность. R-квадрат равен 0,9644 (что означает, что 96,44% вариации целевой переменной PE можно объяснить с помощью модели).
Точно так же он дает самое низкое среднеквадратичное значение 3,1891.
Мы можем сделать вывод, что из наших результатов следует выбрать Модель 4 со случайной регрессией леса.
Сноски
В начале этой статьи мы решили разработать прогнозную модель для выходной мощности при полной нагрузке (PE) на основе предоставленного набора данных. Мы изучили набор данных, чтобы выяснить, есть ли у нас пропущенные значения или другие проблемы, а затем поигрались с выбором подмножеств 4 функций в 3 различных алгоритмах регрессии машинного обучения. Мы смогли обнаружить, что использование полного набора параметров или функций в алгоритме регрессии случайного леса дает наилучшие результаты. Мы получили R-квадрат 0,9644 и RMSE 3,1891.
Надеюсь, вы нашли это полезным. Всего наилучшего!