数据挖掘学习札记之KNN算法(一)
参考:
1. KNN算法介绍,Python程序和一个简单算例
2. k-nearest neighbor algorithm
基本想法:
在距离空间里,如果一个样本的最接近的k个邻居里,绝大多数属于某个类别,则该样本也属于这个类别。俗话叫,“随大流”。
算法描述:
待测样本(绿色圆圈)既可能分到红色三角形类,也可能分到蓝色正方形类。如果k取3,从图可见,待测样本的3个邻居在实线的内圆里,按多数投票结果,它属于红色三角形类,票数1:2.但是如果k取5,那么待测样本的最邻近的5个样本在虚线的圆里,按表决法,它又属于蓝色正方形类,票数2(红色三角形):3(蓝色正方形)。
其它问题:
计算两者间距离,用哪种距离会更好呢?计算量太大怎么办?假设样本中,类型分布非常不均,该怎么办呢?
例子(电影分类):
电影名称打斗次数接吻次数电影类型California Man
3104RomanceHe’s Not Really into Dudes 2100RomanceBeautiful Woman 181RomanceKevin Longblade 10110ActionRobo Slayer 3000 995ActionAmped II 982Action未知1890Unknown
这个数据用打斗次数和接吻次数来界定电影类型,接吻多的是Romance类型的,而打斗多的是动作电影。现在有一部名字未知的电影,打斗次数为18次,接吻次数为90次的电影(这里名字未知是为了防止能从名字中猜出电影类型),它到底属于哪种类型的电影呢?
下面调用Python的sklearn模块求解:(转自KNN算法介绍)