一.k近邻基本介绍
(1)算法原理
knn算法是一个有监督机器学习算法,可以解决分类问题,也可以解决回归问题.核心思想是未标记样本的类别,由距离其最近的k个邻居投票来决定.
假设我们有一个已经标记的数据集,即已经知道了数据集中每个样本所属的类别,此时,有一个未标记的数据样本,我们的任务是预测这个数据样本所属的类别,其基本原理是,计算待标记的数据样本和数据集中每个样本的距离,取距离最近的k个样本.待标记的数据样本所属的类别,就有这k个距离最近的样本投票产生.
假设X_test为待标记的数据样本,X_train为已标记的数据集,伪代码如下:
- 遍历X_train中的所有样本,计算每个样本与X_test的距离,并把距离保存在Distance数组中
- 对Distance数组进行排序,取距离最近的k个点,记为X_knn
- 在X_knn中统计每个类别的个数,即class0在X_knn中有几个样本,class1在X_knn中有几个样本等
- 待标记样本的类别,就是X_knn中样本个数最多的那个类别.
(2)算法优缺点
优点:准确性高,对异常和噪声有较高的容忍度
缺点:计算量较大,对内存需求也较大,从算法原理可以看出,每次对一个未标记样本进行分类时,都需要全部计算一遍距离.
(3)算法参数
其算法参数为k,参数选择需要根据数据来决定,k值越大,模型的偏差越大,对噪声数据越不敏感,当k值很大时,可能造成模型欠拟合,k值越小,模型方差越大,当k值过小,就会造成模型过拟合
(4)算法的变种
k-邻近算法变种有如下几种;
1.增加邻居的权重,默认情况下,在计算距离时,都是使用相同权重,事实上,我们可以针对不同的邻居指定不同的距离权重,如距离越近,权重越高,这个可以通过指定算法的weights参数来实现
2.使用一定半径内的点取代距离最近的k个点,在scikit-learn里,RadiusNeighborsClassfier类实现了这个算法的变种,当数