1、KNN算法简介
KNN (K-Nearest Neighbor) 最邻近分类算法,其核心思想“近朱者赤,近墨者黑”,由你的邻居来推断你的类别。
图中绿色圆归为哪一类?
1、如果k=3,绿色圆归为红色三角形
2、如果k=5,绿色圆归为蓝色正方形
在这里插入图片描述
参考文章
knn算法实现原理:为判断未知样本数据的类别,以所有已知样本数据作为参照物,计算未知样本数据与所有已知样本数据的距离,从中选取k个与已知样本距离最近的k个已知样本数据,根据少数服从多数投票法则,将未知样本与K个最邻近样本中所属类别占比较多的归为一类。(我们还可以给邻近样本加权,距离越近的权重越大,越远越小)
2、KNN算法实现
1、k值选择:太小容易产生过拟合问题,过度相信样本数据,太大容易产生欠拟合问题,与数据贴合不够解密,决策效率低。
2、样本数据归一化:最简单的方式就是所有特征的数值都采取归一化处置。
3、一个距离函数计算两个样本之间的距离:通常使用的距离函数有:欧氏距离、曼哈顿距离、汉明距离等,一般选欧氏距离作为距离度量,但是这是只适用于连续变量。在文本分类这种非连续变量情况下,汉明距离可以用来作为度量。通常情况下,如果运用一些特殊的算法来计算度量的话,K近邻分类精度可显著提高。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4、KNN优点:
1.简单,易于理解,易于实现,无需估计参数,无需训练
- 适合对稀有事件进行分类
3.特别适合于多分类问题(multi-modal,对象具有多个类别标签), KNN比SVM的表现要好5、KNN缺点:
KNN算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数,如下图所示。该算法只计算最近的邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。
可理解性差,无法给出像决策树那样的规则。
实现KNN算法简单实例
1、样本数据散点图展示
在这里插入图片描述
2、新的样本数据,判断它属于哪一类
在这里插入图片描述
3、计算新样本点与所有已知样本点的距离
在这里插入图片描述
Numpy使用
2.1、调用scikit-learn库中KNN算法
2007年,Scikit-learn首次被Google Summer of Code项目开发使用,现在已经被认为是最受欢迎的机器学习Python库。
安装:pip install scikit-learn
在这里插入图片描述
3、使用scikit-learn库生成数据集
生成的数据,画出的散点图
在这里插入图片描述
3.1、自定义函数划分数据集
将生成好的数据集,划分成训练数据集和测试数据集
在这里插入图片描述
3.2、使用scikit-learn库划分数据集
4、使用scikit-learn库对鸢尾花数据集进行分类
5、什么是超参数
在看机器学习时,经常碰到一个叫超参数的参数(hyper-parameter)的概念,通常情况下,需要对超参数进行优化,给学习选择一组最优超参数,以提高学习的性能和效果。
KNN算法中超参数表示什么,表示K的最近邻居有几个,是分类表决还是加权表决。
5.1、实现寻找超参数
1、加载鸢尾花数据集,并拆分数据集
2、寻找最优的一组超参数
5.2、使用scikit-learn库实现
6、特征归一化
为什么做归一化?
比如说,现在有一组身高和体重的数据集(斤,米),求欧式距离的时候,可以发现身高在数据集中影响非常小,所以需要将数据归一化。在这里插入图片描述
6.1、实现最大最小值归一化
最值归一化适用于,值分布在有限的范围里面,比如说考试分数0-100,它受特殊值影响比较大,比如正常体重在0-150斤,如果有一个1000斤,那么这个归一化的数据就会失真。
在这里插入图片描述
对上面数据做最大最小归一化操作
6.2、实现零均值归一化
除了数据有明显的边界值,这种方式是最好的,原始数据-均值 / 标准差。
在这里插入图片描述
6.3、scikit-learn归一化使用
在这里插入图片描述
7、KNN实现回归任务
预测这个值是多少,就是回归任务,思想和上面做分类一致,也是近朱者赤,近墨者黑,也是找距离最近k个点,也是民主投票,区别在于这里是求最近k个点的均值
在这里插入图片描述
7.1、实现KNN回归代码
7.2、使用scikit-learn库实现
8、根据Boston数据集建立回归模型
做归一化处理之后输出得分