目录
一、KNN算法概述
KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学习中的分类算法,它看起来和另一个机器学习算法Kmeans有点像(Kmeans是无监督学习算法),但却是有本质区别的。
1.KNN特点
KNN是一种非参的,惰性的算法模型。
非参的意思并不是说这个算法不需要参数,而是意味着这个模型不会对数据做出任何的假设,与之相对的是线性回归(我们总会假设线性回归是一条直线)。也就是说KNN建立的模型结构是根据数据来决定的,这也比较符合现实的情况,毕竟在现实中的情况往往与理论上的假设是不相符的。
惰性是因为同样是分类算法,逻辑回归需要先对数据进行大量训练(tranning),最后才会得到一个算法模型。而KNN算法却不需要,它没有明确的训练数据的过程,或者说这个过程很快。
2.KNN算法的优势和劣势
KNN算法优点
- 简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理。
- 模型训练时间快,上面说到KNN算法是惰性的,这里也就不再过多讲述。
- 预测效果好。
- 对异常值不敏感
KNN算法缺点
- 对内存要求较高,因为该算法存储了所有训练数据
- 预测阶段可能很慢
- 对不相关的功能和数据规模敏感
二、KNN算法介绍
KNN的全称是K Nearest Neighbors,意思是K个最近的邻居。K个最近邻居,毫无疑问,K的取值肯定是至关重要的。其实,KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。
X X
图中绿色的点就是我们要预测的那个点,假设K=3。那么KNN算法就会找到与它距离最近的三个点(这里用圆圈把它圈起来了),看看哪种类别多一些,比如这个例子中是蓝色三角形多一些,新来的绿色点就归类到蓝三角了。
X X
但是,当K=5的时候,判定就变成不一样了。这次变成红圆多一些,所以新来的绿点被归类成红圆。所以我们要注意K值的选取和点距离的计算。
K值的选择: •K值过小:过拟合
•K值过大:欠拟合
三、KNN算法API介绍
1.KNN分类API
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数
2.KNN回归API
sklearn.neighbors.KNeighborsRegressor(n_neighbors=5)
四、距离度量
要度量空间中点距离的话,有好几种度量方式,比如常见的曼哈顿距离计算,欧式距离计算等等。不过通常KNN算法中使用的是欧式距离,拿二维平面为例,二维空间两个点的欧式距离计算公式如下:
这个我们高中就接触到的了,其实就是计算(x1,y1)和(x2,y2)的距离。如果拓展到多维空间,则公式变成这样:
KNN算法最简单粗暴的就是将预测点与所有点距离进行计算,然后保存并排序,选出前面K个值看看哪些类别比较多。
五、总结
KNN算法是一种基于实例的学习算法,通过计算样本之间的距离来确定新样本的类别或数值。在分类问题中,KNN算法将新样本归类为距离其最近的K个样本中最多的类别;在回归问题中,KNN算法则通过计算新样本与训练集中所有样本的距离,找到距离最近的K个样本,然后用这K个样本的平均值或中位数来预测新样本的输出值。
好啦,本次的分享就到这里啦!