概述
#KNN
《机器学习实战》第二章k-近邻算法,在自己实现时遇到了不少问题。在此总结记录一下,顺便给遇到同样问题的朋友做个参考。
问题一:
写完kNN.py保存了之后,需要import导入这个kNN模块。结果报错:ImportError: No module named kNN
解决方法:将kNN.py文件放到 site_packages 目录下
问题二:
解决完问题一,重新在shell中输入>>> import kNN,继续报错:SyntaxError: Non-ASCII character 'xe8' in file C:Python27libsite-packageskNN.py
解决办法:1、重新编辑kNN.py文件,在文件头部加入 # -- coding: utf-8 --
2、保存,重启 Shell
问题三:
上述问题解决后import kNN。报错:only 2 non-keyword arguments accepted。
问题所在:书上提供的代码粗心少写了两个中括号。
本来是array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]),但书上少写了最外面的两个中括号,(⊙﹏⊙)b
解决上述问题后,示例:
在shell中键入命令:
import kNN
group,labels = kNN.createDataSet()
继续键入:
group
输出:
array([[ 1. , 1.1],
[ 1. , 1. ],
[ 0. , 0. ],
[ 0. , 0.1]])
键入:
labels
输出:
['A', 'A', 'B', 'B']
问题四:
键入命令:kNN.classify0([0,0],group,labels,3)
报错:AttributeError: 'dict' object has no attribute 'iteritems'
文件kNN.py中代码sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)无法被执行。
问题原由:python版本问题,我使用的python版本为2.7.12,不支持iteritems()。
解决办法:将iteritems()改为items()。
在shell中依次键入命令:
import kNN
group,labels = kNN.createDataSet()
kNN.classify0([0,0],group,labels,3)
输出:
'B'
KNN算法原理
对未知类别属性的数据集中的每个点依次执行以下操作:
1、计算已知类别数据集中的点与当前点之间的距离;
2、按照距离递增次序排列;
3、选取与当前点距离最小的k个点;
4、确定前k个点所在类别的出现频率;
5、返回前k个点出现频率最高的类别作为当前点的预测分类。
KNN算法总结
1、k-邻近算法是分类数据最简单最有效的算法。
2、k-邻近算法是基于实例的学习,所以使用算法时必须有接近实际数据的训练样本数据。因为这个特性,如果训练数据集很大,就会导致需要占用大量的存储空间。
3、k-邻近算法实际使用时可能会非常耗时,因为其必须对数据集中的每个数据计算距离值。
4、k-邻近算法无法给出任何数据的基础结构信息,因此也无法知晓平均实例样本和典型实例样本具有什么特征。
优点:精度高、对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高
适用数据范围:数值型和标称型
最后
以上就是重要丝袜为你收集整理的k近邻算法python_KNN: k-近邻算法在Python2.7上的实现与应用的全部内容,希望文章能够帮你解决k近邻算法python_KNN: k-近邻算法在Python2.7上的实现与应用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复