计算熊猫数据框中kmeans的损失函数

Posted

技术标签:

【中文标题】计算熊猫数据框中kmeans的损失函数【英文标题】:Calculating Loss function for kmeans in pandas dataframe 【发布时间】:2017-12-23 11:59:58 【问题描述】:

我有一个包含 5 列的数据框。我正在尝试对三个变量 XYZ 的点进行聚类,并找到 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 循环。口译员很慢。向量化您的操作! 【参考方案1】:

似乎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]

话虽如此,我仍然有兴趣知道使用sklearnkmeans 模块计算损失函数的最快方法。

【讨论】:

为什么scipy loss和ahoosh的方法不一样?【参考方案2】:

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

惯性_:浮动

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

【讨论】:

以上是关于计算熊猫数据框中kmeans的损失函数的主要内容,如果未能解决你的问题,请参考以下文章

在熊猫数据框中计算速度的函数

为高精度计算损失函数的权重

聚类算法--KMeans

计算 SVM 损失函数的梯度

如何计算熊猫数据框中组的每对行之间的函数

10个常用的损失函数及Python代码实现