podkorytova_yulia_lab_3
This commit is contained in:
parent
b26c54a7e4
commit
a492e2a6df
45
podkorytova_yulia_lab_3/README.md
Normal file
45
podkorytova_yulia_lab_3/README.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# Лабораторная работа 3. Деревья решений
|
||||||
|
### Задание на лабораторную:
|
||||||
|
Часть 1. По данным о пассажирах Титаника решите задачу классификации (с помощью дерева решений), в которой по различным характеристикам пассажиров требуется найти у выживших пассажиров два наиболее важных признака из трех рассматриваемых (по варианту).
|
||||||
|
|
||||||
|
**Вариант 20.**
|
||||||
|
Pclass, Parch, Fare
|
||||||
|
|
||||||
|
Часть 2. Решите с помощью библиотечной реализации дерева решений задачу из лабораторной работы «Веб-сервис «Дерево решений» по предмету «Методы искусственного интеллекта» на 99% ваших данных. Проверьте работу модели на оставшемся проценте, сделайте вывод.
|
||||||
|
***
|
||||||
|
### Как запустить лабораторную работу:
|
||||||
|
Для запуска лабораторной работы необходимо открыть файл `lr3.py`, нажать на ПКМ и в выпадающем списке выбрать опцию "Run".
|
||||||
|
***
|
||||||
|
### Технологии:
|
||||||
|
**NumPy (Numerical Python)** - это библиотека для научных вычислений в Python, которая обеспечивает эффективные вычисления и манипуляции с данными.
|
||||||
|
|
||||||
|
**Pandas** - это библиотека на языке Python, которая предоставляет удобные и эффективные инструменты для обработки и анализа данных. Она предоставляет высокоуровневые структуры данных, такие как DataFrame, которые позволяют легко и гибко работать с табличными данными.
|
||||||
|
|
||||||
|
**Scikit-learn (Sklearn)** - это библиотека для языка программирования Python, которая предоставляет инструменты для разработки и применения различных алгоритмов машинного обучения, включая классификацию, регрессию, кластеризацию, снижение размерности и многое другое. Scikit-learn также предлагает функции для предобработки данных, оценки моделей и выбора наилучших параметров.
|
||||||
|
***
|
||||||
|
### Что делает лабораторная работа:
|
||||||
|
В первой части лабораторной работе загружается выборка из файла `titanic.csv` с помощью пакета *Pandas*, пустые значения убираются из выборки.
|
||||||
|
Далее в выборку отбираются 3 признака *(Pclass, Parch, Fare)* и определяется целевая переменная *(Survived)*.
|
||||||
|
После обучается решающее дерево классификации с параметром *random_state=241* и остальными параметрами по умолчанию.
|
||||||
|
Результатом первой части лабораторной работы являются определение двух наиболее важных признаков у выживших пассажиров.
|
||||||
|
|
||||||
|
Во второй части лабораторной работе загружается выборка из файла `dataset.csv` с помощью пакета *Pandas*, тип устройства и уровень гибкости приводятся в числовому виду.
|
||||||
|
Далее в выборку отбираются 2 признака *(Age и Device)* и определяется целевая переменная *(Flexibility Level)*.
|
||||||
|
После данные разделяются на обучающие и тестовые выборки, создается и обучается дерево регрессии с параметрами по умолчанию.
|
||||||
|
Результатом второй части лабораторной работы являются определение зависимости уровня гибкости от возраста и типа устройства и оценка точности модели.
|
||||||
|
***
|
||||||
|
### Пример выходных данных:
|
||||||
|
***Часть 1:***
|
||||||
|
выводятся первые 5 записей таблицы со столбцами по варианту, важности признаков и 2 наиболее важных признака из трех.
|
||||||
|
![](result1.JPG)
|
||||||
|
|
||||||
|
***Часть 2:***
|
||||||
|
выводятся первые 5 записей таблицы со столбцами по варианту, важности признаков, 2 наиболее важных признака из трех и средняя квадратичная ошибка.
|
||||||
|
![](result2.JPG)
|
||||||
|
***
|
||||||
|
**Вывод**: результаты первой части лабораторной работы показали, что у выживших пассажиров наиболее важными признаками являются *Fare* и *Parch*, причем *Fare* оказался самым важным признаком.
|
||||||
|
|
||||||
|
По результатам второй части лабораторной можно сказать, что уровень гибкости праткически одинаково зависит как от типа устройства, с которого человек работает, так и от возраста учащегося.
|
||||||
|
*Device* оказался более важным признаком, чем *Age*, но стоит сделать замечание, тип устройства и уровень гибкости были преобразованы к числовому виду, характер данных был искажен,
|
||||||
|
так как ранее объекты столбцов не могли быть математически сравнимы между собой, а после преобразований эта характеристика у них появилась.
|
||||||
|
Посчитанная среднеквадратичная ошибка находится ближе к 0, чем к 1, это говорит о высоком качестве модели.
|
1205
podkorytova_yulia_lab_3/dataset.csv
Normal file
1205
podkorytova_yulia_lab_3/dataset.csv
Normal file
File diff suppressed because it is too large
Load Diff
79
podkorytova_yulia_lab_3/lr3.py
Normal file
79
podkorytova_yulia_lab_3/lr3.py
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
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()
|
BIN
podkorytova_yulia_lab_3/result1.JPG
Normal file
BIN
podkorytova_yulia_lab_3/result1.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
BIN
podkorytova_yulia_lab_3/result2.JPG
Normal file
BIN
podkorytova_yulia_lab_3/result2.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
1310
podkorytova_yulia_lab_3/titanic.csv
Normal file
1310
podkorytova_yulia_lab_3/titanic.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user