人工神經網絡、貝葉斯、歐氏距離在手寫數字識別中的應用[原創]

Matlab要求>=Matlab 7.0
Matlab 代碼: http://download.csdn.net/source/2655457
VC代碼: http://download.csdn.net/source/2620375
VC 可執行文件: http://download.csdn.net/source/2620323
運行方法:
註冊MyControl.ocx控件,雙擊下圖文件即可.
install.jpg
Matlab的在Matlab中打開myFigDemo.fig運行即可(對應UI的m文件爲myFigDemo.m)。一些識別結果如下:
2.jpg
5.jpg
6.jpg
VC可執行程序直接雙擊DlgDemo.exe運行。一些識別結果如下:
9.jpg
一、特徵選擇
對手寫數字特徵的提取有很多種方法,本文首先找到手寫樣品的起始位置,在此附近搜索該樣品的寬度和高度,再將每個樣品的長度和寬度5等分,構成一個5*5的均勻小區域,如圖:
5_5.jpg
對每一個小區域內的黑像素個數進行統計統計,除以該區域的面積總數,即得特徵值。本文提供了一個ActiveX控件可用於多種語言,甚至可以嵌入到web中。使用該控件的GetFeature()方法即可獲得上述25個特徵值。
Matlab的使用例子如下:
h=handles.activex5;
data=invoke(h,'GetFeature');

VC的使用例子如下:
void CDlgDemoDlg::OnBtnRecognition()
{
       ……
VARIANT vt;
UpdateData();
       vt=m_myPic.GetFeature();   //m_myPic爲ActiveX變量
       ……
}
記特徵向量X(x_1,x_2,x_i,…,x_25),x_i表示樣品X的第i個特徵分量。
接下來討論一個問題要有多少樣品來做特徵庫呢?引入一個概念樣品類別即有共同屬性的一類樣品的劃分。本文討論的樣品類別是0到9這十個數字類別。一般來說一個類別中的樣品數是特徵值數目的5-10倍,例類別1的樣品數=25*5=125個樣品(本文取130),總的特徵庫樣品數=10*125=1250個樣品(本文是1300)。本文的特徵庫數據存放在templat.mat(Matlab專用)和templat.txt(其它語言用)。

Templat.mat中存放的是一組結構體:
Struct pattern
{
Index;          //類別,比如數字0
Num;          //該類別的樣品數
Feature[j];    //記錄類第i個樣品,第j個特徵
}
templat.txt以|分隔爲列,每一行爲一個樣品的記錄。
第一列爲樣品類別,第二列是該類別的樣器個數,其它列爲對應的25個特徵值。
二、分類器的構造
本文的Matlab版程序中提供了三個分類器的構造,VC的只提供了歐式距離的分類器。
歐式距離分類器 識別離率>80%
BP人工神經網絡分類器 >70%   (注:由於神經網記憶的不是讀者的筆跡所以識別率低一些)
貝葉斯分類器>95% (爲什麼呢?大家有興趣看數學書。)
本文着重講最簡單的歐式距離分類器,其它兩種不是一點文字講得清的。
給定一個手寫體的25個特徵值怎麼與特徵庫的標準樣品比較用距離分類器歸類呢?
EF.jpg
設X爲待分類的手寫數字特徵值向量,Xi爲特徵庫中某個樣品的特徵向量,計算X,到Xi的距離d(X,Xi)。取min(d(X,Xi)),則X,劃分跟Xi屬同一類.相應的Matlab代碼如下:
function y = neartempleta(data)
%data------待識別的手寫數字特徵向量
%y-----------識別結果
load templet.mat pattern;   %加載特徵庫中的樣品
d = 0;
min = [inf,0];
for i = 1:10
for j = 1:pattern(i).num
       d = sqrt(sum((pattern(i).feature(:,j)-data').^2));   %計算待識別手寫數字到特徵庫某樣品的距離
       if(min(1)>d)
         min(1) = d;
         min(2) = i-1;
       end
end
end
y = min(2);   %返回識別結果
end
接下來說一下貝葉斯分類器中的,先驗概率和條件概率的計算方法,其它的細節讀者看代碼自己研究吧。
BPF.jpg
後驗概率的最在值的類別(0-9)就是手寫數字的所屬類別。代碼在bayeser.m裏,就一列出來了。
最後簡單的說一下BP人神經網絡,不得不吸人工神經網絡是一個很讓着迷的東西。BP神經網絡的結構如下:
bp.jpg
本文采用了梯度下降學習算法,一些訓練參數如下圖:
bp2.jpg
代碼在bpnet.m(仿真網絡)和bpgdtrain(訓練網絡)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章