1.KNN原理：

2.实验准备：

• Python
• scikit-learn（一个基于python的机器学习库）

3.实验代码：

```# -*- coding: utf-8 -*-
"""
This script is an exercise on KNN.

Created on Tue Nov 03 21:21:39 2015

@author: 90Zeng
"""

import numpy as np
from sklearn import datasets
import operator

#-----------------function classify--------------------------------------
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[ 0 ]
# 计算输入的向量inX与所有样本的距离
diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet
sqDiffMat = diffMat ** 2
sqDistances = sqDiffMat.sum(axis = 1)
distances = sqDistances ** 0.5
# 对距离大小进行排序
sortedDistIndices = distances.argsort()
classCount = {}
# 选择距离最小的 K 个点
for i in range(k):
voteLabel = labels[ sortedDistIndices[i] ]
classCount[ voteLabel ] = classCount.get(voteLabel, 0) + 1
# 按照类别的数量多少进行排序
sortedClassCount = sorted(classCount.iteritems(),
key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]  # 返回类别数最多的类别名称
#-------------------end of function classify--------------------------------

def handwritingClassTest():
# 导入数据
totalNum = len(digits.data)
# 选出90%样本作为训练样本，其余10%测试
trainNum = int(0.8 * totalNum)
trainX = digits.data[0 : trainNum]
trainY = digits.target[0 : trainNum]

testX = digits.data[trainNum:]
testY = digits.target[trainNum:]

errorCount = 0
testExampleNum = len( testX )
for i in range( testExampleNum ):
# 测试样本在测试集中真实的类别
trueLabel = testY[i]
classifierResult = classify0( testX[ i, : ], trainX, trainY, 5 )
print "\nThe classifier came back with: %d, the real answer is: %d"\
% ( classifierResult, trueLabel )
if trueLabel != classifierResult:
errorCount += 1
else:
pass
print "\nThe total number of errors is: %d" % errorCount
print "\nthe total error rate is: %f" % (
errorCount / float( testExampleNum)
)

if __name__ == '__main__':
print "start..."
handwritingClassTest()
```

```# -*- coding: utf-8 -*-
"""
This script is an exercise on KNN.

Created on Tue Nov 06 21:26:39 2015

@author: ZengJiulin
"""
print(__doc__)

import numpy as np
from sklearn import neighbors, datasets

totalNum = len(digits.data)
# 选出90%样本作为训练样本，其余10%测试
trainNum = int(0.8 * totalNum)
trainX = digits.data[0 : trainNum]
trainY = digits.target[0 : trainNum]

testX = digits.data[trainNum:]
testY = digits.target[trainNum:]

n_neighbors = 10

clf = neighbors.KNeighborsClassifier(n_neighbors, weights='uniform')
clf.fit(trainX, trainY)
Z = clf.predict(testX)

print "\nthe total error rate is: %f" % ( 1 - np.sum(Z==testY) / float(len(testX)) )```

4.总结

KNN的优点：精度高、对异常值不敏感，无数据输入假定

## 基于Python的机器学习实战：KNN的更多相关文章

1. 基于Python的机器学习实战：Apriori

目录: 1.关联分析 2. Apriori 原理 3. 使用 Apriori 算法来发现频繁集 4.从频繁集中挖掘关联规则 5. 总结 1.关联分析  返回目录 关联分析是一种在大规模数据集中寻找有趣 ...

目录: 1. Boosting方法的简介 2. AdaBoost算法 3.基于单层决策树构建弱分类器 4.完整的AdaBoost的算法实现 5.总结 1. Boosting方法的简介 返回目录 Boo ...

3. 机器学习实战kNN之手写识别

kNN算法算是机器学习入门级绝佳的素材.书上是这样诠释的:“存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都有标签,即我们知道样本集中每一条数据与所属分类的对应关系.输入没有标签的新数据 ...

4. K近邻 Python实现 机器学习实战(Machine Learning in Action)

算法原理 K近邻是机器学习中常见的分类方法之间,也是相对最简单的一种分类方法,属于监督学习范畴.其实K近邻并没有显式的学习过程,它的学习过程就是测试过程.K近邻思想很简单:先给你一个训练数据集D,包括 ...

5. 《机器学习实战-KNN》—如何在cmd命令提示符下运行numpy和matplotlib

问题背景:好吧,文章标题是瞎取得.平常用cmd运行python代码问题不大,我在学习<机器学习实战>这本书时,发现cmd无法运行import numpy as np以及import mat ...

6. 朴素贝叶斯算法的python实现 -- 机器学习实战

import numpy as np import re #词表到向量的转换函数 def loadDataSet(): postingList = [['my', 'dog', 'has', 'fle ...

7. 基于python的机器学习开发环境安装（最简单的初步开发环境）

一.安装Python 1.下载安装python3.6 https://www.python.org/getit/ 2.配置环境变量(2个) 略...... 二.安装Python算法库 安装顺序:Num ...

8. 机器学习实战-KNN

KNN算法很简单,大致的工作原理是:给定训练数据样本和标签,对于某测试的一个样本数据,选择距离其最近的k个训练样本,这k个训练样本中所属类别最多的类即为该测试样本的预测标签.简称kNN.通常k是不大于 ...

9. 机器学习实战knn

最近在学习这本书,按照书上的实例编写了knn.py的文件,使用canopy进行编辑,用shell交互时发现运行时报错: >>> kNN.classify0([0,0],group,l ...

## 随机推荐

1. [原]发布一个jQuery提示框插件，Github开源附主站，jquery.tooltips.js

一个简单精致的jQuery带箭头提示框插件 插件写好快一年了,和一个 弹出框插件(点击查看) 一起写的,一直没有整理出来,昨天得功夫整理并放到了github上,源码和网站均可在线看或下载. CSS中的 ...

2. C++笔试题（转）

http://blog.csdn.net/hxz_qlh/article/details/16864567 这里面列举的题考察的东西都非常细,包括strcpy,字符串,大.小端的判断,很容易犯错,值得 ...

3. [Android Pro] Gradle Tips#2-语法

4. 坑爹的属性，android:descendantFocusability用法简析

5. Report_客制化以PLSQL输出XLS标记实现Excel报表（案例）

2015-02-12 Created By BaoXinjian

6. 一口一口吃掉Volley（一）

欢迎访问我的个人博客转发请注明出处:http://www.wensibo.top/2017/02/16/一口一口吃掉Volley(一)/ 本次编写的Volley教程现在看来其实已经跟不上时代了,但是技 ...