1.k-近邻算法的特点
优点:精度高,对异常值不敏感,无数据输入假定
缺点:计算复杂度高,空间复杂度高
使用数据范围:数值型和标称型
2.kNN的工作原理
存在一个样本数据集合,也叫做训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每个数据属于什么类别。输入没有标签的新数据后,将新数据对每个特征与样本集中对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们选择样本数据集中前k个最相似的数据,这就是k-近邻的k的出处。最后,选择k个最相似数据中
出现次数最多的分类,作为新数据的分类。
3.伪代码
对未知类别属性的数据集中的每个点(即每个还不知道类别的样本)依次执行以下操作:
1)计算已知类别数据集中的点与当前点之间的距离(怎么计算距离在下文中讲述)
2)按照距离递增次序排序
3)选取与当前点距离最小的k个点
4)确定前k个点所在类别的出现频率
5)返回前k个点出现频率最高的类别作为当前点的预测分类
4.怎么计算距离
最直观的就是求各个属性差值的平方和再开根号,但这样是不对的,因为有的属性的值很大,比如有多少rmb,有的属性的值很小,比如花多少百分比的时间来看电视。如果都一视同仁地相减再平方,那像百分比这种值跟rmb这种值比起来可以直接忽略了。
对于这个问题,可以采用数值归一化的方法来解决,如将取值范围处理为0到1或者-1到1之间。公式为:
newValue=(oldValue-min)/(max-min)。
做完数值归一化之后再执行上述的求差值的平方和再开根号就可以了。 当然如果各个属性权重不一样可以另外再加权调整。
5.测试算法
通常用已知数据的90%来做训练样本,其余10%做测试样本来验证分类器的正确性。