zoukankan      html  css  js  c++  java
  • unsupervised learning: K-means 算法

    k-means算法是目前最流行的,用得最多的一种clustering算法

    K-means算法

    如果我们想要将上图中的绿色的点分为两类,首先随机的选取两个cluster centroids(聚类中心),然后迭代(循环)地做两件事:cluster assignment和move centroids(图1)

    cluster assignment: 然后将训练集中的每个样本,根据是距离红色的cluster centroid近还是蓝色的cluster centroid近来进行分配cluster.(图2)

    move centroids:然后将所有红色的点的位置计算出平均值做为新的cluster centroid,同样所有的蓝色的点的位置计算出平均值做为新的cluster centroid.(图3)

    cluster assignment:根据新的cluster centroids来重新分配(根据距离远近)每个样本的cluster,即对每个样本重新进行染色(图4)

    move centroids:重新分配clusters后,再计算每个cluster的平均值做为新的cluster centroids.(图5)

    我们继续进行迭代,发现cluster centroids和分配的cluster不再变化了,意味着k-means算法收敛了,即在这个数据中发现两个cluster这个工作结束了

    K-means算法formally

    输入:K为我们希望将数据集分为K个clusters(以后会讲如何选择K),现在K做为输入为需要将data分为的cluster的个数。

    training set(没有y值,因为为非监督学习)

    x(i)为n维,而不是n+1维,不用加上x0=1

    cluster assignment step: 对于training data中的第一个点,计算c(i)(对每个样本进行染色)为距离最近的那个cluster centroid的下标值(1-K),注意uk中的k为小写,指的是centroid的下标,Kcluster centroids为大写,表示总共有K个cluster.通常我们喜欢用距离的平方来求最小值.

    move centroid step: 重新计算每个cluster的cluster centroid(根据染色后的平均值)

    如果某个cluster centroid没有一个点分配给它,那么怎么办呢?通常情况下,我们是将这个cluster centroid给移除掉,这样就会得到K-1个clusters;如果就是要K个clusters,怎么办呢?办法是重新找一个cluster centroid.但是将这个cluster centroid给移除掉这种方法更常使用。

    K-means在不能明显区分的clusters上的应用

    左边图为k-means在明显分为三个clusters上的数据集上的应用。

    K-means也可以应用在如右图所示的那样,数据集看上去是没有明显的cluster的区分的。这是一个T-shirt size的例子,如你想要设计三种大小(S,M,L)的T-shirt,但是不知道每种大小应设计为多大,这时我们将要穿我们T-shirt的人的身高体重(这些是影响T-shirt大小的主要因素)做个统计,如左图所示,然后应用K-means算法将这些数据分为三个cluster,然后分别针对每个cluster来设计不同size的衣服的大小。=>市场细分的例子,使用K-means将我的市场划分为三部分,这样就能区别对待三类不同的顾客群体,更好地适应他们不同的需求(如S,M,L不同size的衣服那样)

    总结

    1. 先随机选取cluster centroids(聚类中心)
    2. 对每个样本点进行cluster assignment step(染色)
    3. move centroid step:根据染色后的结果,再重新计算新的cluster centroids(聚类中心)
    4. 重复以上2,3步骤,直到收敛(cluster centroids与染色结果不再改变)
  • 相关阅读:
    如何借助BM算法轻松理解KMP算法
    如何实现文本编辑器中的查找替换功能?——BF算法
    C++中求数组长度与memset的用法
    什么是素数/质数/合数
    深度和广度优先搜索:如何找出社交网络中的三度好友关系?
    如何存储微博、微信等社交网络中的好友关系?
    为什么说堆排序没有快速排序快?
    HTML5中标记与特殊属性
    margin外边距问题
    html热点区域
  • 原文地址:https://www.cnblogs.com/yan2015/p/5229066.html
Copyright © 2011-2022 走看看