OpenCV實現KNN演算法

2021-09-07 08:18:43 字數 2166 閱讀 6571

原文 opencv實現knn演算法

這個演算法首先貯藏所有的訓練樣本,然後通過分析(包括選舉,計算加權和等方式)乙個新樣本周圍k個最近鄰以給出該樣本的相應值。這種方法有時候被稱作「基於樣本的學習」,即為了**,我們對於給定的輸入搜尋最近的已知其相應的特徵向量。

class cvknearest : public cvstatmodel //

繼承自ml庫中的統計模型基類

;

訓練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 不能大於原值, 否則它會被忽略.

尋找輸入向量的最近鄰

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)。

對每個輸入向量來說,近鄰將按照它們到該向量的距離排序。

對單個輸入向量,所有的輸出矩陣是可選的,而且**值將由該方法返回。

#include "

ml.h

"#include

"highgui.h

"int main( int argc, char**argv )

//highlight the pixel depending on the accuracy (or confidence)

cvset2d( img, i, j, response == 1 ?(accuracy > 5 ? cv_rgb(180,0,0) : cv_rgb(180,120,0

)) :

(accuracy > 5 ? cv_rgb(0,180,0) : cv_rgb(120,120,0

)) );}}

//display the original training samples

for( i = 0; i < train_sample_count/2; i++)

cvnamedwindow(

"classifier result

", 1

); cvshowimage(

"classifier result

", img );

cvwaitkey(0);

cvreleasemat( &trainclasses );

cvreleasemat( &traindata );

return0;

}

結果:

knn演算法實現

knn演算法 自己實現 鳶尾花資料集 一.題目描述 題目 自己實現knn演算法 用鳶尾花資料集 knn演算法描述 在訓練集中資料和標籤已知的情況下,輸入測試資料,將測試資料的特徵與訓練集中對應的特徵進行相互比較,找到訓練集中與之最為相似的前k個資料,則該測試資料對應的類別就是k個資料 現次數最多的那...

KNN演算法實現

knn k 近鄰 knn,k nearestneighbor 演算法是一種基本分類與回歸方法,我們這裡只討論分類問題中的 k 近鄰演算法。k 近鄰演算法的輸入為例項的特徵向量,對應於特徵空間的點 輸出為例項的類別,可以取多類。k 鄰演算法假設給定乙個訓練資料集,其中的例項類別已定。分類時,對新的例項...

OpenCV 115 KNN演算法應用

opencv中機器學習模組的最近鄰演算法knn,對使用knn訓練好的檔案,可以通過演算法介面的load方法載入成為knn分類器,使用findnearest方法進行 opencv knn 方法引數解釋如下 retval,results,neighborresponses,dist cv.ml knea...