优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高、空间复杂度高。
适用数据范围:数值型和标称型。
k近邻算法
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据
都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,
将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数
据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近
邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分
类,作为新数据的分类。
优化:归一化
是knn的计算距离的公式,从公式可以清楚的看到公式中数据差越大对计算结果的影响越大。
但其实我们期望所有特征是同等重要的,属性的权重都是一样的。(之前一直以为归一化只是为了简化计算而存在的)
因此对数据进行归一化处理。在使用机器学习实战的约会网站例子时,归一化后错误率降低0.13+
在处理这种不同取值范围的特征值时,我们通常采用的方法是将数值归一化,如将取值范围处理为0到1或者-1到1之间。
公式将数据归一到0-1之间。其中 min 和 max 分别是数据集中的最小特征值和最大特征值。
缺陷
如果训练数据集的很大,必须使用大量的存储空间。
由于必须对数据集中的每个数据计算距离值,实际使用时可能非常耗时。
???
K近邻算法的另一个缺陷是它无法给出任何数据的基础结构信息,因此我们也无法知晓平均实例样本和典型实例样本具有什么特征。
代码
代码下载地址
包括mnist、约会、病马等数据集、分类代码、展示数据分布代码