matlab基於樸素貝葉斯變換的手寫數字識別

2021-09-24 04:01:44 字數 2088 閱讀 9611

歡迎各位大佬的指點。

​ 原理部分參考大佬的即可。

​ 原始碼總共由三部分組成,fun1.m ,fun2.m ,predeal.m。

​ 訓練集在同資料夾下名為training資料夾內,內含「1」 「2」等等資料夾,各個資料夾內有1.1,1.2等等**。

為了便於處理,原圖大小均為50*50,命名方式統一為」n.n.png「。

如下圖

2

測試集我放在training下,隨意即可,改一下路徑就行。

讀取並二值化

將分割成5*5矩陣

function res = fun1( a )

%fun1 此處顯示有關此函式的摘要

% 此處顯示詳細說明

thresh=graythresh(a);%確定二值化閾值

a=im2bw(a,thresh);%對影象二值化

% figure;subplot(121);imshow(a);

% subplot(122);imshow(a)

[m,n]=size(a);

m=floor(m/5);

n=floor(n/5);

halfsize=m*n/3;

res=zeros(5,5);

for c_row=1:5

for c_high=1:5

count=0;

for i=(c_row-1)*m +1: c_row*m

for j=(c_high-1)*n +1:c_high*n

if a(i,j)==0

count=(count+1);

%fprintf('count=%f',count)

endend

endif count>=halfsize

res(c_row,c_high)=1; %判斷有字跡的為1

else

res(c_row,c_high)=0;

endend

endend

1.由於訓練集中每個數字的訓練數量相等,則貝葉斯公式中類別的先驗概率相等;對於同乙個測試的同一特徵,其先驗概率也是相同的,因此只需比較特徵的後驗概率即可。由於假設特徵的樸素的,因此只需將各個特徵的概率相乘即可得到類別的後驗概率,即為所求。

function pos = fun2( res ,flag )

%fun2 此處顯示有關此函式的摘要

% 此處顯示詳細說明

pos=1;

for tem1=1:5

for tem2=1:5

if(res(tem1,tem2)==1)

pos=pos*flag(tem1,tem2);

endend

endend

clc;clear;

%訓練集

for jj=0:3

eval(['flag' num2str(jj) '=zeros(5,5);']);

for ii=0:9

da=['training\' num2str(jj) '\' num2str(jj) '.' num2str(ii) '.png'];

a=imread(da);

res=fun1(a);

eval(['flag' num2str(jj) '=flag' num2str(jj) '+res;']);

endend%%測試集

a=imread('test0.png');

res=fun1(a);

%計算類別num的概率

array=zeros(1,10);

for num=0:3

eval(['pos=fun2(res,flag' num2str(num) ');']);

array(1,num+1)=pos;

end[x,y]=max(array);%預設x是每一列的最大值向量,y是每列的最小值的下標組成的向量

fprintf('識別結果為:%d',y-1);

樸素貝葉斯

樸素貝葉斯演算法是一種基於概率統計的分類方法,它主要利用貝葉斯公式對樣本事件求概率,通過概率進行分類。以下先對貝葉斯公式做個了解。對於事件a b,若p b 0,則事件a在事件b發生的條件下發生的概率為 p a b p a b p b 將條件概率稍作轉化即可得到貝葉斯公式如下 p a b p b a ...

樸素貝葉斯

1.準備資料 從文字中構建詞向量 2.訓練演算法 從詞向量計算概率 3.測試演算法 儲存為 bayes.py 檔案 參考 coding utf 8 from numpy import 文字轉化為詞向量 def loaddataset postinglist my dog has flea probl...

樸素貝葉斯

機器學習是將資料轉化為決策面的過程 scikit learn縮寫為sklearn 訓練乙個分類器,學習之後 其處理的準確性 def nbaccuracy features train,labels train,features test,labels test from sklearn.bayes ...