利用最近鄰演算法(knn 實現手寫數字分類

2021-08-21 10:03:18 字數 1464 閱讀 1422

最近鄰演算法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個例項的多數屬於某個類,我們就...