Mua*_*ani 1 matlab classification machine-learning distance knn
我正在研究拇指识别系统.我需要实现KNN算法来分类我的图像.根据这个,它只有2个测量值,通过它计算找到最近邻居的距离,但在我的情况下,我有400张25 X 42的图像,其中200个用于训练,200个用于测试.我正在寻找几个小时,但我找不到找到点之间距离的方法.
编辑:我已将前200幅图像重新塑造成1 X 1050并将其存储在trainingData
200 X 1050 的矩阵中.同样我制作了testingData
.
以下是k近邻分类的插图代码(使用的某些函数需要统计工具箱):
%# image size
sz = [25,42];
%# training images
numTrain = 200;
trainData = zeros(numTrain,prod(sz));
for i=1:numTrain
img = imread( sprintf('train/image_%03d.jpg',i) );
trainData(i,:) = img(:);
end
%# testing images
numTest = 200;
testData = zeros(numTest,prod(sz));
for i=1:numTest
img = imread( sprintf('test/image_%03d.jpg',i) );
testData(i,:) = img(:);
end
%# target class (I'm just using random values. Load your actual values instead)
trainClass = randi([1 5], [numTrain 1]);
testClass = randi([1 5], [numTest 1]);
%# compute pairwise distances between each test instance vs. all training data
D = pdist2(testData, trainData, 'euclidean');
[D,idx] = sort(D, 2, 'ascend');
%# K nearest neighbors
K = 5;
D = D(:,1:K);
idx = idx(:,1:K);
%# majority vote
prediction = mode(trainClass(idx),2);
%# performance (confusion matrix and classification error)
C = confusionmat(testClass, prediction);
err = sum(C(:)) - sum(diag(C))
Run Code Online (Sandbox Code Playgroud)