k近邻法(k-nearest neighbor, k-NN)
原理:
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。 最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
优缺点:
优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高、空间复杂度高。
适用范围:数值型和标称型。
Python实践案例:电影类型分类
已知:一些未看过电影的打斗镜头数、接吻镜头数、电影所属类型的标签
求:确定电影类型是爱情片还是动作片
步骤:
1、计算已知类别数据集中的点与当前点之间的距离;
2、按照距离递增次序排序;
3、选取与当前点距离最小的k个点;
4、确定前k个点所在类别的出现频率;
5、返回前k个点所出现频率最高的类别作为当前点的预测分类。
具体如下:
计算未知电影与样本集中所有电影距离。
计算红点到每个黄点(已知电影)的距离,按距离递增排序,假设k=3,则表示按照前3个距离最近的电影类型出现的最高频率(比如动作片出现的频率为2/3)作为判定未知电影类型的标准和依据(即红点-未知电影为动作片),如下:
代码:
1)准备数据:
2)kNN 算法预测数据:
学习来源:《机器学习实战》 [美] Peter Harrington
Jack Cui 博文https://cuijiahua.com/