我正在尝试使用Sklearn库在Python中使用Kmean算法。我的问题是,这有什么办法可以使我产生升序的中间状态。例如,这是我的代码:
kmeanDataFrame = pd.DataFrame({'x':X,'y':Y})
kmean = KMeans(init='k-means++',n_clusters = 6,random_state=0, n_init=10)
kmean.fit(kmeanDataFrame)
print(kmean.labels_)
print(kmean.cluster_centers_)
这里X和Y是数组,我提供了不同年份的国家人口排名数据。例如,当我给它2011时,中心会不断变化,它会生成这样的中心:
[[ 4.22019639 2.88409457]
[ 1.15267995 0.7954897 ]
[ 2.49913831 1.64727509]
[-1.71104298 -1.54454861]
[ 6.99545873 6.08921786]
[ 0.20412018 0.0517948 ]]
当我在2012年过世时,它的生成方式如下:
[[ 0.94596298 0.64243913]
[ 4.2710023 3.0083124 ]
[-0.27485671 -0.35197801]
[ 2.41465001 1.59198646]
[-6.514922 -4.53656495]
[ 7.77638888 7.18733868]]
有什么方法可以像这样按升序生成质心(第一个负点,然后是正点):
[[-1.71104298 -1.54454861],
[ 0.20412018 0.0517948 ],
[ 1.15267995 0.7954897 ],
[ 2.49913831 1.64727509],
[ 4.22019639 2.88409457],
[ 6.99545873 6.08921786]]
[生成工具后,可以使用python中的排序功能对工具列表进行排序。如下面的代码行
sorted_Centers =已排序(kmean.cluster_centers _)
假设您碰巧具有以下集群:
from sklearn.cluster import KMeans
np.random.seed(42)
X = np.random.rand(10000)
Y = np.random.rand(10000)
kmeanDataFrame = pd.DataFrame({'x':X,'y':Y})
kmean = KMeans(init='k-means++',n_clusters = 6,random_state=0, n_init=10)
kmean.fit(kmeanDataFrame)
cc = kmean.cluster_centers_
print(cc)
[[0.14575507 0.27937172]
[0.76783063 0.80079467]
[0.47849743 0.14838875]
[0.2147012 0.79923057]
[0.48920425 0.5285314 ]
[0.83935504 0.27354554]]
然后您可以沿第0列进行排序:
idx = np.argsort(cc[:,0])
cc[idx,:]
array([[0.14575507, 0.27937172],
[0.2147012 , 0.79923057],
[0.47849743, 0.14838875],
[0.48920425, 0.5285314 ],
[0.76783063, 0.80079467],
[0.83935504, 0.27354554]])
或第一列:
idx = np.argsort(cc[:,1])
cc[idx,:]
array([[0.47849743, 0.14838875],
[0.83935504, 0.27354554],
[0.14575507, 0.27937172],
[0.48920425, 0.5285314 ],
[0.2147012 , 0.79923057],
[0.76783063, 0.80079467]])