KNN(k-NearestNeighbor)-K最近邻
KNN虽然是最简单的算法,但是对刚刚开始机器学习的伙伴确是最好的入门算法,我就从算法本身实现开始,说一些基本概念。
先简单说一下要用到的一些专业用语:
特征(features):简单理解就是物体共有的一些特性,就比如可乐都有甜味,碳酸含量啊;房子,有房屋面积,采光度啊,这些都是物体的特征,通常用X来表示。
标签(target):这里说一下机器学习里的标签,就是我们通过物体的特征来预测的值,我们要得到的结果,通常用y表示。
噪声:数据不可解释的部分,通常算法所能达到的期望,泛化误差的下界。
KNN算法思想
举个例子看一下,有两种可乐我们已经知道了碳酸含量和甜味,我们有了一个新可乐(绿点),想知道它是哪个品牌的可乐,图里随便看一下就知道了,显然我们会把它预测为黄牌可乐。
生活里我们常常会有“越相近越相似”的想法,这其实就是KNN算法的本质,见名知意,k-近邻算法,是通过距离判断k个样本是否相似,如果距离够近就认为他们⾜够相似,有类似的特征(features),是属于同⼀类别,然后根据“少数服从多数,⼀点算⼀票”原则进⾏判断,数量最多的的标签(target)类别就是新样本的标签类别。
但是要注意的是:
1.因为一点一票的关系,并不能“人人平等”,对那些住的远的,需要进行惩罚机制,削弱其对预测结果的影响,惩罚机制在机器学习的算法会常常遇到。
2.量纲对预测结果的影响会非常大,在进行KNN算法前通常会对数据进行统一化,又叫做标准化处理。
3.KNN算法比较简单,所以可解释性比较强,像神经网络等复杂的算法几乎是没有萨满解释性的,但是对噪声的非常敏感。
Python代码实现
我这边用的是sklearn,代码都可以在API找到相关的说明:
官方API:sklearn_API_英文版
中文版:sklearn_中文文档
代码:
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split#导入分割测试集训练集数据集方法包
from s