[問題] opencv KNN分類器
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VS2008
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OPENCV2.1
問題(Question):
有關KNN分類器的 訓練問題 與 分類結果
餵入的資料(Input):
三維DATA
預期的正確結果(Expected Output):
分類的類別
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
const int K = 10;
int i, j, k, accuracy;
float response;
float _sample[3];
CvMat sample = cvMat( 1, 3, CV_32FC1, _sample );
CvMat trainData1, trainData2, trainClasses1, trainClasses2, trainClasses3;
CvMat* Mysample=cvCreateMat(10,3,CV_32FC1);
CvMat* MytrainClasses = cvCreateMat( 10, 1, CV_32FC1 );
//train
for(int i=0;i<3;i++)
{
CV_MAT_ELEM(*Mysample,float,i,0)=0.0;
CV_MAT_ELEM(*Mysample,float,i,1)=9.0;
CV_MAT_ELEM(*Mysample,float,i,2)=9.0;
}
for(int i=3;i<8;i++)
{
CV_MAT_ELEM(*Mysample,float,i,0)=9.0;
CV_MAT_ELEM(*Mysample,float,i,1)=0.0;
CV_MAT_ELEM(*Mysample,float,i,2)=6.0;
}
for(int i=8;i<10;i++)
{
CV_MAT_ELEM(*Mysample,float,i,0)=4.0;
CV_MAT_ELEM(*Mysample,float,i,1)=7.0;
CV_MAT_ELEM(*Mysample,float,i,2)=0.8;
}
cvGetRows( MytrainClasses, &trainClasses1, 0, 3 );
cvSet( &trainClasses1, cvScalar(1) );
cvGetRows( MytrainClasses, &trainClasses2, 3, 8 );
cvSet( &trainClasses2, cvScalar(2) );
cvGetRows( MytrainClasses, &trainClasses3, 8, 10 );
cvSet( &trainClasses3, cvScalar(3) );
CvKNearest knn( Mysample, MytrainClasses, 0, false, K );
CvMat* nearests = cvCreateMat( 1, K, CV_32FC1);
//test data
sample.data.fl[0] = (float)4.0;
sample.data.fl[1] = (float)0.0;
sample.data.fl[2] = (float)8.0;
response = knn.find_nearest(&sample,K,0,0,nearests,0);
for( k = 0, accuracy = 0; k < K; k++ )
{
if( nearests->data.fl[k] == response)
accuracy++;
}
printf("%f\n",response);
補充說明(Supplement):
這是我自己做簡單的TEST
結果都只會輸出2(response)
1.會不會因為我訓練的資料量太少?
2.我去看了sample code(2D case)不過還是不太懂它如何得到分類的結果!
謝謝您耐心的看完
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.197.247
※ 編輯: laevatain103 來自: 118.160.197.247 (12/06 21:49)
→
12/06 21:55, , 1F
12/06 21:55, 1F
→
12/06 21:59, , 2F
12/06 21:59, 2F
→
12/06 22:02, , 3F
12/06 22:02, 3F
→
12/06 22:09, , 4F
12/06 22:09, 4F
→
12/06 22:15, , 5F
12/06 22:15, 5F
→
12/06 22:19, , 6F
12/06 22:19, 6F
→
12/06 22:21, , 7F
12/06 22:21, 7F
→
12/06 22:24, , 8F
12/06 22:24, 8F
→
12/06 22:26, , 9F
12/06 22:26, 9F
→
12/06 22:26, , 10F
12/06 22:26, 10F
→
12/06 22:26, , 11F
12/06 22:26, 11F
→
12/06 22:34, , 12F
12/06 22:34, 12F
→
12/06 22:34, , 13F
12/06 22:34, 13F
→
12/06 22:36, , 14F
12/06 22:36, 14F