【机器学习】K-means(非常详细) - 知乎
【目标检测】K-means计算anchors_机器不学习我学习的博客-CSDN博客_目标检测k-means
1.K-means算法
(1)定义:
K-means 是我们最常用的基于欧式距离的聚类算法,其认为两个目标的距离越近,相似度越大。
(2)步骤:
随机选择初始化的 k 个样本作为初始聚类中心 ;针对数据集中每个样本计算它到 k 个聚类中心的距离并将其分到距离最小的聚类中心所对应的类中;针对每个类别 ,重新计算它的聚类中心 (即属于该类的所有样本的质心) 重复上面 2 3 两步操作,直到达到某个中止条件(迭代次数、最小误差变化等)。
(3)优点:
容易理解,聚类效果不错,虽然是局部最优, 但往往局部最优就够了;处理大数据集的时候,该算法可以保证较好的伸缩性;当簇近似高斯分布的时候,效果非常不错;算法复杂度低。
(4)缺点:
K 值需要人为设定,不同 K 值得到的结果不一样;对初始的簇中心敏感,不同选取方式会得到不同结果;对异常值敏感;样本只能归为一类,不适合多分类任务;不适合太离散的分类、样本类别不平衡的分类、非凸形状的分类。
(5)优化:
针对 K-means 算法的缺点,有很多调优方式:数据预处理、合理选择 K 值、采用核函数、
K-means++、ISODATA。
数据预处理
常见的数据预处理方式有:数据归一化,数据标准化。K-means 的本质是基于欧式距离的数据划分算法,均值和方差大的维度将对数据的聚类产生决定性影响。
异常点检测:离群点或者噪声数据会对均值产生较大的影响,导致中心偏移,因此我们还需要对数据进行异常点检测。
合理选择 K 值
K 值的选取对 K-means 影响很大,这也是 K-means 最大的缺点,常见的选取 K 值的方法有:手肘法、Gap statistic 方法。
采用核函数-核 K-means 算法
核聚类方法的主要思想是通过一个非线性映射,将输入空间中的数据点映射到高位的特征空间中,并在新的特征空间中进行聚类。非线性映射增加了数据点线性可分的概率,从而在经典的聚类算法失效的情况下,通过引入核函数可以达到更为准确的聚类结果。
K-means++
初始值的选取对结果的影响很大,对初始值选择的改进是很重要的一部分。K-Means++与 K-Means算法不同仅在于初始质心的选择方式不同,表现上,往往优于 K-Means 算法。
优化K个初始化聚类中心的方式:
2.K-means聚类yolo的anchor
在检测任务中,聚类anchor,处理的数据是训练集中所有bbox的宽和高。距离计算方式不是欧氏距离,是1-IOU。计算bbox和聚类中心表示的bbox时,两个bbox的中心是重合的。
anchor聚类前准备:
将训练集中所有需要检测类别的bounding box坐标提取出来。训练数据一般是bbox的4个坐标,我们用的数据是bbox的宽和高,需要将坐标数据转换为框的宽高大小,计算方法很简单:宽 = 右下角横坐标 - 左上角横坐标、高 = 右下角纵坐标-左上角纵坐标。
聚类方式:
(1)初始化K个anchor box:从已经转换成宽和高表示的所有的bbox中随机算则K个bbox作为初始化anchor box;
(2)计算除被选为anchor的每个bounding box与每个anchor box的iou值和距离:两个bbox的中心重叠,如下图所示:
代码:
min_w_matrix = np.minimum(cluster_w_matrix, box_w_matrix) #cluster_w_matrix, box_w_matrix分别代表anchor box和bounding box宽大小
min_h_matrix = np.minimum(cluster_h_matrix, box_h_matrix) #cluster_h_matrix, box_h_matrix分别代表anchor box和bounding box高大小
inter_area = np.multiply(min_w_matrix, min_h_matrix) #inter_area表示重叠面积
IOU = inter_area / (box_area + cluster_area - inter_area)#box_area表示bounding box面积 ;cluster_area表示anchor box面积
通过上面的方式得到两个bbox的Iou,再通过1-Iou得到两个bbox的距离
(3)根据bbox的距离划分每个bbox归属于哪一个聚类中心anchor:bbox与哪一个聚类中心anchor的距离最小,属于哪一个聚类中心anchor;
(4)anchor box更新:所有的bbox划分完以后,这些bbox被分成了K份,要更新聚类中心anchor-求每份bbox的宽高中值大小或均值,将其作为新的聚类中心anchor;
(5)重复操作(2)(3)(4),直至anchor尺寸不再更新;
(6)计算anchor boxes精确度。
推荐文章
发表评论