非监督学习之Kmeans算法
Keyword:
Clustering, Dimensionality Reduction
- Example:
Clustering Movie: 两人喜好的电影被聚类分为Class A和Class B,这些数据没有label,但是通过聚类可以看出这两类数据之间的区别。 - K-means Algorithm:
Step1: Assign
随机的画2个聚类中心,分配距离每个聚类中心近的点
Step2: Optimize
移动clustering center使得center到其他点的距离的平方quadratic最小得到下图
现在分类情况如下,对每个聚类中心分配的点发生改变
继续迭代iteration之后,聚类中心将移动聚类点群的中间 - K-means的算法sklearn实现
sklearn.cluster.KMeans
from sklearn.cluster import KMeans
import numpy as np
X = np.array([[1, 2], [1, 4], [1, 0],
… [10, 2], [10, 4], [10, 0]])kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
kmeans.labels_
array([1, 1, 1, 0, 0, 0], dtype=int32)kmeans.predict([[0, 0], [12, 3]])
array([1, 0], dtype=int32)kmeans.cluster_centers_
array([[10., 2.],
[ 1., 2.]])
Parameter:
n_clusters: cluster的数量,需根据实际情况自行设置
max_iter: 迭代次数 default=300
n_init: 不同初始化的数量, 初始化时的状态可能不同,cluster位置不同导致最终结果不同,所以ensemble了不同初始化,即使一些最终聚类结果不同但是综合来看结果是正确的。
限制: k-means算法相当于hill climb算法,它的结果很大程度上依赖于初始条件,当初始条件不同,可能导致不同的结果。例如下方的图示,三个cluster points最终的分类,形成local minimum即非最优解,局部的小聚类形成,稳定不会再移动。cluster越多,local minimun则可能越多。所以要求该算法要多进行几次。