kMeans是一种简单的聚类算法,是一种无监督学习算法
聚类就是把同一类的数据聚在一起。意思是使同一类的数据相似度比较大,类别之间的数据相似度比较小。或者是距离。
聚类的基本思想:
以空间中k个点为形心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各簇的类中心的值,直至得到最好的聚类结果。
算法如下:
(1)选择k个初始类中心
(2)迭代:
1)把每个样本归类
2)更新类中心
(3)迭代停止条件(满足一个即可):
1)迭代次数达到设定的次数
2)最小均方差小于设定值
3)簇中心变化率到达设定值
关键是:
1. 类中心如何初始化?
2. 数据的相似度/距离如何表示?曼哈顿距离还是欧式距离
3. 类中心如何更新?平均值还是加权平均值还是中位数
from sklearn.cluster import KMeans
import numpy as np
X = np.array([[1, 2], [1, 4],[1, 0],[4, 2],[4, 4],[4, 0]])
model= KMeans(n_clusters=2, random_state=0)
model.fit(X)
model.labels_
# array([0, 0, 0, 1, 1, 1], dtype=int32)
kmeans.predict([[0, 0], [4, 4]])
# array([0, 1], dtype=int32)
kmeans.cluster_centers_
#array([[ 1., 2.],
# [ 4., 2.]])