Кластеризация в Python: разница в результате из-за использования матрицы против фрейма данных? Почему это происходит? - PullRequest
0 голосов
/ 12 февраля 2020

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

Подход sample1 использует матрицу X, а подход sample2 использует orignal dataframe.

Кажется, я не понимаю, почему результаты отличаются?

Кто-нибудь может объяснить?

ageinc_df:
   income  age  z_income     z_age
0  101743   58  0.550812  1.693570
1   49597   27 -0.777331 -1.130565
2   36517   52 -1.110474  1.146963
3   33223   49 -1.194372  0.873660
4   72994   53 -0.181416  1.238064
#Sample1
X = ageinc_df[['z_income','z_age']].as_matrix()
cluster_assignments = model.fit_predict(X)
centers = model.cluster_centers_

import numpy as np
#Following line is in question
print(np.sum((X - centers[cluster_assignments]) ** 2))

приводит всего к 1189.7476232504307

против (в дальнейшем я решил не использовать матрицу X)

#Sample2
cluster_assignments1 = model.fit_predict(ageinc_df[['z_income','z_age']])
centers = model.cluster_centers_

import numpy as np

#matrix is replaced by dataframe
print(np.sum( (ageinc_df[['z_income','z_age']] - centers[cluster_assignments1]) ** 2))

приводит к: z_income 191.516452 z_age 998.231171

1 Ответ

2 голосов
/ 12 февраля 2020

Если вы посмотрите на второй результат, у вас будет 191.51 + 998.2311 = 1189.74, и вы найдете первый результат.

Когда вы работаете с матрицей, np.sum добавьте все коэффициенты, в строку и столбцы , Вам нужно использовать опциональную ось, если вы хотите суммировать только по специальной оси.

В вашем коде на фрейме данных он будет суммироваться по столбцам: так как у вас есть метки на столбцах, функция не естественно смешать количество.

...