无监督学习
机器学习常分为监督学习与无监督学习
监督学习中,样本本身带有标签
如图的回归算法,每个数据都带有标签
而非监督学习中,作为标签的y(i)遍不复存在,模型的输入只有X
如下图所示:
聚类
在没有标签的数据中,我们总希望,能有一种算法,将相似特征的数据分到一起,给不同的数据归归类,从而在数据中找到规律或者其他可以利用的价值,聚类便是做这件事的
聚类中有一个很经典的算法 K-means algorithm (k均值算法)
接下来我们就来了解了解这个算法具体的实现过程
K-means
首先,拿到了一个不含标签的数据集,可视化之后,我们给数据集中任取两个点,并一个用红色一个用蓝色
接下来,测量各个数据到这两个点的距离,如果更靠近红色,我们就将点染成红色
我们会得到以下情况
接下来,我们要将我们刚开始生成的点进行移动,
我们分别取红色的点和蓝色的点在这个图上的平均值,将红色的×和蓝色的×分别移到对应的位置
我们会得到以下的情况
此时,重复第一步,将更靠近红色×的点染成红色,将更靠近蓝色×的点染成蓝色
会得到以下情况
再继续移动红色和蓝色的×,
再进行染色和移动,最终会得到以下结果
以上便是k均值算法的基本运行流程
这里注意,在k均值算法中,我们不再给各个数据的最前面添加 1 了,所以x(i)的维度为n(n为特征个数,不再有x0(i)=1了)
以下为其基本运行流程的总结
c(i)表示x(i)被分到的位置
例如,我们有K个分类,给各个分类编号1,2,3,4,5,6…
c(3) = 4 就表示 x(3)这个数据被分到了第4类
μk 则表示第k个聚类中心的位置,每一轮之后都会更新
随机初始化
在k均值算法中,我们需要初始化各个聚类中心的位置,我们基本的做法,是随机从数据集中挑出K个,使
μ(i) = x (i)
但是这样子做,结果受初始化选择的影响特别大,不同的初始化会导致完全不同的分类结果
上图中,因为不同的初始化结果,得到了三种完全不同的分类结果
那么,我们如何更大几率地得到一个较好的结果呢?
我们的做法就是,尝试多次初始化结果,并取其代价函数最小的那个选项
基本流程如下
需要注意的是,这种方法一般对K的值较小的情况效果比较好(一般2-10之间),而对于K的值非常大
的情况,随机初始化的次数多少对其结果的影响并不特别大
如何选择K的值?
刚刚说了这么多,但是还未提过K的值应该如何选择
大部分情况下,我们在将数据可视化之后,可以人为的给选择K的数值,
一个数据集能分为几类,其实是一个非常主观的问题,如下图
我可以说这里分为四类比较好,也可以说分为两类,其实并没有一个百分百的标准
这里我们介绍一种方法,其被称为“肘部法则”
我们画出代价函数关于K的数量的函数图像
在左图中,当K = 3 时,我们很明显的感觉到,代价函数岁K的变化的剧烈程度一下子下降了,而这个点像一个转折一样,也正如人手臂的手肘处,我们经常挑选手肘处作为我们聚类算法中K的值
但是,我们并不能期望手肘法则在任何情况下都有很好的表现,因为更多时候,函数图像可能偏向于
右图这种更加光滑的曲线
如果手肘法则无法给出一个令你满意的结果,那么我们也可以根据问题的实际情况去选择一个合适的K
例如,如果你是一个服装店的老板,要为自己的新款衣服设计尺寸,则可以选择,s, m,l 三种尺寸,此时K就等于3,当然也可以有更多尺寸,此时K就跟着变化
此时,就需要你动用你灵活的大脑,为实际问题选择一个合适的K,从而得到更加满意的效果
欢迎友善的交流与指正