赞
踩
K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
举个例子。如上图所示,假设图中绿色圆形为待分类目标,当K=3时,绿色圆形的最邻近的3个点是2个红色三角形和1个蓝色正方形,因此我们判定绿色的这个待分类点属于红色的三角形一类;当K=5时,绿色圆形的最邻近的5个点是2个红色三角形和3个蓝色正方形,所以在这个条件下我们判定绿色的这个待分类点属于蓝色正方形一类。
优点:精度高、对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高
使用数据范围:数值型和标称型
工作原理:
1.存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。
2.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前 k 个最相似的数据,这就是 K 近邻算法中 k 的出处,通常 k 是不大于 20 的整数。最后,选择 k 个最相似数据中出现次数最多的分类,作为新数据的分类。
1.k值的选取
k值选取过小,则容易发生过拟合,此时我们很容易学习到噪声,也就非常容易判定为噪声类别;k值选取过大,就相当于用较大范围中的训练数据进行预测,这时与待分类目标较远的(不那么相似)训练实例也会起到预测的作用,但这样会使预测发生错误(完全忽略训练数据实例中的大量有用信息)。
2.归一化的重要性
假设有多个特征值时,其中某个特征数量级比较大(如身高/cm),其他特征较小时(鞋码),此时会导致距离的错误计算,分类结果会被特征值所主导,而弱化了其他特征的影响,从而带来错误的预测结果,所以需要对数据进行归一化。
1.收集数据:可以使用任何方法
2.准备数据:距离计算所需要的数值,最好是结构化的数据格式(数据量纲不统一时)
3.分析数据:可以使用任何方法(可用python内的Matplotlib库将数据可视化)
4.训练算法:此步骤不适用于 K 近邻算法
5.测试算法:计算错误率
6.使用算法:首先需要输入样本数据和结构化的输出结果,然后运行K 近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理
1.收集数据:提供文本文件
2.准备数据:编写函数classify0(),将图像格式转换为分类器使用的list格式
3.分析数据:在python命令提示符中检查数据,确保符合要求
4.训练算法:KNN不适用这步
5.测试算法:编写函数使用提供的部分数据集(已经分类好的数据)作为测试样本,如果预测的结果不同,则标记错误
6.使用算法:本题没有使用
数据的准备:
将训练数据和测试数据分别以txt文件的形式保存在trainingDigits和testDigits文件夹中,目录trainingDigits中包含了大约2000个例子,每个例子的内容如下图所示,每个数字大约有200个样本;目录testDigits中包含了大约900个测试数据。
转换图片格式(32X32的二进制矩阵转成1X1024的向量)
def img2vector(filename)
returnVect = zeros((1,1024))
fr = open(filename)
for i in range(32): #32行
lineStr = fr.readline() #一次读一行
for j in range(32): #32列
returnVect[0,32*i+j] = int(lineStr[j])
return returnVect``
k-近邻算法
`def classify0(inX
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。