KNN

KNN---最近邻,k-NearestNeighbor

使用场景:
可回归,可分类,对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成反比。

优点:
     1.简单,易于理解,易于实现,无需估计参数,无需训练 ,精度高,理论成熟,既可以用来做分类也可以用来做回归;
  2. 适合对稀有事件进行分类;
  3.特别适合于多分类问题(multi-modal,对象具有多个类别标签), kNN比SVM的表现要好。
  4. 训练时间复杂度为O(n);
  5. 对异常值不敏感
缺点:
     1.计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。
    2.在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 样本不平衡问题
      3.懒惰算法,进行分类时计算量大,要扫描全部训练样本计算距离,内存开销大,评分慢;
      4. 最大的缺点是无法给出数据的内在含义。
 
k近邻算法对未知类别属性的数据集中每个点依次执行如下步骤:、
     1)计算已知类别数据集中的点与当前点之间的距离
  2)按照距离递增次序排序
  3)选取与当前点距离最小的k个点
  4)确定前k个点所在类别的出现频率
  5)返回前k个点出现频率最高的类别作为当前点的预测分类 
 
注意问题 
1、K值的设定
       K值设置过小会降低分类精度;若设置过大,且测试样本属于训练集中包含数据较少的类,则会增加噪声,降低分类效果。
    通常,K值的设定采用交叉检验的方式(以K=1为基准)
    ****经验规则:K一般低于训练样本数的平方根。
2、优化问题
       压缩训练样本;
    确定最终的类别时,不是简单的采用投票法,而是进行加权投票,距离越近权重越高。
3、如何选择合适的距离衡量?
       高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差。
    变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化。
4、训练样本是否要一视同仁?
       在训练集中,有些样本可能是更值得依赖的。
    可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响。
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',  
           metric_params=None, n_jobs=1, n_neighbors=5, p=2,  
           weights='uniform')
   
KNeighborsClassifier方法中含有8个参数(以下前两个常用):
     n_neighbors : int, optional (default = 5):K的取值,默认的邻居数量是5;
     weights:确定近邻的权重,“uniform”权重一样,“distance”指权重为距离的倒数,默认情况下是权重相等。也可以自己定义函数确定权重的方式;
     algorithm : {'auto', 'ball_tree', 'kd_tree', 'brute'},optional:计算最近邻的方法,可根据需要自己选择; 
 
 
 
 
 
 
 

你可能感兴趣的:(KNN,数据挖掘,KNN)