K-近邻算法概述(KNN)
k近邻法1968年由Cover和Hart提出。k-近邻算法采用测量不同特征值之间的距离(相似度)方法进行分类,属于监督学习。这种算法把要分类的对象(例如一个特征向量)与训练集中已知类标记的所有对象进行对比,并由k近邻对指派到哪个类进行投票。k近邻法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。因此,k近邻法不具有显式学习过程。k值的选择、距离度量及分类决策规则是k近邻的三个基本要素。
优点:精度高、对异常值不敏感、无数据输入假定
缺点:需要预先设定k值,k值的选择会影响分类的性能;计算复杂度高,体现在待分类样本需要和样本数据集中的每一个样本计算相似度;空间复杂度高,体现在需要保存全部数据集,如果训练数据集很大,将占用大量的存储空间;无法给出任何数据的基础结构信息及内在含义,我们无法知晓平均实例样本和典型实例样本具有什么特征。
适用数据范围:数值型和离散型
KNN工作原理
存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集合中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们之选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
KNN一般流程
- 收集数据:可以使用任何方法。
- 准备数据:距离计算所需要的数值,最好是结构化的数据格式。
- 分析数据:可以使用任何方法。
- 训练算法:此步骤不适用于k-近邻算法,KNN没有训练过程。
- 测试算法:计算错误率。
- 使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k-近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。
KNN伪代码描述
对未知类别属性的数据集中的每个点依次执行以下操作:
- 计算已知类别数据集合中的每个点与当前点的之间的距离;
- 按照距离递增次序排序;
- 选取与当前点距离最小的k个点;
- 确定前k个点所在类别的出现频率;
- 返回前k个点出现频率最高的类别作为当前点的预测分类。
参考
《机器学习实战》Peter Harrington 著
《统计学习方法》 李航 著
网友评论