Добавил:
Здесь представлены мои работы, надеюсь они Вам помогут, всех благ! Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СИИ 2.docx
Скачиваний:
1
Добавлен:
20.01.2024
Размер:
171.55 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации Ордена трудового Красного Знамени Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Московский технический университет связи и информатики Кафедра «Сети и системы фиксированной связи» Лабораторная работа №2 «Введение в анализ больших информационных массивов»

Группа: БОС-2001 Выполнил: Ядринцев С. М. Проверил(а): Матюнина Д.Д. Дата: 29.10.2023

Москва 2023

Цель работы

Используя Python, по имеющимся данным определить потребности зданий в нагреве (и в охлаждении) и классифицировать их в зависимости от спрогнозированной потребности.

Код программы

import numpy as np # Модуль с «более продвинутой математикой» import pandas # Модуль, с помощью которого мы прочитаем csv import matplotlib.pyplot as plt # Модуль работы с графиками # sklearn – библиотека для машинного обучения, из которой нам понадобятся # Функция разделения выборки на обучающую и тестовую from sklearn.model_selection import train_test_split # Наивный байесовский классификатор from sklearn.naive_bayes import GaussianNB # Метод, используемый для построения графика точности from sklearn.metrics import confusion_matrix # Дерево решений from sklearn.tree import DecisionTreeRegressor # Метод, с помощью которого мы будем визуализировать дерево from sklearn import tree # Нейронная сеть from sklearn.neural_network import MLPRegressor # Функция подсчета точности модели from sklearn.metrics import accuracy_score def visualize(y_test, y_pred, model_name): # Альтернативный способ подсчета точности модели pernb_1 = 100 * (sum(abs(y_test - y_pred) <= 1)) / len(y_test) accuracy = round(pernb_1, 2) # Выведем на экран точность модели print(f'{model_name} % within 1 unit (accuracy): {accuracy}%') # Построение Confusion Matrix C = confusion_matrix(y_test, y_pred) C_perc, res, rank, s = np.linalg.lstsq(np.diag(sum(C, 2)), C, rcond=None) # Укажем названия осей и название графика plt.ylabel('Outputs') plt.xlabel('Outputs') plt.title( f'How many responses were correctly predicted wihin 1 (accuracy): {accuracy}%') # Отрисуем график plt.imshow(C_perc) plt.colorbar() plt.show() def native_bayes(X_train, y_train, X_test, y_test): gnb = GaussianNB() # Создадим модель NBmodel = gnb.fit(X_train, y_train) # Обучим ее на train датасете y_pred = NBmodel.predict(X_test) # Попросим предсказать результат на test датасете visualize(y_test,y_pred,"Naive Bayes") # Посмотрим точность def regression_tree(X_train, y_train, X_test, y_test): rt_model = DecisionTreeRegressor() # Создадим модель rt_model.fit(X_train, y_train) # Обучим на test rt_y_pred = rt_model.predict(X_test) # Попросим предсказать на train visualize(y_test, rt_y_pred, "Decision Tree Regressor") # Посмотрим точность tree.plot_tree(rt_model) # Посмотрим, как выглядит дерево решений plt.title('Decision Tree Regressor') # Подпишем рисунок с деревом решений plt.show() # Выведем рисунок на экран 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}%") def main(): df = pandas.read_csv('ENB2012_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

Рис. №1 – Наивный байесовский классификатор

Рис. № 2 – Регрессионное дерево

Рис. № 3 – Нейронная сеть

Вывод программы в консоль приведен ниже:

There are 37 unique output categories

Naive Bayes % within 1 unit (accuracy): 66.15%

Decision Tree Regressor % within 1 unit (accuracy): 95.31%

Соседние файлы в предмете Системы искусственного интеллекта