ML:Scikit-Learn 学习笔记(2) --- Nearest Neighbors 最近邻 分类

1 最近邻分类

使用最近邻进行归类,是基于输入样本的,他和其他算法不一样,最近邻不会试图去构造一个泛化的模型,而只是去简单的使用输入训练集的所有数据。对于输入的测试数据(点)最近邻一般都是找到和他在空间中距离最相近的一些点,通过投票决定其最终的分类。

在scikit-learn当中,提供了两种不同的实现。其中KNeighborsClassifier ,实现了最近K邻(KNN)的算法,即考虑和输入点最接近的K个点,K可以由用户指定。另外一个则是RadiusNeighborsClassifier ,他考虑的是输入点为圆心,半径在r以内的所有点,同样的r,也可以由用户定义。

不过在一般的实际应用当中,KNN使用的更多一些,而在KNN中,k值的选择是很重要的,而k值具体怎么选择,一般和需要训练的数据有较大关系,较大的k可以容忍较多的噪声,但是会使得分类的结果变的不那么精确。
但是,当我们需要训练的数据不那么规范的时候RadiusNeighborsClassifier (RN)会是一个更好的选择,当用户确定了一个半径之后,这些在半径之内的点都会被考虑,对于一些高维空间,RN的效率会受到影响,这也是一种“维度之殇”了吧。

最基本的最近邻算法当中,通常用的都是一个统一的权重,即在最终的投票过程中,所有参与投票的点权重都是一样的,而在某些情况下,让距离更近的点有一个更大的权重,则会是更好的选择。对于这种改变权重的做法,可以通过修改scikit-learn里的参数,使用参数weights = ‘uniform’ 则是统一权重,而用weights = ‘distance’则可以根据距离进行投票,当然了,用户也可以自己写一个权重的函数了。

下面给出了使用这两种参数的一个实例
ML:Scikit-Learn 学习笔记(2) --- Nearest Neighbors 最近邻 分类_第1张图片
ML:Scikit-Learn 学习笔记(2) --- Nearest Neighbors 最近邻 分类_第2张图片

附录

1、本系列第一篇:ML:Scikit-Learn 学习笔记(1) — Nearest Neighbors 最近邻 综述
http://blog.csdn.net/mebiuw/article/details/51051453

本文官方文档地址:
http://scikit-learn.org/stable/modules/neighbors.html

你可能感兴趣的:(机器学习,Python++)