《机器学习实战》 k-近邻算法学习笔记
1. 概述
k-近邻算法采用测量不同特征值之间的距离方法进行分类。
2. 原理
将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据的分类标签。
即 选择 k 个最相似数据中出现次数最多的分类。
3. 伪代码
- 计算已知类别数据集中的点与当前点之间的距离
- 按照距离递增次序排序
- 选取与当前点距离最小的 k 个点
- 确定前 k 个点所在类别的出现概率
- 返回前 k 个点出现频率最高的类别作为当前点的预测分类
4. 代码分解
4.1 创建数据集和标签
|
|
4.2 计算距离
这里使用欧式距离公式计算。
|
|
4.3 排序
|
|
4.4 选取k个点及所在类别出现概率
|
|
4.5 返回分类结果
|
|
5. 预测
|
|
结果: [0,0]
属于'B'
类。
6. 其他
6.1 argsort
argsort函数返回的是数组值从小到大的索引值。
|
|
6.2 tile
|
|
6.3 计算欧式距离
|
|
6.4 get
Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值。
|
|
参数:
- key – 字典中要查找的键
- default – 如果指定键的值不存在时,返回该默认值值。
6.5 iteritems
|
|
这种情况下会报错:
AttributeError: 'dict' object has no attribute 'iteritems'
Python3.5中:iteritems变为items
。
6.6 数值归一化
在处理不同取值范围的特征值时,我们通常采用的方法是将数值归一化。
newvalue = (oldvalue - min)/(max - min)
7. 完整代码
|
|
8.使用k-近邻算法识别手写数字
|
|
listdir
os.listdir()
方法用于返回指定的文件夹包含的文件或文件夹的名字的列表
使用方法:
|
|
参数:
- filePath – 需要列出的目录路径
总结
测试发现错误率为74%
原因如下:
|
|
导致对于每条数据,lineStr读到的都是第一行的数据。
改正:
|
|