Может ли кто-нибудь предоставить более подробную информацию об атрибутах klean sklearn и проверке функции каждого метода? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть набор данных, который имеет 48000 строк и 24 столбцов, каждый столбец был нормализован, так что это значение между 0 и 1.

Я пытался сгруппировать данные в кривые, но я не уверен, что моя реализация верна:

cluster_num = 8
kclustering = KMeans(n_clusters=cluster_num, random_state=RAND).fit(df_reads)
kclustering.transform(df_reads)

Когда я смотрю на данные, я вижу:

>> kclustering.cluster_centers_[0]

array([ 0.44851436,  0.40071485,  0.37478944,  0.36488641,  0.37286438,
        0.4042693 ,  0.47056609,  0.502428  ,  0.47682049,  0.47377337,
        0.47723668,  0.49041012,  0.5107349 ,  0.53044935,  0.55766196,
        0.61032937,  0.66640804,  0.72395814,  0.77165046,  0.8449527 ,
        0.83843484,  0.75404816,  0.63712833,  0.5259275 ])

Я хотел бы подтвердить свое понимание kmeans на основе просмотра документации и исходного кода с веб-страницы sklearn :

Fit - Эта функция подгонит модель kmeans к данным, представленным как [n_samples, m_features], где в этом случае n равно 48000 выборок, а m равно 24 функциям.

Преобразование - это преобразовывает данные в пространство расстояния кластера. Основываясь на моем тестировании, это возвращает массив [n_samples, m_clusters], где n_samples равен 48000, а m_clusters равен 8 (как определено из объявления 8 кластеров выше), и показывает расстояние, которое каждая выборка находится от каждого кластера.

>> kclustering.transform(df_reads)[0]

array([ 0.76017856,  1.69920653,  0.81333364,  1.21883207,  1.65154547,
        0.83507006,  1.6426527 ,  1.35372735])

Predict - принимает другой набор данных [n_samples, m_features], соответствующий шагу 'Fit', и назначает номер кластера для каждого образца, возвращая массив размера [1, n_labels], где n равно 48000 в этот случай.


Я видел вызов метода 'transform' в примере, который посмотрел вверх, но необходим ли этот шаг преобразования? Cluster_centers_ точно так же с и без этой строки:

kclustering.transform(df_reads)

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

Исходя из моего понимания, преобразование преобразует набор данных [48000, 24] в [48000, 8] с расстоянием от каждого назначенного кластера, но преобразование фактически не вычисляет расстояние, этот шаг, кажется, происходит в вызов 'fit', потому что для параметра 'precompute_distances' по умолчанию установлено значение 'auto', где в документации указано:

‘auto’: не рассчитывать расстояния, если n_samples * n_clusters> 12 млн. Это соответствует примерно 100 МБ на одну работу с использованием двойной точность.

Является ли единственной причиной того, что precompute_distances никогда не устанавливается в True из-за проблем с памятью? Если precompute_distances был установлен в False, в этот момент был бы необходим вызов «Transform»?

Наконец, 24 объекта были извлечены из исходного кадра данных, если я хочу сопоставить метки кластера каждого образца обратно с исходными записями, было бы так же просто, как использовать pd.concat () в kmeans.labels результат с исходным кадром данных, чтобы узнать, какой первичный ключ назначен для каждой метки?

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

Спасибо!

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