标签:二分查找 维度 分类 部分 计算 指标 居中 特殊 多变量
算法:
1、给定测试对象,计算它与训练集中每个对象的距离
2、选择距离最近的k个对象
3、根据k个对象中占优势的类别,判断测试对象的类别
问题点讨论:
1、距离
用距离作为相似度的度量,即距离越远,相似度就越差
距离选择
欧氏距离:
单纯的计算各个维度的绝对距离,每个坐标(维度)对距离的贡献是相等的,没有考虑各维度属性之间的差别,例如身高、体重,当身高单位为cm,体重单位为kg,它们之间的在数值相差很多,这就导致cm轴所占比重会过大,结果也就不准确
因此需要保证各维度指标在相同的刻度级别,即每一维特征单位需要在同一级别,可以对每一维数据进行归一化
马氏距离:
利用协方差矩阵(多变量之间的相关性),考虑到特性之间的关系,不受量纲(单位)的影响,排除变量之间相关性的影响
但协方差矩阵不稳定,有时计算不出;夸大了微小变量的作用
总结:关于距离的选择有很多种,每种距离都有其独特特性,具体的选择需要根据实际需求判断
2、k值选择
k较小时,那么分类结果取决于离测试样本最近的对象,分类精度会受到影响,也可能会导致过拟合
k较大时,模型过于简单,特别是对于整体类别本身较少时,分类结果也会受到影响
采用交叉验证
用某种方式将数据集分成两类,一类训练集,一类测试集,首先利用训练集对分类器进行训练,再利用测试集来测试得到的模型,以此来作为评价分类性能的指标。
一般要尽量满足:
(1)训练集的比例要足够多,一般大于一半
(2)训练集和测试集要均匀抽样
具体的数据集如何分类将在之后的博文中讨论
3、搜索k个邻近点
一般采用线性搜索,即穷举搜索,为了提高搜索的效率,可以考虑使用特殊的结构存储训练数据,以减小计算距离的次数
kd树:储存k维空间实例点,并进行快速搜索(类似二分查找)
若特征维度D,样本数量N,线性搜索时计算复杂度为O(DN),kd数为O(DlogN)
构造:对每一维空间进行划分,构成一系列D维空间区域
选择哪一维空间进行划分:
(1)随机
(2)选择数据较分散的那一维,越分散越不可能属于同一个空间,分散程度:方差
在每一维如何划分数据:中位数
搜索:可以省去对大部分数据点的搜索,从而减少搜索的计算量
具体搜索过程比较复杂,不再赘述
4、缺点:
(1)需要储存全部训练样本
(2)需要不断计算距离,算法时间复杂的高
减少计算方法:事先对已知样本点进行剪辑,事先去除对分类作用不大的样本,但对于样本数本身较小的类域则不太适合
对数据集每种分类求质心,并计算质心与未知样本的距离,选取距离较近的几组,可以排除一些数据集样本
(3)样本不平衡时,即某一类样本数量过多,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数
可以利用距离加权改善,对距离近的样本赋予较大权重
在不同场景下利用自适应k提高分类结果的准确性(eg:利用贪心法,针对文件分类实做可调整权重的k最近邻居法WAkNN (weighted adjusted k nearest neighbor),以促进分类效果)
总结:
以上就是在学习KNN算法时遇到的问题,还有一些拓展部分将在后续学习中继续深入,关于一些算法的优化和问题,也会在后续进行仿真验证
标签:二分查找 维度 分类 部分 计算 指标 居中 特殊 多变量
原文地址:http://www.cnblogs.com/unicornlll/p/7388937.html