zoukankan      html  css  js  c++  java
  • [转载]knn分类

    原文地址:http://www.cnblogs.com/seacode/archive/2011/03/09/1979246.html

    knn的思想比较简单,从训练样本中找出K个与其最相近的样本,然后看这k个样本中哪个类别的样本多,则待判定的值(或说抽样)就属于这个类别。

    公式表示为:1,对所有的样本求距离 ,然后选出K个最近的

    公式1-KNN

    2,从这k个样本中找出含有样本最多的所属类别:

    公式2-KNN

    缺点:

    1,k值需要预先设定,而不能自适应。

    2 当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。

    如下图:,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。      

    图示-KNN

    该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。

    opencv中的两个函数

    训练KNN模型

    bool CvKNearest::train( const CvMat* _train_data, const CvMat* _responses,                          const CvMat* _sample_idx=0, bool is_regression=false,  int _max_k=32, bool _update_base=false ); 

    这个类的方法训练K近邻模型。它遵循一个一般训练方法约定的限制:只支持CV_ROW_SAMPLE数据格式,输入向量必须都是有序的,而输出可以是 无序的(当is_regression=false),可以是有序的(is_regression=true)。并且变量子集和省略度量是不被支持的。

    参数_max_k 指定了最大邻居的个数,它将被传给方法find_nearest。 参数 _update_base 指定模型是由原来的数据训练(_update_base=false),还是被新训练数据更新后再训练(_update_base=true)。在后一种情况下_max_k 不能大于原值, 否则它会被忽略.

     

    CvKNearest::find_nearest

    寻找输入向量的最近邻

    float CvKNearest::find_nearest( const CvMat* _samples, int k, CvMat* results=0,          const float** neighbors=0, CvMat* neighbor_responses=0, CvMat* dist=0 ) const; 

    对每个输入向量(表示为matrix_sample的每一行),该方法找到k(k≤get_max_k() )个最近邻。在回归中,预测结果将是指定向量的近邻的响应的均值。在分类中,类别将由投票决定。

    对传统分类和回归预测来说,该方法可以有选择的返回近邻向量本身的指针(neighbors, array of k*_samples->rows pointers),它们相对应的输出值(neighbor_responses, a vector of k*_samples->rows elements) ,和输入向量与近邻之间的距离(dist, also a vector of k*_samples->rows elements)。

    对每个输入向量来说,近邻将按照它们到该向量的距离排序。

    对单个输入向量,所有的输出矩阵是可选的,而且预测值将由该方法返回。In case of a single input vector all the output matrices are optional and the predicted value is returned by the method.

  • 相关阅读:
    python note 30 断点续传
    python note 29 线程创建
    python note 28 socketserver
    python note 27 粘包
    python note 26 socket
    python note 25 约束
    Sed 用法
    python note 24 反射
    python note 23 组合
    python note 22 面向对象成员
  • 原文地址:https://www.cnblogs.com/chrisnannan/p/2760451.html
Copyright © 2011-2022 走看看