senkin_alexander_lab_3 is ready
This commit is contained in:
parent
a98d914e7c
commit
017623e084
1
senkin_alexander_lab_3/.gitignore
vendored
Normal file
1
senkin_alexander_lab_3/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.idea/
|
32
senkin_alexander_lab_3/README.md
Normal file
32
senkin_alexander_lab_3/README.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
Лабораторная №3
|
||||||
|
|
||||||
|
Вариант №2
|
||||||
|
|
||||||
|
Задание на лабораторную:
|
||||||
|
|
||||||
|
Решите с помощью библиотечной реализации дерева решений задачу: Запрограммировать дерево решений как минимум на 99% ваших данных для задачи: Количество жертв(inj) от года(yr), магнитуды(mag) и фатальных исходов(fat) от торнадо. Проверить работу модели на оставшемся проценте, сделать вывод.
|
||||||
|
|
||||||
|
Как запустить лабораторную работу:
|
||||||
|
|
||||||
|
Чтобы увидеть работу программы, нужно запустить исполняемый питон файл senkin_alexander_lab_3.py, после чего в консоли будут выведены первые 5 строк данных, показатель score насколько хорошо модель соответсвует данным, все признаки, их ранжирование, а также среднюю ошибку.
|
||||||
|
|
||||||
|
Библиотеки
|
||||||
|
|
||||||
|
Sklearn. Предоставляет инструменты и алгоритмы, которые упрощают задачи, связанные с машинным обучением.
|
||||||
|
|
||||||
|
Описание программы:
|
||||||
|
|
||||||
|
- Загружаем данные из csv файла
|
||||||
|
- С помощью функции train_test_split разделяем данные на тестовые и обучающие в соотношении 1 к 99
|
||||||
|
- Добавляем две модели для сравнения их работы:
|
||||||
|
- Дерево решений(по заданию)
|
||||||
|
- Линейная регрессия(более подходящая модель)
|
||||||
|
- Обучаем модели
|
||||||
|
- вывод ранжированные признаки, производительность модели и среднюю ошибку
|
||||||
|
|
||||||
|
Программа выдает следующие результаты:
|
||||||
|
|
||||||
|
![img_1.png](img_1.png)
|
||||||
|
|
||||||
|
По этим результатам можно сделать вывод, что дерево решений не подходит для указанных данных, так как оценка производительности уходит в минус, а средняя квадратичная ошибка очень большая.
|
||||||
|
Для данной модели больше подходит линейная регрессия, которая имеет неплохую производительность 0.88, хотя для этих данных имеет все же немаленькую ошибку. Поэтому было решено ранжировать признаки по модели линейной регрессии, и из 3 признаков самым бесполезным оказался признак года, а самым полезным - признак смертности.
|
BIN
senkin_alexander_lab_3/img.png
Normal file
BIN
senkin_alexander_lab_3/img.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
BIN
senkin_alexander_lab_3/img_1.png
Normal file
BIN
senkin_alexander_lab_3/img_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
57
senkin_alexander_lab_3/senkin_alexander_lab_3.py
Normal file
57
senkin_alexander_lab_3/senkin_alexander_lab_3.py
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import pandas as pd
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.tree import DecisionTreeRegressor
|
||||||
|
from sklearn.ensemble import RandomForestRegressor
|
||||||
|
from sklearn.linear_model import LinearRegression
|
||||||
|
from sklearn.metrics import mean_squared_error
|
||||||
|
|
||||||
|
# Загрузка данных из csv-файла
|
||||||
|
data = pd.read_csv('us_tornado_dataset_1950_2021.csv')
|
||||||
|
|
||||||
|
# Разделение данных на признаки (X) и целевую переменную (y)
|
||||||
|
X = data[['yr', 'mag', 'fat']]
|
||||||
|
|
||||||
|
print (X.head())
|
||||||
|
y = data['inj']
|
||||||
|
|
||||||
|
# Разделение данных на обучающую и тестовую выборки
|
||||||
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.01, random_state=42)
|
||||||
|
|
||||||
|
#Решение с помощью дерева регрессии
|
||||||
|
model = DecisionTreeRegressor()
|
||||||
|
model.fit(X_train, y_train)
|
||||||
|
test_score = model.score(X_test, y_test)
|
||||||
|
# Получение важности признаков
|
||||||
|
feature_importances = model.feature_importances_
|
||||||
|
# Предсказание значений на тестовой выборке
|
||||||
|
y_pre = model.predict(X_test)
|
||||||
|
# Оценка производительности модели
|
||||||
|
mse = mean_squared_error(y_test, y_pre)
|
||||||
|
|
||||||
|
#Решение с помощью линейной регрессии
|
||||||
|
model2 = LinearRegression()
|
||||||
|
model2.fit(X_train, y_train)
|
||||||
|
test_score2 = model2.score(X_test, y_test)
|
||||||
|
# Предсказание значений на тестовой выборке
|
||||||
|
y_pre2 = model2.predict(X_test)
|
||||||
|
# Оценка производительности модели
|
||||||
|
mse2 = mean_squared_error(y_test, y_pre2)
|
||||||
|
|
||||||
|
# Получение коэффициентов модели
|
||||||
|
coefficients = model2.coef_
|
||||||
|
|
||||||
|
# Создание DataFrame для отображения коэффициентов и соответствующих признаков
|
||||||
|
coef_df = pd.DataFrame({'Признак': X.columns, 'Коэффициент': coefficients})
|
||||||
|
|
||||||
|
# Вывод коэффициентов по убыванию их абсолютных значений
|
||||||
|
coef_df['Абсолютный_Коэффициент'] = coef_df['Коэффициент'].abs()
|
||||||
|
coef_df = coef_df.sort_values(by='Абсолютный_Коэффициент', ascending=False)
|
||||||
|
|
||||||
|
print("Дерево решений")
|
||||||
|
print("score", test_score)
|
||||||
|
print("feature_importances", feature_importances)
|
||||||
|
print("Mean Squared Error: {:.2f}".format(mse) + "\n")
|
||||||
|
print("Линейная регрессия")
|
||||||
|
print("score", test_score2)
|
||||||
|
print(coef_df)
|
||||||
|
print("Mean Squared Error: {:.2f}".format(mse2))
|
67559
senkin_alexander_lab_3/us_tornado_dataset_1950_2021.csv
Normal file
67559
senkin_alexander_lab_3/us_tornado_dataset_1950_2021.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user