k-近邻算法采用测量不同特征值之间的距离方法进行分类。knn算法不需要经过训练就可以直接计算测试集。knn算法并不一定完全正确,错误率为输出错误的次数除以总的执行次数。
优缺点:
- 优点:
- 精度高
- 对异常值不敏感
- 无数据输入假定
- 缺点:
- 计算复杂度高
- 空间复杂度高
- 样本可能不平衡
- 无法给出数据的内在含义
- 适用数据范围:数值型和离散型数据;
原理:
- 每个训练数据集中的每个数据都有相应的标签,输入没有标签的新数据之后,将新数据每个特征与样本集中每个数据对应的特征进行比较。
- 然后算法提取出样本集中最相似的前k个数据分类标签。
- 再计算这k个标签中每类出现的概率,将新样本划分为概率最大的那个标签中。
- k的由来:只选择样本数据集中最相似的前k个数据,k通常是不大于20.
K-近邻算法的一般流程:
- 收集数据:可以使用爬虫进行数据的收集,也可以使用第三方提供的免费或收费的数据。一般来讲,数据放在txt文本文件中,按照一定的格式进行存储,便于解析及处理。
- 准备数据:使用Python解析、预处理数据。
- 分析数据:可以使用很多方法对数据进行分析,例如使用Matplotlib将数据可视化。
- 测试算法:计算错误率。
- 使用算法:错误率在可接受范围内,就可以运行k-近邻算法进行分类。
案例:
输入一个二维测试集,算出它与所有训练集的距离,取前k个距离最近的点并统计这k个点类别的频率,输出频率最大的类别即为测试集最可能的类别。
import numpy as np
import operator
'''
group-数据集
labels-分类标签
'''
def createDataSet():
#四组二维特征
group=np.array([[1,101]