資源簡介
代碼使用matlab編寫,壓縮包中包含MNIST數據集及其讀取函數、KNN算法實現和ReadMe.txt。
KNN算法中使用了PCA降維處理數據減少運行時間,正確率可達95%,有部分注釋。請結合ReadMe文件使用。

代碼片段和文件信息
clear;
clc;
%讀取數據
trainImages?=?loadMNISTImages(‘train-images.idx3-ubyte‘);??????
trainLabels?=?loadMNISTLabels(‘train-labels.idx1-ubyte‘);
testImages?=?loadMNISTImages(‘t10k-images.idx3-ubyte‘);
testLabels?=?loadMNISTLabels(‘t10k-labels.idx1-ubyte‘);
%選取部分樣本進行測試
testImages?=?testImages(:1:100);
testLabels?=?testLabels(1:1001);
%PCA降維
square?=?double(trainImages?*?trainImages‘);
[eigVect?eigVal]?=?eig(square);
eigVal?=?diag(eigVal);??
eigVal?=?cumsum(eigVal)?/?sum(eigVal);
k?=?find(eigVal?>=?5e-2?1);
pca?=?eigVect(:?k:end);
trainImages?=?pca‘?*?trainImages;
testImages?=?pca‘?*?testImages;?
%獲得樣本規模
[mn]?=?size(trainImages);
[rs]?=?size(testImages);
K?=?10;????????????????????????????????????????????????????????%K最好取20以下的數
testResults?=?zeros(1s);
kLabels?=?zeros(1K);
error?=0;
%開始訓練
tic;
for?i?=?1?:?s
????%求出待測樣本與訓練樣本的距離
????colImages?=?repmat(testImages(:i)1n);?
????colImages?=?(trainImages?-?colImages)?.^?2;
????distance?=?sum(colImages)?.^?0.5;
????%找到離待測樣本最近的k個訓練樣本
????[sortDistpos1]?=?sort(distance);
????for?j?=?1?:?K
????????kLabels(j)?=?trainLabels(pos1(j));
????end
????%訓練樣本進行投票得到待測樣本的類別
????count?=?tabulate(kLabels);
????[maxCountpos2]?=?max(count(:2));
????testResults(i)?=?count(pos2);??
????fprintf(‘第%d張圖片\n‘i);
end
%判斷訓練結果
for?i?=?1?:?s
??if?(testResults(i)?~=?testLabels(i))
????error?=?error+1;
??end
end
fprintf(‘正確率為%d\n‘1-error/s);
toc;
%?save?data?error;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1559??2017-11-14?19:36??matlab\KNN.m
?????文件????????837??2017-11-07?16:51??matlab\loadMNISTImages.m
?????文件????????535??2017-11-03?17:49??matlab\loadMNISTLabels.m
?????文件????????259??2017-11-13?17:13??matlab\Readme.txt
?????文件????7840016??1998-01-26?23:07??matlab\t10k-images.idx3-ubyte
?????文件??????10008??1998-01-26?23:07??matlab\t10k-labels.idx1-ubyte
?????文件???47040016??1996-11-18?23:36??matlab\train-images.idx3-ubyte
?????文件??????60008??1996-11-18?23:36??matlab\train-labels.idx1-ubyte
?????目錄??????????0??2017-11-13?17:02??matlab
-----------?---------??----------?-----??----
?????????????54953238????????????????????9
評論
共有 條評論