机器学习之KNN算法(分类)

  KNN算法是解决分类问题的最简单的算法。同时也是最常用的算法。KNN算法也可以称作k近邻算法,是指K个最近的数据集,属于监督学习算法。

开发流程:

  1.加载数据,加载成特征矩阵X与目标向量Y。

  2.给定一个新的数据,算出新数据和所有数据的距离,找到距离最近的前K个数据,K的取值范围一般是3-15个。凭经验。

  3.统计前K个距离最近的样本对应的类别,然后少数服从多数,将这个数据划分为出现次数最多的那个类别。

  注:这里面的距离指的是欧式距离

优缺点:

  简单

  支持多分类

  K的取值会影响结果

  噪声数据敏感

使用经验:

  在实际使用中,我们可以使用所有训练数据构成特征X与目标变量Y,使用fit()函数进行训练。在正式分类时,通过一次性构造测试集或者一个一个输入样本的方式,得到样本对应的分类结果。

  有关K的取值:

    1.如果较大,相当于使用较大领域中的训练实例进行预测,可以减少估计误差,但是距离较远的样本也会对预测起作用,导致预测错误。

    2.相反的如果K较小,相当于使用较小的领域进行预测,如果令居恰好是噪声点,会导致过拟合。

    3.一般情况下,K会倾向选取较小的值,并使用交叉验证法选取最优K值。

KNN的使用:  

  在sklearn库中,可以使用sklearn.neighbors.KNeighborsClassifier创建一个K近邻分类器,主要参数有:
  n_neighbors:用于指定分类器中K的大小(默认值为5,注意与kmeans的区别)
  weights:设置选中的K个点对分类结果影响的权重(默认值为平均权重“uniform”,可以选择“distance”代表越近的点权重越高,或者传入自己编写的以距离为参数的权重计算函数)
  algorithm:设置用于计算临近点的方法,因为当数据量很大的情况下计算当前点和所有点的距离再选出最近的k各点,这个计算量是很费时的,所以(选项中有ball_tree、kd_tree和brute,分别代表不同的寻找邻居的优化算法,默认值为auto,根据训练数据自动选择)
 
上一篇:JavaScript机器学习之KNN算法


下一篇:机器学习之--KNN算法简单实现