最近鄰演算法knn原理:
上圖是一張手寫數字圖,大小為2000*1000,這張圖中有0~9十個數字,每五行為乙個數字,共五十行——5000個手寫數字。
我們首先要做的事是將這張圖分割為5000個以手寫數字為單元的小圖塊。經計算可得每個小圖塊的大小:20*20。直接將每個小圖塊序列化,最終得到乙個400*5000的特徵矩陣。寬為400,高為5000.取其前3000個樣本來進行訓練。
以下程式可分為三步:
1.擷取進行資料預處理
2.knn演算法訓練
3.代入原進行測試,並將測試結果與正確結果對比計算得出正確率。
#include #include #include using namespace std;
using namespace cv;
using namespace cv::ml;
int main()
} data.convertto(data, cv_32f); //uchar型轉換為cv_32f
int samplesnum = data.rows;
int trainnum = 3000;
mat traindata, trainlabels;
traindata = data(range(0, trainnum), range::all()); //前3000個樣本為訓練資料
trainlabels = labels(range(0, trainnum), range::all());
//使用knn演算法
int k = 5;
ptrtdata = traindata::create(traindata, row_sample, trainlabels);//ptr是指建立乙個型別為xx的指標,此處是建立乙個cv::ml庫中traindata類的乙個指標
ptrmodel = knearest::create();
model->setdefaultk(k);
model->setisclassifier(true);
model->train(tdata);
//**分類
double train_hr = 0, test_hr = 0;
mat response;
// compute prediction error on train and test data
for (int i = 0; i < samplesnum; i++)
test_hr /= samplesnum - trainnum;
train_hr = trainnum > 0 ? train_hr / trainnum : 1.;
printf("accuracy: train = %.1f%%, test = %.1f%%\n",
train_hr*100., test_hr*100.);
waitkey(0);
return 0;
}
KNN最近鄰演算法python實現
from numpy import import operator def createdataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1 labels a a b b return group,labels def classify0 inx,dataset...
最近鄰規則演算法(KNN)
最近鄰演算法 knn 是乙個基於例項學習的分類演算法。如果乙個例項在特徵空間中的k個最相似 即特徵空間中最近鄰 的例項中的大多數屬於某乙個類別,則該例項也屬於這個類別。所選擇的鄰居都是已經正確分類的例項。演算法步驟 1 把所有分類好的 有標籤label 的資料 例項 作為訓練集 2 選擇好引數k 3...
KNN 最近鄰演算法初探
本文質量不咋地,目的是記錄一下自己的 還有乙個原因是我發現別人的部落格寫的太好了!knn 演算法屬於監督學習的演算法,基本原理是對整個資料整體進行打標籤之後,對乙個新的元素根據其在向量空間中的位置來對其分類。k近鄰演算法是在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,我們就...