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

Python 计算数据帧中kmeans的损失函数,python,pandas,join,cluster-analysis,k-means,Python,Pandas,Join,Cluster Analysis,K Means,我有一个包含5列的数据框。我试图对三个变量X、Y和Z的点进行聚类,并找到kmeans聚类的损失函数。下面的代码处理了这个问题,但是如果我用160000行为我的真实数据帧运行这个,它将永远需要!我想这可以做得更快 PS:sklearn中的KMeans模块似乎没有提供丢失功能,这就是我编写自己代码的原因 from sklearn.cluster import KMeans import numpy as np df = pd.DataFrame(np.random.randn(1000, 5),

我有一个包含5列的数据框。我试图对三个变量
X
Y
Z
的点进行聚类,并找到kmeans聚类的损失函数。下面的代码处理了这个问题,但是如果我用
160000
行为我的真实数据帧运行这个,它将永远需要!我想这可以做得更快

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)

似乎
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
模块计算损失函数的最快方法

惯性:浮动

样本到最近簇中心的距离总和


避免使用诸如for循环之类的Python代码。翻译速度慢。矢量化你的行动!为什么scipy loss和ahoosh的方法不同?