IIS_2023_1/basharin_sevastyan_lab_4
2023-12-02 18:43:01 +04:00
..
clust1.png basharin_sevastyan_lab_4 is ready 2023-12-02 18:43:01 +04:00
clust2.png basharin_sevastyan_lab_4 is ready 2023-12-02 18:43:01 +04:00
Data_pakwheels.csv basharin_sevastyan_lab_4 is ready 2023-12-02 18:43:01 +04:00
elbow.png basharin_sevastyan_lab_4 is ready 2023-12-02 18:43:01 +04:00
engine_clust.png basharin_sevastyan_lab_4 is ready 2023-12-02 18:43:01 +04:00
main.py basharin_sevastyan_lab_4 is ready 2023-12-02 18:43:01 +04:00
mileage_clust.png basharin_sevastyan_lab_4 is ready 2023-12-02 18:43:01 +04:00
README.md basharin_sevastyan_lab_4 is ready 2023-12-02 18:43:01 +04:00

Лабораторная работа 4. Вариант 5.

Задание

Использовать метод кластеризации по варианту для набора данных, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо он подходит для решения сформулированной вами задачи. Алгоритм кластеризации: K-means

Как запустить

Для запуска программы необходимо с помощью командной строки в корневой директории файлов прокета прописать:

python main.py

Используемые технологии

  • Библиотека pandas, используемая для работы с данными для анализа scv формата.
  • sklearn (scikit-learn): Scikit-learn - это библиотека для машинного обучения и анализа данных в Python. Из данной библиотеки были использованы следующие модули:
  • KMeans - реализация алгоритма K-means для кластеризации данных.
  • LabelEncoder - это класс из scikit-learn, используемый для преобразования категориальных признаков (например, строки) в числовые значения.
  • matplotlib.pyplot - библиотека для визуализации данных, используется для построения графика метода локтя и визуализации результатов кластеризации.

Описание работы

Описание набора данных

Набор данных: набор данных о цене автомобиля в автопарке.

Названия столбцов набора данных и их описание:

  • 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

Оцифровка и нормализация данных

Для нормальной работы с данными, необходимо исключить из них все нечисловые значения. После этого, представить все строковые значения параметров как числовые и очистить датасет от "мусора". Для удаления нечисловых значений воспользуемся функцией .dropna(). Так же мы удаляем первый столбец Id, так как при открытии файла в pd он сам нумерует строки.

Все нечисловые значения мы преобразуем в числовые с помощью LabelEncoder:

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'])

Выбор признаков для кластеризации:

features = ['Price', 'Model Year', 'Mileage', 'Engine Capacity']

Данный набор признаков был выбран, так как многие из них показали высокую важность в предыдущей лабораторной работе.

Метод локтя

Алгоритм K-средних требует четкого задание количества кластеров. Выберем количество кластеров, используя метод локтя.

from sklearn.cluster import KMeans

inertia = []
for n_clusters in range(1, 11):
    kmeans = KMeans(n_clusters=n_clusters, random_state=42)
    kmeans.fit(data[features])
    inertia.append(kmeans.inertia_)

В результате мы получим следующий график: Анализирую этот график, видим, что примерно на 5-6 шаге инерция меняется уже не значительно. Задаем значение кластеров равным 5.

optimal_clusters = 5

Применение K-means

K-means применяется с оптимальным числом кластеров, вычисленным на предыдущем этапе.

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=optimal_clusters, random_state=42)
data['Cluster'] = kmeans.fit_predict(data[features])

Интерпретация результатов

Для каждого кластера выводятся статистические характеристики выбранных признаков.

Визуализация результатов

Результаты кластеризации визуализируются на графике рассеяния, например, по двум признакам.

Вывод

На основе графиков и интерпретированных результатов можно сделать вывод, что кластеризация проведена верно. Коэффициент силуэта: 0.62. Коэффициент может варьироваться от -1 до 1, можно сказать, что оценка высокая и метод K-means подходит для решения поставленной задачи.