Да, это возможное решение. Однако вы можете улучшить свою реализацию, следуя этому псевдокоду (для получения дополнительной информации см. Этот пост 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.