【发布时间】:2017-12-23 11:59:58
【问题描述】:
我有一个包含 5 列的数据框。我正在尝试对三个变量 X、Y 和 Z 的点进行聚类,并找到 kmeans 聚类的损失函数。下面的代码可以解决这个问题,但是如果我使用160,000 行为我的真实数据帧运行它,它需要永远!我认为它可以做得更快。
PS:sklearn 中的 KMeans 模块似乎没有提供损失函数,这就是我编写自己的代码的原因。
from sklearn.cluster import KMeans
import numpy as np
df = pd.DataFrame(np.random.randn(1000, 5), columns=list('XYZVW'))
kmeans = KMeans(n_clusters = 6, random_state = 0).fit(df[['X','Y', 'Z']].values)
df['Cluster'] = kmeans.labels_
loss = 0.0
for i in range(df.shape[0]):
cluster = int(df.loc[i, "Cluster"])
a = np.array(df.loc[i,['X','Y', 'Z']])
b = kmeans.cluster_centers_[cluster]
loss += np.linalg.norm(a-b)
print(loss)
【问题讨论】:
-
避免使用 Python 代码,例如 for 循环。口译员很慢。向量化您的操作!
标签: python pandas join cluster-analysis k-means