在监督学习中, 我们的训练集包含标签, 如下图所示.
在无监督学习中, 训练集不含标签, 我们使用聚类算法来寻找数据集包含的特定结构. 如下图所示, 数据集可以分为两个不同的簇.
下图为聚类的一些应用.
这一节我们来介绍k-means算法, 如下图所示, 假设我们想要把下图中的无标签数据分为两个簇. 首先, 我们随机选取两个点作为cluster centroids, 然后计算出这些数据离这两个cluster centroids的距离, 它们离哪个cluster centroid近, 就将它们分配到哪个cluster centroid;(此时数据分为了两块, 我们将它们分别用红色和蓝色标记)我们将红色的cluster centroid移动到所有红色数据的均值的点, 将蓝色的cluster centroid移动到所有蓝色数据的均值的点. 最后重复上面两个步骤, 知道cluster centroid不能再移动为止.
整个过程如下图所示:
下面是k-means算法的通用描述.
输入为K和数据集, 注意这里不再需要添加x0=1
首先随机初始化K个 cluster centroid, 记作μK
Cluster assignment: 遍历所有数据, 若第i个数据离第k个cluster centroid最近, 则记为:c(i)=k.
Move centroid: 将第k个簇的均值赋值给μk.
对于没有明显区分的数据我们也可以使用k-means算法.
下图说明了该如何随机地选取cluster centroid.
随机初始化可能导致算法得到一个local optima, 如下图所示.
为了解决上述问题, 我们需要随机初始化多次, 然后计算出每次J
观察如下数据集, 它们应该分为几个簇呢?有的人会说两个, 也有的说四个. 这一节, 我们来讲该如何选择簇数.
我们使用Elbow method, 即描绘出J
另一种选择K的方法, 就是根据我们特定的目标去选. 例如, 在给T恤标尺码的时候, 如果我们想要分成三个尺码S, M, L, 那么我们就应该选择K=3;如果我们想要分成5个尺码XS, S, M, L, XL那么我们就应该选择K=5.
来源: http://www.92to.com/bangong/2017/10-31/30633855.html