Kmeans和KNN算法的异同

    xiaoxiao2021-03-25  244

    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 值

    转载请注明原文地址: https://ju.6miu.com/read-6372.html

    最新回复(0)