Merge pull request 'kondrashin_mikhail_lab_3_ready' (#204) from kondrashin_mikhail_lab_3 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/204
This commit is contained in:
Alexey 2023-12-05 23:14:01 +04:00
commit f3d73b433f
4 changed files with 49723 additions and 0 deletions

View File

@ -0,0 +1,26 @@
#### Кондрашин Михаил ПИбд-41
## Лабораторная работа 3. Деревья решений
### Запуск лабораторной работы:
* установить `python`, `numpy`, `matplotlib`, `sklearn`
* запустить проект (стартовая точка класс `main.py`)
### Используемые технологии:
* Язык программирования `Python`,
* Библиотеки `numpy`, `matplotlib`, `sklearn`
* Среда разработки `IntelliJ IDEA` (В версии "Ultimate edition" можно писать на python)
### Описание решения:
* Выполняет ранжирование признаков для регрессионной модели
* По данным "WindData" решает задачу классификации (с помощью дерева решений), в которой необходимо определить статистические параметры ветра, влияющие на классификацию по каждому из классов интенсивности турбулентности в соответствии с международной классификацией IEC-614000-1 ed.3.
### Результат:
![Result](images/result.png)
Как видно из результата работы программы - для каждого класса интенсивности турбулентности ключевым является показатель скорости ветра, наиболее выражено это для класса "С", наименее - для класса "B"

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

View File

@ -0,0 +1,41 @@
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
import numpy as np
pd.options.mode.chained_assignment = None
FILE_PATH = "WindData.csv"
REQUIRED_COLUMNS = ['TI1', 'V1']
TARGET_COLUMN_1 = 'TurbulenceIntensityClassA'
TARGET_COLUMN_2 = 'TurbulenceIntensityClassB'
TARGET_COLUMN_3 = 'TurbulenceIntensityClassC'
def print_classifier_info(feature_importance):
feature_names = REQUIRED_COLUMNS
embarked_score = feature_importance[-3:].sum()
scores = np.append(feature_importance[:2], embarked_score)
scores = map(lambda score: round(score, 2), scores)
print(dict(zip(feature_names, scores)))
def actions(target_column):
data = pd.read_csv(FILE_PATH)
X = data[REQUIRED_COLUMNS]
y = data[target_column]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=100)
classifier_tree = DecisionTreeClassifier(random_state=100)
classifier_tree.fit(X_train, y_train)
print_classifier_info(classifier_tree.feature_importances_)
print("Оценка качества классификации ", target_column, " - ", classifier_tree.score(X_test, y_test))
if __name__ == '__main__':
actions(TARGET_COLUMN_1)
actions(TARGET_COLUMN_2)
actions(TARGET_COLUMN_3)