79 lines
3.8 KiB
Python
79 lines
3.8 KiB
Python
|
import pandas as pd
|
|||
|
from sklearn.metrics import mean_squared_error
|
|||
|
from sklearn.model_selection import train_test_split
|
|||
|
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
|
|||
|
import numpy as np
|
|||
|
|
|||
|
# 1 часть лабораторной работы
|
|||
|
# Вариант 20. Pclass, Parch, Fare
|
|||
|
def part_one():
|
|||
|
data = pd.read_csv('titanic.csv', index_col='Passengerid')
|
|||
|
# выгрузка непустых данных
|
|||
|
data = data.loc[(np.isnan(data['Pclass']) == False) & (np.isnan(data['Fare']) == False) & (np.isnan(data['Parch']) == False) & (np.isnan(data['Survived']) == False)]
|
|||
|
# отбор нужных столбцов
|
|||
|
corr = data[['Pclass', 'Parch', 'Fare']]
|
|||
|
# респечатка первых 5 строк данных
|
|||
|
print(corr.head())
|
|||
|
# определение целевой переменной
|
|||
|
y = data['Survived']
|
|||
|
# создание и обучение дерева решений
|
|||
|
clf = DecisionTreeClassifier(random_state=241)
|
|||
|
clf.fit(corr, y)
|
|||
|
# получение и распечатка важностей признаков
|
|||
|
importances = clf.feature_importances_
|
|||
|
print(importances)
|
|||
|
top_importances = importances.argsort()[-2:][::-1]
|
|||
|
print("Наиболее важные признаки:", corr.columns[top_importances][0], "и", corr.columns[top_importances][1])
|
|||
|
|
|||
|
# функция для приведения типа мобильного устройства к числу
|
|||
|
def device_to_bool(device):
|
|||
|
if device == "Computer":
|
|||
|
return 0
|
|||
|
elif device == "Mobile":
|
|||
|
return 1
|
|||
|
elif device == "Tab":
|
|||
|
return 2
|
|||
|
|
|||
|
# функция для приведения уровня гибкости к числу
|
|||
|
def flexibility_level_to_bool(flexibility_level):
|
|||
|
if flexibility_level == "Low":
|
|||
|
return 0
|
|||
|
elif flexibility_level == "Moderate":
|
|||
|
return 1
|
|||
|
elif flexibility_level == "High":
|
|||
|
return 2
|
|||
|
|
|||
|
# 2 часть лабораторной работы
|
|||
|
# Вариант 20. Зависимость уровня гибкости от возраста и устройства, с которого человек работает
|
|||
|
def part_two():
|
|||
|
data = pd.read_csv('dataset.csv')
|
|||
|
# приведение типа мобильного устройства к числу
|
|||
|
data['Device'] = data['Device'].apply(device_to_bool)
|
|||
|
# приведение уровня гибкости к числу
|
|||
|
data['Flexibility Level'] = data['Flexibility Level'].apply(flexibility_level_to_bool)
|
|||
|
# отбор нужных столбцов
|
|||
|
X = data[['Age', 'Device']]
|
|||
|
# респечатка первых 5 строк данных
|
|||
|
print(X.head())
|
|||
|
# определение целевой переменной
|
|||
|
y = data['Flexibility Level']
|
|||
|
# разделение данных на обучающую и тестовую выборки
|
|||
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.01, random_state=42)
|
|||
|
# создание и обучение дерева регрессии
|
|||
|
tree_reg = DecisionTreeRegressor()
|
|||
|
tree_reg.fit(X_train, y_train)
|
|||
|
# получение и распечатка важностей признаков
|
|||
|
importances = tree_reg.feature_importances_
|
|||
|
print(importances)
|
|||
|
top_importances = importances.argsort()[-2:][::-1]
|
|||
|
print("Наиболее важные признаки:", X.columns[top_importances][0], "и", X.columns[top_importances][1])
|
|||
|
# предсказание на тестовых данных
|
|||
|
y_pred = tree_reg.predict(X_test)
|
|||
|
# оценка точности модели
|
|||
|
mse = mean_squared_error(y_test, y_pred)
|
|||
|
print("Средняя квадратичная ошибка:", mse)
|
|||
|
|
|||
|
print("---ПЕРВАЯ ЧАСТЬ ЛАБОРАТОРНОЙ РАБОТЫ---")
|
|||
|
part_one()
|
|||
|
print("\n---ВТОРАЯ ЧАСТЬ ЛАБОРАТОРНОЙ РАБОТЫ---")
|
|||
|
part_two()
|