歡迎各位大佬的指點。
原理部分參考大佬的即可。
原始碼總共由三部分組成,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 ...