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