KMEANS
DBSCAN算法用于聚类(详见视频)
之前套路是找到目标函数,不断优化
现在是无监督问题,没有了标签。有标签情况下便于多种不同评估,基于预测值和真实值(即标签值)的差异来评估模型的,通过评估值也便于选择参数
聚类目标:将给定数据分成K个簇,并给出每个数据对应的簇中心
首先告诉机器需要把数据分成多少堆,即指定K值,k=3 表示将数据聚类成3个堆,在数据中随机生成3个点(也可以说是3个质心),K值的位置如果没有选择好,可能出现分堆错误的情况,如下图
错误分堆
正确分堆
初始点的位置选择很关键
计算样本点到簇心距离:分堆
更新质心:即取均值,用于之后的迭代。一堆数据怎么取质心?如二维,所有数据点横坐标的均值和纵坐标的均值就可求出质心(还是通过计算得出的质心,不是什么选中心点)
距离度量:遇到x值很小,y值很大情况需要将数据标准化。否则就会错误认为相似度主要由y来决定,x基本无影响
另一个需要考虑的是离群点的处理:离群点或者少量噪声数据对均值会产生较大影响,导致中心偏移
优化目标:又到了常规套路,所有点到簇心的距离越小越好。数据点到质心距离和最小/直到质心位置不再改变
图解工作流程:
注意c图中,蓝色的两个点本来应该属于红色簇,但是由于离蓝色中心点近原因被错误分到蓝色簇堆了
c图不同颜色代表不同簇,但期望的分队应该是a图的情况,所以现在需要更新质心重新计算了
所以每次更新质心都需要遍历样本的所有数据点
直到f图中的质心基本不再改变
视频中有一个网址可以自己体会一下流程是怎么改变的
能可视化展示,但是不知道数据标签,也就不知道数据应该分为多少堆,K值的选取很难(可以设置不同值的簇看下效果来决定)
适合常规数据集:眼睛都能看出分堆情况(如上图)
对于特殊形状的簇,很难用KMEANS处理,如下:
期望能分成里外两堆,实际情况无法做到
KMEANS可以用作图像压缩(压缩出来了能还原回去吗)
通过for k in range(2,20)多次试验结果选择出最合适的K值
书本推荐方法:手肘法,根据K值和误差平方和的曲线图确定出K
视频中提及到:模型的轮廓系数(用到后再具体看)
算法缺点:
人工确定初始K值
受初始值的位置和个数的影响较大
容易受到离群点和噪声点的影响