在无监督学习中,训练样本的标记信息是未知的,网络是通过对无标记样本的学习来揭示数据的内在性质和规律。在无监督学习中,应用最多的就是聚类。
简单的理解聚类:聚类就是把数据划分为不同的组,组内的数据具有相似的属性和特征,组间的数据具有高度不相关的属性和特征。即把相似的东西分为一组。
那么,组内相似越大,组间差别越大,那么聚类的效果就会很好。
难点:如何评估(不知到分类结果到底怎么样),如何调参(分成多少类合适)
现在,就其中最简单的算法,kmeans进行学习。
基本概念:
簇:相似的堆的个数,用k值表示
质心:均值,即对数据各个维度取平均
距离的度量:常用欧式距离
优化目标:
具体例子:
- 图a:我们想要生成2堆数据,即簇为2,K=2。
- 图b:首先,我们先随机产生两个点,对应图中红×和蓝×。
- 图c:分别计算图中各点到红×和蓝×之间的距离,如果离红×比较近,那么这个点被归为红色点,反之,则归为蓝色点。
- 图d:经过步骤3中,分好了2个数据堆,如图d,分别计算红色堆和蓝色堆的质心,即在两个维度上的均值。对应图d中的红叉和蓝×
- 图e:同步骤3
- 图f:继续计算当前质心,更新。继续遍历所有数据,直到满足停止条件。
下图是kmean算法步骤,注意看停止条件。
这里停止条件的意思是,直到新质心的位置相比旧质心的位置不再改变,或者差值在一个很小的数内,就可以停止了。或者也可以把迭代次数作为停止条件。
- 优点:简单,适合常规的数据集
- 缺点:k值难以确定,复杂度比较高因为存在遍历,很难发现任意形状的簇。
**另外,刚开始随机初始点的选择,因此最终求得的簇的划分与随机选取的“簇中心”有关,这是因为kmeans算法收敛到了局部最小值,而非全局最小值。**既然对初值很敏感,可以做多次蒙特卡洛仿真求平均。