Matlab实现⼿写数字识别(PCA+KNN)
</pre><pre name="code" class="plain">clear;
addpath('../data/');
% images_train = loadMNISTImages('train-images-idx3-ubyte')';
开心网001images_train_label=loadMNISTLabels('train-labels-idx1-ubyte');
% save('../data/images_train_label.mat','images_train_label');
% images_test=loadMNISTImages('t10k-images-idx3-ubyte')';
images_test_label=loadMNISTLabels('t10k-labels-idx1-ubyte');
% [pc,score,latent,tsquare] = princomp(images_train);
% p_d_ratio=cumsum(latent)./sum(latent);
% p_mean=mean(images_train);
% p_d=87; % 90%
马明龙
% train_pca=score(:,1:p_d);
% save('../data/train_pca.mat','train_pca');养护机械
load('../data/train_pca.mat');
% for i=1:10000
% test_pca(i,:)=(images_test(i,:)-p_mean)*pc(:,1:p_d);
% end
% save('../data/test_pca.mat','test_pca');
load('../data/test_pca.mat');
mdl = ClassificationKNN.fit(train_pca,images_train_label,'NumNeighbors',1);
predict_label_knn=predict(mdl, test_pca);
accuracy_knn=length(find(predict_label_knn == images_test_label))/length(images_test_label)*100; </span>
PCA介绍很详细的资料:
Matlab PCA的函数:[COEFF,SCORE,latent,tsquare] = princomp(X)
银河宽频
COEFF为输⼊X在原空间到主成份空间的变换过程,SCORE为X在主成份空间的表⽰,latent为每个X协⽅差矩阵特征值所占的⽐重,ts不了解。 前P个latent值超过90%即可选取前⾯的特征代替整体,达到降维。 此函数中X为N*K矩阵,N个数据,K个特征,有SCORE=(X-mean(X))*COEFF。 值得注意的时在测试数据降维时,要先减去训练数据的均值。 在计算⾃相关矩阵时训练数据进⾏归⼀化,本次的样本数据之前均已归⼀化。
这次只⽤到了分类,不需要重构,重构还需要⽤到K-L变换等知识。
K-NN⾮常适合这个分类器,原理也很简单,准确率97%。
计算机学报
质粒转染
另外我将之前LBP+SVM的过程⽤PCA代替LBP,发现准确率由68%上升到87%,果然之前想的没错,特征提取很关键。