赞
踩
=======================================================================
Machine Learning notebook
Python机器学习基础教程(introduction to Machine Learning with Python)
https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans
=======================================================================
K均值聚类是最简单也是最常用的聚类算法之一。它试图找到代表数据特定区域的簇中心(cluster center)。算法交替执行以下两个步骤:将每个数据点分配给最近的簇中心,然后将每个簇中心设置为所分配的所有数据点的平均值,如果簇的分配不再发生变化那么算法结束。
class sklearn.cluster.KMeans(n_clusters=8, #簇中心的个数,默认为8,可指定。
init=’k-means++’,
n_init=10,
max_iter=300,
tol=0.0001,
precompute_distances=’auto’,
verbose=0,
random_state=None,
copy_x=True,
n_jobs=None,
algorithm=’auto’)
聚类算法与分类算法有些相似,每个元素都有一个标签,但并不存在真实的标签,因此标签本身并没有先验意义,再次运行算法可能会得到不同的标签,原因在于初始化的随机性质。
1.K均值的失败案例
即使你知道给定数据集中簇的正确个数,k均值可能也不是总能找到它们。每个簇仅尤其中心定义,这意味着每个簇都是凸形(convex)。因此,K均值只能找到相对简单的形状。K均值还假设所有簇在某种程度上具有相同的直径,它总是将簇之间的边界刚好画在簇中心的中间位置。
K甚至还假设所有方向对每个簇都同等重要。
K均值无法识别非球形簇。
K均值无法识别具有复杂形状的簇
2.矢量量化,或者将K均值看做分解
PCA试图找到数据中方差最大的方向,而NMF试图找到累加的分量,这通常对应与数据的“极值”或“部分”。两种方法都试图将数据点表示为一些分量之和。与之相反,K均值则尝试利用簇中心来表示每个数据点。你可以将其看作仅用一个分量来表示每个数据点,该分量有簇中心给出。这种观点将K均值看作是一种分解方法,其中每个点用单一分量表示,这种观点被称为矢量化(vector quantization)
利用K均值做矢量量化的一个有趣之处在于,可以用比输入维度更多的簇来对数据进行编码。
K均值是非常流行的聚类算法,因为它不仅相对容易理解和实现,而且运行速度也相对较快。K均值可以轻松扩展到大型数据集,scikit-learn甚至在MinBatchKMeans类中包含了一种更具扩展性的变体,可以处理非常大的数据集。
K均值的缺点之一在于,它依赖于随机初始化,也就是说,算法的输出依赖于随机种子。默认情况下,scikit-learn用10中不同的随机初始化将算法运行10次,并返回最佳(簇的方差之和最小)结果。
K均值还有一个缺点,就是对簇形状的假设的约束性较强,而且还要求指定所要寻找的簇的个数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。