【问题标题】:how to choose k value in k-medoids using elbow method?如何使用肘法在 k-medoids 中选择 k 值?
【发布时间】:2017-03-19 22:12:55
【问题描述】:

我正在尝试这段代码: https://gist.github.com/jaganadhg/9a25fb531df47beb13e3

import pylab as plt
import numpy as np
from scipy.spatial.distance import cdist, pdist
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris

iris = load_iris()

k = range(1,11)

clusters = [KMeans(n_clusters = c,init = 'k-means++').fit(iris.data) for c in k]
centr_lst = [cc.cluster_centers_ for cc in clusters]

k_distance = [cdist(iris.data, cent, 'euclidean') for cent in centr_lst]
clust_indx = [np.argmin(kd,axis=1) for kd in k_distance]
distances = [np.min(kd,axis=1) for kd in k_distance]
avg_within = [np.sum(dist)/iris.data.shape[0] for dist in distances]

with_in_sum_square = [np.sum(dist ** 2) for dist in distances]
to_sum_square = np.sum(pdist(iris.data) ** 2)/iris.data.shape[0]
bet_sum_square = to_sum_square - with_in_sum_square

kidx = 2

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(k, avg_within, 'g*-')
ax.plot(k[kidx], avg_within[kidx], marker='o', markersize=12, \
markeredgewidth=2, markeredgecolor='r', markerfacecolor='None')
plt.grid(True)
plt.xlabel('Number of clusters')
plt.ylabel('Average within-cluster sum of squares')
plt.title('Elbow for KMeans clustering (IRIS Data)')

并且对 k-means 没有任何问题。 但是当我将 k-means 更改为 k-medoids

clusters = [KMedoids(n_clusters = c).fit(iris.data) for c in k]

(我使用 pyclust k-medoids https://github.com/mirjalil/pyclust/blob/master/pyclust/_kmedoids.py

我得到了“无”数组

[无,无,无,无,无,无,无]

怎么了? 谁能帮忙?

【问题讨论】:

    标签: python cluster-analysis k-means


    【解决方案1】:

    因为您下载但不理解的代码的fit 方法没有返回值。

    添加return selfreturn self._clusters 或与fit 方法类似的方法,它的行为可能符合预期,至少对于这一步而言。

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 2017-05-12
      • 2020-12-16
      • 2018-12-15
      • 2021-11-24
      • 2021-04-29
      相关资源
      最近更新 更多