Последовательные k-средства - PullRequest
1 голос
/ 05 августа 2020

Могу ли я использовать координаты cluster_center из предыдущего Kmeans fit в качестве аргумента инициализации для последовательного обновления координат cluster_center по мере поступления новых данных? Есть ли у этого метода недостатки?

ОБНОВЛЕНО Онлайн-версия Scikit изучает K-средства:

KM = KMeans(n_clusters=3, random_state = 200, n_init = 1)
ni = 0

Until interrupted: 

for x in data:

    KM_updated = KM.fit(x)

    Updated_centroids(i) = KM_updated.cluster_centers_(i) + 1/len(KM_updated.labels_(i) + 1) * (x - KM_updated.cluster_centers_(i))
            
    KM = KMeans(n_clusters=3, random_state = 200, init = Updated_centroids(i), n_init = 1)

1 Ответ

1 голос
/ 05 августа 2020

Да, это возможное решение. Однако вы можете улучшить свою реализацию, следуя этому псевдокоду (для получения дополнительной информации см. Этот пост Online k-means clustering ):

Make initial guesses for the means m1, m2, ..., mk
Set the counts n1, n2, ..., nk to zero
Until interrupted
    Acquire the next example, x
    If mi is closest to x
        Increment ni
        Replace mi by mi + (1/ni)*( x - mi)
    end_if
end_until

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

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

Эта точная реализация недоступна в Scikit Learn. Наиболее близкой реализацией, вероятно, является оценка MiniBatchKMeans с методом partial_fit.

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