[貝葉斯六]之樸素貝葉斯分類器設計
<個人網頁blog已經上線,一大波乾貨即將來襲:https://faiculty.com/>
/* 版權聲明:公開學習資源,只供線上學習,不可轉載,如需轉載請聯繫本人 .*/
同樣,類似於[貝葉斯四]之貝葉斯分類器設計,我們用一個例子:字母分類,來闡述樸素貝葉斯分類器的設計。
老套路,搞個三部曲:
- 特徵向量生成
- 決策函數設計
- 模型訓練
在做問題分析之前,請先做數據集的分析。
一、數據集分析
數據集來自於UCI:UCI字母分類數據集鏈接
這個數據集原始數據一共包含20000張圖像(一般取前16000張圖像作為訓練,後4000張圖像作為測試),每張圖像經過作者處理後得到了一個16維的特徵(特徵值是一個0-15的整數),標籤就是所代表的字母A-Z。數據形式如下:
1. lettr capital letter (26 values from A to Z) 2. x-box horizontal position of box (integer) 3. y-box vertical position of box (integer) 4. width width of box (integer) 5. high height of box (integer) 6. onpix total # on pixels (integer) 7. x-bar mean x of on pixels in box (integer) 8. y-bar mean y of on pixels in box (integer) 9. x2bar mean x variance (integer) 10. y2bar mean y variance (integer) 11. xybar mean x y correlation (integer) 12. x2ybr mean of x * x * y (integer) 13. xy2br mean of x * y * y (integer) 14. x-ege mean edge count left to right (integer) 15. xegvy correlation of x-ege with y (integer) 16. y-ege mean edge count bottom to top (integer) 17. yegvx correlation of y-ege with x (integer)
其中20000張圖像的分布如下:
1. 789 A 766 B 736 C 805 D 768 E 775 F 773 G 2. 734 H 755 I 747 J 739 K 761 L 792 M 783 N 3. 753 O 803 P 783 Q 758 R 748 S 796 T 813 U 4. 764 V 752 W 787 X 786 Y 734 Z
整理一下這個數據集。
- 一個文件。共20000條數據,我們將前16000條數據作為訓練數據,後4000條數據作為測試數據。
- 數據格式。16維的特徵向量,一個A-Z的label
二、特徵向量生成
由上述的數據集的描述中我們可以知道,字母數據集已經幫我們做好了特徵向量提取(16維數據)的工作。數據形式如下所示。
由此我們只需要經過簡單的處理就能得到我們想要的數據。
- Image數據。上圖所示每行16維向量,每個特徵值取值為0-15的整數。形式為16*N。
- Label。上圖中每行第1列,A-Z。
Step1:數據讀入(loadData.m)
% load data from file, start --start line, end --end linefunction [labels, features] = loadData(filename,start,endl)[data1,data2,data3,data4,data5,data6,data7,data8,data9,data10,data11,data12,data13,data14,data15,data16,data17] = textread(filename, %c%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d,delimiter,,);labels = data1(start:endl,1);features = [data2,data3,data4,data5,data6,data7,data8,data9,data10,data11,data12,data13,data14,data15,data16,data17];features = features(start:endl,:);%labels = labels.;features = features. + 1;% 注意:這裡的下標是0~15end
三、決策函數分析
這裡我們也使用最小錯分準則來設計貝葉斯分類器。所以,我們的目的是求解後驗概率.
3.1 決策函數
由[貝葉斯五]之樸素貝葉斯分析可以知道。
樸素貝葉斯的目標函數如下所示。
對於字母數據集的訓練數據集來說:
- 類別共有26類
- 樣本是16維,每個元素的取值是0~15整數
3.2 模型建立
根據訓練數據和決策函數,我們需要計算模型的參數(也可以稱為訓練過程)。決策函數如下。
其中:
- 是先驗概率,表示每類樣本出現的概率。
- 是用來統計類別的條件下,在各種取值下的可能性(概率)。
在模型建立的時候,我們只需要計算上面兩個參數即可。
Step2: 訓練模型(bc_train.m)
function [model] = bc_train(x, y, J)[K,N] = size(x); %K為維度,N為樣本數% p(w): 類別 i 出現的概率py = zeros(J,1);for i=1:J py(i,:) = sum(y == i)/N;end% p(x_k_i): 樣本中第k個元素為i的個數 / 樣本總數pki = zeros(16,16);for k=1:16 for i=1:16 pki(k,i) = sum(x(k,:) == i)/N; endend% p(x_k_i | j): 第j類樣本中第k個元素為i的樣本數 / 第j類樣本總數pkij = zeros(16,16,J);for j=1:J for k=1:16 xj = x(:,y==j); %屬於第j類的樣本 for i=1:16 pkij(k,i,j) = sum(xj(k,:)==i)/size(xj,2); end endendmodel.pki = pki;model.py = py;model.pkij = pkij;end
3.3 模型測試
決策函數有了,模型有了,那麼我們如何來測試一個數據呢?簡而言之就是輸入樣本,如何得到所屬的類別?
針對輸入樣本,每個樣本的肯定是相同的。根據式子。
我們只需要得到即可,因為有輸入樣本,所以其實我們是知道的值的,然後加上模型中已經計算出了,由此我們將帶入,得到了。然後統計出所有類別的最大值,這個類別就是預測得到的類別。
Step3: 測試數據(bc_predict.m)
function [yp] = bc_predict(model,x,J)[K,N] = size(x);pki = model.pki;py = model.py;pkij = model.pkij;% p(y_j|i): 樣本第i個元素為 x(:,i) 情況下,類別為j的概率pyji = zeros(J,16,N);for j=1:J for i = 1:16 for n=1:N pyji(j,i,n) = pkij(i,x(i,n),j) * py(j) / pki(i,x(i,n)); end endendresult = prod(pyji,2);yp = zeros(N,1);for i=1:N [m,yp(i,:)] = max(result(:,:,i));end
Step4: 主程序(runChar.m)
clearclc%% Step1: read data[train_labels,train_char] = loadData(./char/letter-recognition.data.txt,1,16000);[test_labels,test_char] = loadData(./char/letter-recognition.data.txt,16001,20000);%% Step2: train modeltrain_labels = train_labels - A + 1;model = bc_train(train_char, train_labels, 26);%% Step3: predicttest_labels = test_labels - A + 1;yp = bc_predict(model,test_char,26);accuary_test = sum(yp == test_labels) / length(test_labels);
最終得到的測試精度是: 72.9%
讀者可以在特徵向量生成的時候做點文章以此來提高精度,具體的可以查看我們寫的特徵生成部分,比如PCA等等。
四、參考文獻
[1] UCI Machine Learning Repository: Letter Recognition Data Set.下載鏈接[2] Using the MNIST Dataset.下載鏈接[3] 周志華. 《機器學習》[M]. 清華大學出版社, 2016.[4] 李航. 《統計學習方法》[M].清華大學出版社,2013.[5]機器學習之貝葉斯分類器[6]機器學習通俗入門-樸素貝葉斯分類器
PS: 如需數據和代碼請上faiculty留言
推薦閱讀:
※複習:NN和BP
※面壁者系列:線性回歸
※數據挖掘有哪些常見的應用模型?
※關鍵詞提取Part1(A Quick Review)
※[貝葉斯一]之貝葉斯定理
TAG:機器學習 |