Решение
Функция, которая обучит модель на тренировочном датасете, проверит на другом (test) и построит график точности по предсказанным моделью данным (на тестовом датасете)выглядит следующим образом:
Стоит также отметить, что random_state зафиксирован (=1) для возможности получения одинаковых результатов в нескольких запусках.
def nn(X_train, y_train, X_test, y_test):
# Создадим модель с 10 скрытыми (внутренними) слоями, зафиксируем random_state для
# повторяемости результата
nn = MLPRegressor(hidden_layer_sizes=(10), random_state=1)
nn.fit(X_train, y_train) # Обучим модель
nn_y_pred = nn.predict(X_test) # Предскажем результат
error = y_test-nn_y_pred # Посчитаем матрицу ошибки
# (разница между корректными ответами и предсказанными моделью)
# Посчитаем Mean Absolute Error (среднюю ошибку)
mae = round(100*sum(error)/len(error),2)
print(f"MAE: {mae}%; Accuracy: {100-mae}%")
Часть IV. Определение значимых переменных
Теперь напишем функцию, благодаря которой будут запущены все остальные функции нашей программы. В ней как раз и определим все значимые переменные :
def main():
df = pandas.read_csv('data.csv', sep=',') # Прочитаем файл data.csv с разделителем ;
# Явно укажем, что тип данных выборки - float
df['X1'].astype(float)
df['X2'].astype(float)
df['X3'].astype(float)
df['X4'].astype(float)
df['X5'].astype(float)
df['X6'].astype(float)
df['X7'].astype(float)
df['X8'].astype(float)
df['Y1'].astype(float)
df['Y2'].astype(float)
df['Y1_R'].astype(float)
df['Y2_R'].astype(float)
#Отделяем Y:
Y1 = df['Y1_R']
Y2 = df['Y2_R']
# посмотрим кол-во уникальных вариантов ответа
u = len(df['Y1_R'].unique())
print(f'There are {u} unique output categories')
#Отделяем X:
X = df.drop('Y1', axis=1).drop('Y2', axis=1).drop(
'Y1_R', axis=1).drop('Y2_R', axis=1)
#Делим датасет на train и test:
X_train, X_test, y_train, y_test = train_test_split(X, Y1, random_state=0)
#Запустим 3 модели:
# Байесовский классификатор
native_bayes(X_train, y_train, X_test, y_test)
# Регрессионное дерево
regression_tree(X_train, y_train, X_test, y_test)
# Нейронная сеть
nn(X_train, y_train, X_test, y_test)
if __name__ == '__main__':
main() # Вызовем главную функцию main
В этой части работы исследуем влияние введения значимых переменных на работу классификатора на примере алгоритма регрессионных деревьев TreeBagger.
По результатам работы программы видно, что значимыми параметрами для классификации зданий будут их относительная компактность, площадь крыши, площадь остекления и распределение этой площади остекления.
Классификатор, работающий только на 4 входных переменных, показывает лучший результат точности совпадений результатов прогноза (99%) по сравнению с классификатором, анализирующим все 8 параметров (95%).
Вывод
Проблема «предсказывания» - один из наиболее актуальных и пока неразрешимых вопросов человеческой жизни. В данной работе на примере анализа реальных данных был рассмотрен один из частных видов классических задач на прогнозирование и классификацию.
На реальных примерах технических систем из области энергетики и промышленного производства были рассмотрены методы анализа данных и алгоритмы машинного обучения, а именно было установлено: как быстро изучить данные, обучить различные модели, произвести оценку качества алгоритмов, сравнить полученные результаты и применить лучшие подходы для решения задач.
На основе данной работы можно проводить различные классификации объектов (помещений, аппаратуры…) по степени защищенности от утечек информации. В частности, можно прогнозировать утечку информации по техническим каналам, если известны те или иные параметры зданий.
Рассмотренные алгоритмы доступны в своем исполнении, понятны и быстро реализуемы, что дает возможность в кратчайшие сроки получить максимально точные данные о возможной угрожающей опасности и о гарантировании безопасности хранения данных.
