【机器学习】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精确度。

推荐文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: