我有一个包含5列的数据框。我正在尝试将三个变量X
,Y
和Z
的点聚类,并找到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)
答案 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
模块计算损失函数的最快方法。