2016-11-23 8 views
-1

Я пытаюсь использовать k означает кластеризацию с помощью scikit learn.Hence, используя метод локтя, чтобы найти оптимальное значение k.K означает в scikit learn Ядро умерло - из-за длинных вычислений

def elbow(df, n): 
    kMeansVar = [KMeans(n_clusters=k).fit(df.values) for k in range(10, n)] 
    centroids = [X.cluster_centers_ for X in kMeansVar] 
    k_euclid = [cdist(df.values, cent) for cent in centroids] 
    dist = [np.min(ke, axis=1) for ke in k_euclid] 
    wcss = [sum(d**2) for d in dist] #TILL HERE THE CODE RAN PROPERLY 
    tss = sum(pdist(df.values)**2)/df.values.shape[0] 
    bss = tss - wcss 
    plt.plot(bss) 
    plt.show() 

В моем кадре данных 14 столбцов и 188233 строк. Когда я попытался передать весь файл данных функции, ядро ​​умерло. Когда я попытался передать только один столбец, даже в этом случае ядро ​​умерло. Когда я попытался сортировать, мне удалось выяснить, что код работает до строки, помеченной комментарием в приведенной выше функции. Пожалуйста, предложите мне, как решить эту проблему.

+0

Что вы подразумеваете под умершим? ваша программа бросает некоторую ошибку? –

+0

@WasiAhmad Нет, он не показывает никаких ошибок, скорее ноутбук перестает отвечать, а состояние ядра становится мертвым. – vikky

+0

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

ответ

0

Вместо того, чтобы перекомпостировать все искажения, почему бы вам не использовать inertia_, предоставляемый объектом k-mean?

Тогда вам не понадобится ваша проблемная линия (в которой используются неэффективные структуры dats).