手写数字识别

Question:

手写数字识别,用机器学习的方法将手写数字正确分类

输入:

mnist数据库(自己到网上下载~)

                 

输出:

分类正确率

Answer:

function images = loadMNISTImages(filename)
%loadMNISTImages returns a 28x28x[number of MNIST images] matrix containing
%the raw MNIST images

fp = fopen(filename, 'rb');
assert(fp ~= -1, ['Could not open ', filename, '']);

magic = fread(fp, 1, 'int32', 0, 'ieee-be');
assert(magic == 2051, ['Bad magic number in ', filename, '']);

numImages = fread(fp, 1, 'int32', 0, 'ieee-be');
numRows = fread(fp, 1, 'int32', 0, 'ieee-be');
numCols = fread(fp, 1, 'int32', 0, 'ieee-be');

images = fread(fp, inf, 'unsigned char');
images = reshape(images, numCols, numRows, numImages);
images = permute(images,[2 1 3]);

fclose(fp);

% Reshape to #pixels x #examples
images = reshape(images, size(images, 1) * size(images, 2), size(images, 3));
% Convert to double and rescale to [0,1]
images = double(images) / 255;

end
function labels = loadMNISTLabels(filename)
%loadMNISTLabels returns a [number of MNIST images]x1 matrix containing
%the labels for the MNIST images

fp = fopen(filename, 'rb');
assert(fp ~= -1, ['Could not open ', filename, '']);

magic = fread(fp, 1, 'int32', 0, 'ieee-be');
assert(magic == 2049, ['Bad magic number in ', filename, '']);

numLabels = fread(fp, 1, 'int32', 0, 'ieee-be');

labels = fread(fp, inf, 'unsigned char');

assert(size(labels,1) == numLabels, 'Mismatch in label count');

fclose(fp);

end
function Classification
%test_images = textread('C:\Users\Administrator\Desktop\数字媒体技术导论大作业\数字媒体技术作业3\mnist\t10k-images-idx3-ubyte');
%test_lable = textread('C:\Users\Administrator\Desktop\数字媒体技术导论大作业\数字媒体技术作业3\mnist\t10k-labels-idx1-ubyte');

train_images = loadMNISTImages('.\mnist\train-images-idx3-ubyte');
train_labels = loadMNISTLabels('.\mnist\train-labels-idx1-ubyte');
test_images = loadMNISTImages('.\mnist\t10k-images-idx3-ubyte');
test_labels = loadMNISTLabels('.\mnist\t10k-labels-idx1-ubyte');

train_images = train_images';
test_images = test_images';

mdl = ClassificationKNN.fit(train_images,train_labels,'NumNeighbors',1);
predict_label = predict(mdl, test_images);
accuracy = length(find(predict_label == test_labels))/length(test_labels)*100;
disp(accuracy);

end

Algorithm description:

(1)读取图像和标签的训练库和测试库;

读取函数实现在loadMNISTImages 函数以及loadMNISTLabels 函数中。
(2)使用K近邻分类器对数据进行分类,并输出分类正确率;

注意:矩阵的维度转换。
(3)得到最后结果;分类正确率为96.9100。

猜你喜欢

转载自blog.csdn.net/qq_34200964/article/details/79529070