Kmeans和KNN算法的异同

Kmeans和KNN(K近邻)算法是聚类cluster中经典的算法,两者既有类似性也存在不同点。


两个算法的缺点:无法自行自动确定样本分类数量,需要先验知识!

K-means是无监督学习,而KNN(K近邻)是监督学习,需要样本标注!

Kmeans算法的思想:

随机给出数据的k个类的初始点,然后遍历所有的数据点,样本到各个初始点的距离(欧拉或者曼哈顿距离),距离最小的则将该样本归为当前初始点相同类,直到遍历完所有样本点。此时对各个类进行求平均值,更新本类的中心点。接着迭代,直到中心点重合或者变化不是很大的时候算法终止。

算法过程:

输入:k, data[n];
(1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];
(2) 对于data[0]….data[n], 分别与c[0]…c[k-1]比较,假定与c[i]差值最少,就标记为i;
(3) 对于所有标记为i点,重新计算c[i]={ 所有标记为i的data[j]之和}/标记为i的个数;
(4) 重复(2)(3),直到所有c[i]值的变化小于给定阈值。


算法的效率跟初始点选择有关,初始点选择的好可以减少迭代次数!以及距离公式的选择。


KNN算法思想:

随机给出数据的k个类的初始点,然后在该初始点的某个范围内,选择K个数,看看其中什么类的数量占的最多就将该点归为此类,依次遍历完毕,然后在各个类之中算平均值更新类的中心点,依次迭代,直到直到中心点重合或者变化不是很大的时候算法终止。

算法过程:

1. 准备数据,对数据进行 预处理
2. 选用合适的数据结构存储训练数据和测试元组
3. 设定参数,如k
4.维护一个大小为k的的按距离由大到小的 优先级队列,用于存储最近邻训练元组。随机从训练元组中选取k个元组作为初始的最近邻元组,分别计算测试元组到这k个元组的距离,将训练元组标号和距离存入优先级队列
5. 遍历训练元组集,计算当前训练元组与测试元组的距离,将所得距离L 与优先级队列中的最大距离Lmax
6. 进行比较。若L>=Lmax,则舍弃该元组,遍历下一个元组。若L < Lmax,删除优先级队列中最大距离的元组,将当前训练元组存入优先级队列。
7. 遍历完毕,计算优先级队列中k 个元组的多数类,并将其作为测试元组的类别。
8. 测试元组集测试完毕后计算误差率,继续设定不同的k值重新进行训练,最后取误差率最小的k 值


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值