senkin_alexander_lab_3 is ready

This commit is contained in:
Mamoru777 2023-10-30 21:13:41 +04:00
parent a98d914e7c
commit 017623e084
6 changed files with 67649 additions and 0 deletions

1
senkin_alexander_lab_3/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.idea/

View 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 признаков самым бесполезным оказался признак года, а самым полезным - признак смертности.

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View 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))

File diff suppressed because it is too large Load Diff