本文主要是介绍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个数,看看其中什么类的数量占的最多就将该点归为此类,依次遍历完毕,然后在各个类之中算平均值更新类的中心点,依次迭代,直到直到中心点重合或者变化不是很大的时候算法终止。
算法过程:
这篇关于Kmeans和KNN算法的异同的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!