Пройдите по этому алгоритму неконтролируемого обучения с изображениями и кодом Python

K-средние - это неконтролируемый алгоритм кластеризации, который распределяет точки данных по группам на основе сходства.

Он интуитивно понятен, прост в реализации, быстр и классифицируется как MECE.

В своей работе я использовал его, чтобы находить кластеры (также известные как выбор ярлыков) в ситуациях, когда я не был экспертом в предметной области.

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

Как это работает?

K-means - это модель без учителя, поэтому данные не помечены. Но модель математически распределяет каждую точку данных в кластер.

После инициализации модели мы должны заранее определить количество кластеров. Необходимость делать это заранее - недостаток модели. В этом примере я выберу k=2 (или 2 кластера).

Здесь у нас есть некоторые двумерные немаркированные данные.

1. Произвольно создайте центроиды (центры кластеров) в том же векторном пространстве, что и данные.

2. Каждая точка данных привязана к ближайшему центроиду.

Эта близость основана на евклидовом расстоянии, которое приравнивается к измерению расстояния между двумя точками с помощью линейки.

Результат - наши кластеры. Но это только наша первая итерация.

3. Центроиды перемещаются к местоположению среднего числа точек в их кластере.

Затем мы повторяем привязку каждой точки к ближайшему центроиду.

Это дает нам кластеры согласно нашей второй итерации.

4. Повторяйте этот процесс, пока кластеры не перестанут двигаться.

Это оно?

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

Таким образом, мы повторяем весь этот процесс несколько раз и принимаем результат с наименьшими совокупными вариациями по кластерам.

Пример в Sklearn

1. Сгенерируйте «случайные» кластеры с помощью sklearn's make_blobs.

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
data = make_blobs(
    n_samples=300, 
    n_features=2, 
    centers=5, 
    cluster_std=1.75, 
    random_state=11
)
plt.scatter(data[0][:,0], data[0][:,1])

2. Импортируйте и запустите K-Means.

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5)
kmeans.fit(data[0])
y = kmeans.fit_predict(data[0])

3. Графические кластеры

for idx,color in enumerate(['green','lightblue','orange','purple','teal']):
    plt.scatter(
        points[y ==idx,0], 
        points[y == idx,1], 
        s=30, 
        c=color
    )

Заключение

Это отличный неконтролируемый алгоритм для исследования данных, потому что он очень прост.

Как упоминалось ранее, я использовал его для исследования данных и помощи в выборе кластеров (также называемых ярлыками). Но я бы никогда не использовал его непосредственно в продакшене. Как только я найду свои кластеры, контролируемые классификаторы (анекдотично) намного превзойдут неконтролируемые модели.

С другой стороны, простота также является недостатком этой модели. В реальной жизни кластеры не всегда расположены равномерно, а элементы редко бывают равными по весу.

Тем не менее, это отличное место для начала и первый метод обучения без учителя, который я рекомендую изучить.