IIS_2023_1/basharin_sevastyan_lab_3/README.md

82 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Лабораторная работа 3. Вариант 4.
### Задание
По данным из таблицы реши задачу классификации (с помощью дерева решений) на 99% ваших данных.
Задачу классификации определить необходимо самостоятельно.
Проверьте работу модели на оставшемся проценте, сделайте вывод.
Модель:
- Дерево решений `DecisionTreeClassifier`.
### Как запустить
Для запуска программы необходимо с помощью командной строки в корневой директории файлов прокета прописать:
``` python
python main.py
```
### Используемые технологии
- Библиотека `pandas`, используемая для работы с данными для анализа scv формата.
- `sklearn` (scikit-learn): Scikit-learn - это библиотека для машинного обучения и анализа данных в Python. Из данной библиотеки были использованы следующие модули:
- `metrics` - набор инструменов для оценки моделей
- `DecisionTreeClassifier` - классификатор, реализующий алгоритм дерева решений. Дерево решений - это модель машинного обучения, которая разбивает данные на рекурсивные решения на основе значений признаков. Она используется для задач классификации и регрессии.
- `accuracy_score` -функция из scikit-learn, которая используется для оценки производительности модели классификации путем вычисления доли правильно классифицированных примеров (точности) на тестовом наборе данных.
- `train_test_split` - это функция из scikit-learn, используемая для разделения набора данных на обучающий и тестовый наборы.
- `LabelEncoder` - это класс из scikit-learn, используемый для преобразования категориальных признаков (например, строки) в числовые значения.
### Описание работы
#### Описание набора данных
Набор данных: набор данных о цене автомобиля в автопарке.
Названия столбцов набора данных и их описание:
- Id: Уникальный идентификатор для каждого автомобиля в списке.
- Price: Ценовой диапазон автомобилей с конкретными ценниками и подсчетами. (111000 - 77500000)
- Company Name: Название компании-производителя автомобилей с указанием процентной доли представительства каждой компании.
- Model Name: Название модели автомобилей с указанием процентного соотношения каждой модели.
- Model Year: Диапазон лет выпуска автомобилей с указанием количества и процентных соотношений. (1990 - 2019)
- Location: Местоположение автомобилей с указанием регионов, где они доступны для покупки, а также их процентное соотношение.
- Mileage: Информация о пробеге автомобилей с указанием диапазонов пробега, количества и процентов. (1 - 999999)
- Engine Type: Описания типов двигателей с процентными соотношениями для каждого типа.
- Engine Capacity: Мощность двигателя варьируется в зависимости от количества и процентов. (16 - 6600)
- Color: Цветовое распределение автомобилей с указанием процентных соотношений для каждого цвета.
- Assembly: Импорт или местный рынок.
- Body Type: Тип кузова.
- Transmission Type: Тип трансмиссии.
- Registration Status: Статус регистрации.
Ссылка на страницу набора на kuggle: [Ultimate Car Price Prediction Dataset](https://www.kaggle.com/datasets/mohidabdulrehman/ultimate-car-price-prediction-dataset/data)
#### Оцифровка и нормализация данных
Для нормальной работы с данными, необходимо исключить из них все нечисловые значения.
После этого, представить все строковые значения параметров как числовые и очистить датасет от "мусора".
Для удаления нечисловых значений воспользуемся функцией `.dropna()`.
Так же мы удаляем первый столбец `Id`, так как при открытии файла в `pd` он сам нумерует строки.
Все нечисловые значения мы преобразуем в числовые с помощью `LabelEncoder`:
```python
label_encoder = LabelEncoder()
data['Location'] = label_encoder.fit_transform(data['Location'])
data['Company Name'] = label_encoder.fit_transform(data['Company Name'])
data['Model Name'] = label_encoder.fit_transform(data['Model Name'])
data['Engine Type'] = label_encoder.fit_transform(data['Engine Type'])
data['Color'] = label_encoder.fit_transform(data['Color'])
data['Assembly'] = label_encoder.fit_transform(data['Assembly'])
data['Body Type'] = label_encoder.fit_transform(data['Body Type'])
data['Transmission Type'] = label_encoder.fit_transform(data['Transmission Type'])
data['Registration Status'] = label_encoder.fit_transform(data['Registration Status'])
```
#### Формулировка задачи
Предсказать статус регистрации автомобиля (Registration Status) на основе других параметров.
#### Оценка эффективности
Для оценки точности модели будем использовать встроенный инструмент `accuracy_score`:
```python
accuracy = accuracy_score(y_test, y_pred)
```
#### Результаты
![](res.png "Точность")
### Вывод
Алгоритм показал высокую точность. Считаем, что алгоритм успешен.