答:官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
也就是说这个算法是用来分类的。
API:sklearn.neighbors.KNeighborsClassifier
来个例子:
电影可以按照题材分类,每个题材又是如何定义的呢?那么假如两种类型的电影,动作片和爱情片。动作片有哪些公共的特征?那么爱情片又存在哪些明显的差别呢?我们发现动作片中打斗镜头的次数较多,而爱情片中接吻镜头相对更多。当然动作片中也有一些接吻镜头,爱情片中也会有一些打斗镜头。所以不能单纯通过是否存在打斗镜头或者接吻镜头来判断影片的类别。那么现在我们有6部影片已经明确了类别,也有打斗镜头和接吻镜头的次数,还有一部电影类型未知。
现在有打斗镜头和接吻镜头两个特征可以帮助我们判断最后一部电影属于哪个类型。我们使用K-领近算法来算一下这个未知的电影与其他电影的距离,距离哪部电影最近,那么这个未知电影就和该电影类型相同。
通过结果,可以看出,未知电影与第二部电影《He‘s not Really into dues》的距离为18.7最近,那么可以推断出未知电影是属于爱情类。
问题来了,这个距离怎么算的呢?其实。这个距离是欧氏距离。其数学原理如下:√(x1-x2)²+(y1-y2)²
例如:输入变量有四个特征,例如(1,3,5,2)和(7,6,9,4)之间的距离计算为:√(1-7)²+(3-6)²+(5-9)²+(2-4)² = 65
问题:如果不同特征之间的度量不一样会不会影响结果呢?比如上面的例子中如果打斗的镜头是几十个或者几百个,但是接吻的镜头动辄就几万个、十几万个。这样计算的欧氏距离中打斗镜头这个特征就会被忽略掉。
因此,如果遇到上述情况,那么就得对特征进行标准化。至于如何标准化,前面已经介绍过,这里不再赘述。
原文:https://www.cnblogs.com/GouQ/p/11852360.html