IIS_2023_1/mashkova_margarita_lab_4/README.md

108 lines
8.8 KiB
Markdown
Raw 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.

# Лабораторная работа №4
## ПИбд-42 Машкова Маргарита (Вариант 19)
## Задание
C помощью метод кластеризации DBSCAN решить задачу:
Сгруппировать телефоны по объему аккумулятора, размеру экрана, RAM и прочим показателям.
Интерпретировать результаты и оценить, насколько хорошо он подходит для решения сформулированной задачи.
### Данные:
> Датасет о характеристиках мобильных телефонов и их ценах
>
> Ссылка на датасет в kaggle: [Mobile Phone Specifications and Prices](https://www.kaggle.com/datasets/pratikgarai/mobile-phone-specifications-and-prices/data)
### Модели:
> - DBSCAN
> **Note**
>
> Метод DBSCAN позволяет получить оптимальное разбиение точек на оптимальное количество кластеров,
а также выявить атипичные объекты (шум). Оценивается при помощи метрики `Силуэт (Silhouette Score)` - насколько
плотно объекты прилегают к центру кластера. Данная метрика оценивает качество кластеризации путем
измерения среднего значения силуэта для каждой точки данных.
Значение Silhouette Score находится в диапазоне от -1 до 1, где ближе к 1 означает лучшую кластеризацию.
Высокое значение Silhouette Score указывает на хорошую разделимость кластеров,
а низкое значение может указывать на перекрывающиеся кластеры.
## Запуск программы
Для запуска программы необходимо запустить файл main.py
## Используемые технологии
> **Язык программирования:** python
>
> **Библиотеки:**
> - `pandas` - предоставляет функциональность для обработки и анализа набора данных.
> - `sklearn` - предоставляет широкий спектр инструментов для машинного обучения, статистики и анализа данных.
## Описание работы программы
### Описание набора данных
Данный набор содержит характеристики различных телефонов, в том числе их цену.
Названия столбцов набора данных и их описание:
- **Id** - идентификатор строки (int)
- **Name** - наименование телефона (string)
- **Brand** - наименование бренда телефона (string)
- **Model** - модель телефона (string)
- **Battery capacity (mAh)** - емкость аккумулятора в мАч (int)
- **Screen size (inches)** - размер экрана в дюймах по противоположным углам (float)
- **Touchscreen** - имеет телефон сенсорный экран или нет (string - Yes/No)
- **Resolution x** - разрешение телефона по ширине экрана (int)
- **Resolution y** - разрешение телефона по высоте экрана (int)
- **Processor** - количество ядер процессора (int)
- **RAM (MB)** - доступная оперативная память телефона в МБ (int)
- **Internal storage (GB)** - внутренняя память телефона в ГБ (float)
- **Rear camera** - разрешение задней камеры в МП (0, если недоступно) (float)
- **Front camera** - разрешение фронтальной камеры в МП (0, если недоступно) (float)
- **Operating system** - ОС, используемая в телефоне (string)
- **Wi-Fi** - имеет ли телефон функция Wi-Fi (string - Yes/No)
- **Bluetooth** - имеет ли телефон функцию Bluetooth (string - Yes/No)
- **GPS** - имеет ли телефон функцию GPS (string - Yes/No)
- **Number of SIMs** - количество слотов для SIM-карт в телефоне (int)
- **3G** - имеет ли телефон сетевую функкцию 3G (string - Yes/No)
- **4G/ LTE** - имеет ли телефон сетевую функкцию 4G/LTE (string - Yes/No)
- **Price** - цена телефона в индийских рупиях (int)
Первоначально данные обрабатываются: все строковые значения признаков необходимо привести к численным.
Метод не требует предварительных предположений о числе кластеров,
но нужно настроить два других параметра: `eps` и `min_samples`.
Данные параметры это соответственно максимальное расстояние между соседними точками и минимальное число точек
в окрестности (количество соседей), когда можно говорить, что эти экземпляры данных образуют один кластер.
Далее выполняется два этапа предобработки данных:
1. Масшатабирование: Создается экземпляр класса `StandardScaler()`.
Метод `fit_transform(data)` этого класса применяется к данным, чтобы выполнить масштабирование.
Результат масштабирования сохраняется в переменной `X_scaled`.
2. Нормализация: Метод `normalize(X_scaled)` применяется к масштабированным данным `X_scaled`, чтобы выполнить нормализацию.
Результат нормализации сохраняется в переменной `X_normalized`.
Затем выполняется анализ главных компонент (PCA) на нормализованных данных и преобразование их в двумерное пространство.
Это позволяет снизить размерность данных и выделить наиболее информативные признаки.
Результат преобразования сохраняется в переменной `X_principal`.
Создается и обучается модель `dbscan` на нормализованных и масштабированных данных.
На основе всех признаков данные разбиваются на кластеры. В поле `labels` в алгоритме DBSCAN хранятся метки кластеров,
к которым были присвоены точки данных.
Каждая точка данных будет иметь свою метку, указывающую на принадлежность к определенному кластеру или на то,
что она не принадлежит ни одному кластеру и считается выбросом (кластер `-1`).
Вычисляется и выводятся в консоль количество кластеров и шумовых точек.
Качество кластеризации оценивается с помощью `silhouette_score` и выводится в консоль.
Отображается график кластеризации.
## Тесты
### Получившиеся кластеры и оценка качества кластеризации:
![Получившиеся кластеры](clusters.png)
### График кластеризации:
![График кластеризации](dbscan_plot.png)
Шумовые точки изображены фиолетовым цветом.
**Вывод:** исходя из полученных результатов, значение метрики "силуэт" составляет всего 2%, что указывает на низкое
качество кластеризации и перекрывающиеся кластеры. Метод кластеризации `DBSCAN` плохо работает на этих данных.