计算pandas数据帧中kmeans的损失函数

时间:2017-07-18 14:32:55

标签: python pandas join cluster-analysis k-means

我有一个包含5列的数据框。我正在尝试将三个变量XYZ的点聚类,并找到kmeans聚类的损失函数。下面的代码处理了这个问题,但如果我为160,000行的真实数据帧运行它,它将永远需要!我认为它可以更快地完成。

PS:似乎KMeans中的sklearn模块没有提供损失函数,这就是我编写自己的代码的原因。

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)

2 个答案:

答案 0 :(得分:2)

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

  

inertia_:float

     
    

样本到最近的聚类中心的距离总和。

  

答案 1 :(得分:0)

似乎scipy包负责丢失功能,而且速度非常快。这是代码:

from scipy.cluster.vq import vq, kmeans, whiten
import numpy as np
df = pd.DataFrame(np.random.randn(1000, 5), columns=list('XYZVW'))
centers, loss = kmeans(df[['X','Y', 'Z']].values, 6)
df['Cluster'] = vq(features, centers)[0]

话虽这么说,我仍然有兴趣知道使用sklearn kmeans模块计算损失函数的最快方法。