Merge pull request 'kondrashin_mikhail_lab_6_ready' (#207) from kondrashin_mikhail_lab_6 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/207
This commit is contained in:
Alexey 2023-12-07 15:59:37 +04:00
commit 5356fa1de4
6 changed files with 49748 additions and 0 deletions

View File

@ -0,0 +1,48 @@
#### Кондрашин Михаил ПИбд-41
## Лабораторная работа 6. Нейронная сеть
### Запуск лабораторной работы:
* установить `python`, `numpy`, `matplotlib`, `sklearn`
* запустить проект (стартовая точка класс `main.py`)
### Используемые технологии:
* Язык программирования `Python`,
* Библиотеки `numpy`, `matplotlib`, `sklearn`
* Среда разработки `IntelliJ IDEA` (В версии "Ultimate edition" можно писать на python)
### Задача:
Осуществить обучение модели нейронной сети для предсказания погоды относительно влияющих погодных факторов по наиболее важным признакам.
### Описание решения:
* Входные данные:
* Влияющие признаки
* D1 (угол, с которого дует ветер на самом высоком датчике мачты ветростанции)
* TI1 (показатель турбуленции на самом высоком датчике мачты ветростанции)
* V1 (Скорость ветра)
* RH (относительная влажность)
* P (атмосферное давление)
* Аппроксимирующий признак - температура
* Файл WindData.csv
* Модель классификатора состоит из двух скрытых слоев
* Задействованные функции:
* relu
* identity
* tahn
* logistic
* max_iter=4000, n_iter_no_change=10, alpha=0.01
### Результат:
* Наиболее предпочтительной функцией при данных входных параметров для MLPClassifier является relu
* tahn и logistic являются примерно одинаковыми
* identity является наименьшей
То есть нелинейная функция является наилучшей для задачи прогнозирования погоды
![Result](images/result.png)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,12 @@
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
def random_state_fit(i, x_train, y_train, x_test, y_test, func):
mlp = MLPClassifier(random_state=i, max_iter=4000, n_iter_no_change=10,
activation=func, alpha=0.01, hidden_layer_sizes=[100, 100])
mlp.fit(x_train, y_train)
predictions = mlp.predict(x_test)
acc_mlp = accuracy_score(y_test, predictions)
print(f"Func {func} with accuracy {acc_mlp} \n")
return acc_mlp

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

View File

@ -0,0 +1,4 @@
from neuralNetwork import worker
if __name__ == '__main__':
worker()

View File

@ -0,0 +1,28 @@
import statistics
import pandas as pd
from sklearn.model_selection import train_test_split
from funcClassifier import random_state_fit
names = ['D1', 'TI1', 'V1', 'RH', 'P']
def bring(data):
return data[names], data['T'].astype('int')
def worker():
data = pd.read_csv('WindData.csv')
x, y = bring(data)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=100)
funcs = ['relu', 'identity', 'tanh', 'logistic']
acc = []
for i in range(0, len(funcs)):
acc.append(random_state_fit(i, x_train, y_train, x_test, y_test, funcs[i]))
print('\n Results: ')
print(f' Min is {min(acc)}, Median is {statistics.median(acc)}, Max is {max(acc)}')