Введение
Неконтролируемое машинное обучение включает в себя обучение компьютера работе с немаркированными и неклассифицированными данными, что позволяет алгоритму работать с этими данными без контроля. В отличие от обучения с учителем, данные о предварительном обучении недоступны, поэтому задача машины — упорядочить несортированные данные на основе сходств, шаблонов и вариаций.
Кластеризация — это неконтролируемый метод машинного обучения, целью которого является определение подгрупп в наборах данных. Одним из популярных алгоритмов кластеризации является KMeans, который делит наблюдения на несколько групп (k кластеров). Этот алгоритм часто применяется в таких областях, как сегментация рынка, когда объекты внутри одного кластера больше похожи друг на друга, чем на объекты вне кластера.
Я буду применять метод кластеризации KMeans для набора данных о рыбе.
Кластеризация KMeans в Python
Импортируйте соответствующие библиотеки и загрузите данные
# Import necessary packages import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.pipeline import make_pipeline from sklearn.preprocessing import StandardScaler # Load the fish data from the CSV file and store it in the 'fish' variable fish = pd.read_csv('datasets/fish.csv', header=None)
KMeans, реализованный в библиотеке scikit-learn, напрямую не принимает кадры данных в качестве входных данных. Следовательно, важно преобразовать данные в массив, содержащий только числовые значения признаков, которые необходимо сгруппировать.
# Convert the fish data to a numpy array and store the data points (columns 1-5) in the 'points' variable # and the fish species (column 0) in the 'Species' variable arr = fish.to_numpy() points = arr[:, 1:6] Species = arr[:, 0]
Определить наилучшее количество кластеров
Определение подходящего количества кластеров имеет важное значение в кластерном анализе. Доступно несколько методов, но одним из наиболее часто используемых является метод локтя, представляющий собой эвристический подход к определению оптимального количества кластеров.
# Define a range of values for k, the number of clusters to use in k-means clustering ks = range(1, 9) # Create an empty list to store the inertia values for each k inertias = [] # Iterate over the range of k values for k in ks: # Create a KMeans object with k clusters and fit it to the data points kmeans = KMeans(n_clusters=k) kmeans.fit(points) # Append the inertia value of the k-means clustering to the 'inertias' list inertias.append(kmeans.inertia_) # Plot the values of k versus the corresponding inertia values as a line plot with markers plt.plot(ks, inertias, marker='o') plt.xlabel('Number of clusters') plt.ylabel('Inertia') plt.title('Elbow method for fish dataset') plt.show()
Кривая локтя показывает сумму квадратов расстояний каждой точки от кластеров (это можно узнать с помощью метода kmeans.inertia_) в зависимости от количества кластеров. Согласно кривой локтя, идеальное количество кластеров должно быть равно 4.
Выполните кластеризацию K-средних с оптимальным k.
Следующие шаги показывают, как выполнить кластеризацию k-средних в наборе данных, используя оптимальное значение для k, равное 4:
# Create a StandardScaler object to standardize the data points scaler = StandardScaler() # Create a KMeans object with 4 clusters km = KMeans(n_clusters=4, random_state=45) # Create a pipeline to chain the scaler and KMeans objects together pipeline = make_pipeline(scaler, km) # Fit the pipeline to the data points pipeline.fit(points) # Predict the labels of the data points using the pipeline labels = pipeline.predict(points) # Create a DataFrame to store the predicted labels and the true fish species df = pd.DataFrame({'Labels': labels, 'Species': Species}) # Print the DataFrame to see the predicted labels and true fish species side-by-side print(df)
Прежде всего создается объект StandardScaler: этот объект используется для стандартизации точек данных, что означает, что он масштабирует объекты так, чтобы их среднее значение равнялось 0, а стандартное отклонение равнялось 1. Это важно, потому что KMeans — это алгоритм, основанный на расстоянии, и он может быть чувствителен к масштабу объектов. Стандартизируя данные, вы гарантируете, что алгоритм одинаково обрабатывает все функции.
Затем создается объект KMeans с 4 кластерами: этот объект будет выполнять алгоритм кластеризации KMeans для точек данных, пытаясь найти 4 различных кластера.
Кроме того, функция make_pipeline используется для объединения объектов StandardScaler и KMeans. Это обеспечивает более эффективный рабочий процесс, позволяя обрабатывать данные как скалером, так и алгоритмом KMeans за один шаг.
После подгонки конвейера к точкам данных метки точек данных прогнозируются с помощью метода прогнозирования. Кроме того, этот метод назначает каждую точку данных одному из 4 кластеров.
DataFrame создается с использованием Pandas для одновременного хранения предсказанных меток и истинных видов рыб. Это может быть полезно для сравнения результатов алгоритма кластеризации с фактическими метками видов, что может помочь оценить производительность алгоритма.
Наконец, перекрестная таблица используется для обобщения взаимосвязи между двумя категориальными переменными, в данном случае, предсказанными метками и истинными видами рыб. Отображая количество точек данных в каждой комбинации предсказанной метки и истинного вида, мы можем получить представление о том, насколько хорошо наш алгоритм кластеризации группирует похожие точки данных вместе.
# Create a cross-tabulation table to count the number of data points # in each combination of predicted label and true fish species ct = pd.crosstab(df['Labels'], df['Species']) print(ct)
Таблица перекрестных таблиц дает ценную информацию о результатах кластеризации, показывая, как алгоритм KMeans сгруппировал виды рыб на основе их общих характеристик. В таблице подчеркивается особый характер видов щуки, а также демонстрируется сходство между другими видами, такими как плотва, корюшка и лещ. Этот анализ демонстрирует важность алгоритмов кластеризации для выявления скрытых закономерностей в данных и может служить основой для дальнейшего исследования или принятия решений в различных приложениях и различных областях.
В заключение, кластеризация KMeans — это простой, но эффективный метод кластеризации точек данных в группы на основе их сходства. Он широко используется в различных областях, таких как маркетинг, биология и обработка изображений. Понимание концепций кластеризации k-средних и способов ее применения на практике может быть ценным навыком для аналитиков данных и специалистов по машинному обучению.