1.Python导入数据
knn.py
1 | from numpy import * # import scientific computing package numpy |
knnTest.py
1 | import knn |
结果
1 | [[ 4.09200000e+04 8.32697600e+00 9.53952000e-01] |
2.KNN算法实现
knn.py
1 | #knn classification |
knnTest.py
1 | import knn |
结果
1 | B |
3.Example:使用KNN改进约会网站的配对效果
3.1.从文本文件中读取数据并解析
knn.py
1 | #kNN readfile |
knnTest.py
1 | import kNN |
结果:
1 | [[ 4.09200000e+04 8.32697600e+00 9.53952000e-01] |
3.2.使用matplotlib创建散点图
knnTest.py
1 | import matplotlib |
散点图使用datingDataMat矩阵的第2和第3列数据,分别表示玩视频游戏所耗时间百分比和每周所消费的冰淇淋公升数
结果

3.3.归一化数值
knn.py
1 | #kNN normalization |
knnTest.py
1 | normMat,ranges,minVals = kNN.autoNorm(datingDataMat) |
结果
1 | [[ 0.44832535 0.39805139 0.56233353] |
3.4.预测分类器效果
knn.py
1 | #kNN vertification |
knnTest.py
1 | kNN.datingClassTest() |
结果
1 | the classifier came back with:3,the real answer is:3 |
3.5.约会网站结果预测
knn.py
1 | #kNN prediction |
knnTest.py
1 | kNN.classifyPerson() |
结果
1 | percentage of time spent playing video games?3 |
4.手写识别系统
4.1图形转为向量
knn.py
1 | #convert img to vector |
knnTest.py
1 | testVector = kNN.img2vector('testDigits/0_13.txt') |
结果
1 | [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. |
4.2.k-紧邻算法识别手写数字
knn.py
1 | #test numbers using kNN classify0 |
knnTest.py
1 | kNN.handwritingClassTest() |
结果
1 | the classifier came back with:9,the real answer is:9 |
这个算法并不高效,有900个测试图片;
对于每一个测试图片,首先要一步复杂度为1024运的算转化为测试向量;
每个测试向量都要运行900次距离计算;
每次距离计算都是1024个浮点数的计算。。。
有没有一种算法更加节省空间和时间呢?
跟着《机器学习实战》这本书的步伐,很快我们就知道,有一种叫做k决策树的大佬,
据说是k-紧邻算法的优化版,可以大大得节省计算开销。