Pattern Recognition For HandWritten with Semeion Data

We can get the semeion handwritten digi data set  from http://archive.ics.uci.edu/ml/. You can read the data description firstly. 

First , statistic the mean of each species. Then compute sample for each species euclidean distance. Find the min distance and recognise it .

Matlab code:

load semeion.data
img = semeion(:,1:256);
%%%%%%%%%%%%%恢复成624*640的图像%%%%%%%
handwrite = zeros(16,16);
handwritemap = zeros(25488,16);
for n=1:1593
for m=1:16
    left = (m-1)*16+1;
    right = left + 15;
    height = (n-1)*16 +1;
    handwrite(m,1:16) = img(n,left:right);
end
handwritemap(height:height+15,1:16)=handwrite(1:16,1:16);
end
handwritemap2 = zeros(624,640);height = 0;
for m=1:39
    for n=1:40
        xindex = 16*(n-1)+1;
        yindex = 16*(m-1)+1;
        handwritemap2(yindex:yindex+15,xindex:xindex+15) = handwritemap(height*16+1:height*16+16,1:16);
        height = height+1;
    end
end
imshow(handwritemap2); %%%%%显示样本图像
imwrite(handwritemap2,'handwritemap2.bmp','bmp');




%%%%%%%%统计召回率,精度
label = semeion(:,257:266); %每个样本的标签
labeldec = zeros(1593,1);
for i=1:10  %将标签的值转化为10进制
    tmp = find(label(:,i));
    labeldec(tmp,1) = i;
end


samplesize = size(img,1);%训练样本大小
dim = size(img,2);%样本维数
Labels = unique(labeldec);
Labelsize = length(Labels);%标签的种类
Templates = zeros(Labelsize,dim);

for i = 1:Labelsize%统计训练样本集
    id = labeldec==i; %matlab自动优化的,原来为id = find (lebaldec = i);
    Templates(i,:) = mean(img(id,:));%每种类别的均值
end

Dist = pdist2(img,Templates);%识别,识别的集合也是img,返回Euclidean距离
[y,id] = min(Dist,[],2);%找到每个识别对象的最小距离
Out = Labels(id);

acceptarray = zeros(Labelsize,1);
recall = zeros(Labelsize,1);
recognition = zeros(Labelsize,1);
precious =  zeros(Labelsize,1);
right = 0;
for n = 1:samplesize
        b = Out(n,1);
        recognition(b,1) = recognition(b,1) + 1;%统计出识别的数量
end
for i = 1:10
    accept = 0;
    tmp = find(label(:,i));
    tmpsize = size(tmp);
    for m = 1:tmpsize    
    if Out(tmp(m,1),1)==i
        accept = accept + 1;
    end
    end
     acceptarray(i,1) = accept;
     recall(i,1) = accept/tmpsize(1,1);%召回率
     precious(i,1) = accept/recognition(i,1);%精确度
     right = right + accept;
end
rateofright = right/samplesize;


%无法使用ClassificationKNN.fit,因为这是2012a之后才添加的,我的版本是2010a
% model = ClassificationKNN.fit(img,labelK,'NumNeighbors',1);
% Z = predict(model,img);


handwrite:


the result of precious:


recall:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值