機器學習——朴素貝葉斯分類器


貝葉斯分類是一類分類算法的總稱,這類算法均已貝葉斯定理為基礎,因此統稱為貝葉斯分類。在貝葉斯分類器中,常用朴素貝葉斯,就類似於看見黑人,大多會認為來自非洲。

事件A在事件B(發生)的條件下的概率,與事件B在事件A(發生)的條件下的概率是不一樣的,但他們有確定的關系,貝葉斯定理就是對在這種關系的陳述。

優點:

簡單、高效、健壯。能應用到大型數據庫中,方法簡單且分類准確率高,速度快。

缺點:

相關屬性不獨立,會影響貝葉斯分類准確率。

改進方法:

降低獨立性假設的算法, 例如,TAN(Tree Augmented Bayes Network)算法、貝葉斯網絡分類器(Bayes Network Classifier,BNC)。

朴素貝葉斯分類步驟:

(1)設為一個待分類項,a為x的一個特征屬性。

(2)有類別集合

 

(3)計算

(4)如果,則

總體來說,大致分為三個階段:

 

實例介紹:

運用朴素貝葉斯算法根據客戶的16個屬性,為一家銀行建一個分類器,判斷客戶是否願意購買理財產品:

MATLAB實現代碼:

%% ————————————2.朴素貝葉斯分類器——————————————%%
load 'bank.mat';
names = bank.Properties.VariableNames;%使用數據文件,記錄自變量和因變量的屬性名
category = varfun(@iscellstr,bank,'Output','uniform'); %輸出格式為數值格式。為字符串的返回結果為1,為數字的返回結果為0
for i = find(category)
    bank.(names{i}) = categorical(bank.(names{i}));
    %將bank中的屬性創建分類數組。
end
catPred = category(1:end-1); %記錄除y值的是否為字符串的邏輯矩陣
dist = repmat({'normal'},1,width(bank)-1); %repmat(A,M,N)指將A中的內容賦值給M*N的矩陣,A可為字符串或者矩陣等。
dist(catPred) = {'mvmn'}; %將不為數值型的屬性賦值為mvmn。
%預測變量
X = table2array(varfun(@double,bank(:,1:end-1)));%先將自變量轉化為double類型,再將table轉化為數組類型。
Y = bank.y; %將因變量賦值給Y
disp('數據中YES&No的統計結果');
tabulate(Y) %求重復數字的個數使用tabulate,占比率

%%%設置交叉驗證方式
cv = cvpartition(height(bank),'holdout',0.40);
%height(bank)取bank的行數,采用holdout validation(保持驗證),其中0.4*height(bank)的樣本會作為測試集
Xtrain = X(training(cv),:);
%training是交叉驗證的訓練函數
%training(cv)返回'holdout' or 'resubstitution'的邏輯變量
%training(c,i)返回'kfold' or 'leaveout'.的邏輯變量
%test是交叉驗證的測試集函數
%test(cv)與training函數用法類似
Ytrain = Y(training(cv),:);
Xtest = X(test(cv),:);
Ytest = Y(test(cv),:);
Xnum = [X(:,~catPred) dummyvar(X(:,catPred))];
%~catPred是指catPed~=0的列,即初始不為數值型的屬性
%dummyvar是用於生成虛擬變量的函數,主要將某種類別轉化為0和1組合的矩陣。即使用數值變量代表研究的樣本子組。
Ynum = double(Y)-1;
XtestNum = Xnum(test(cv),:);
YtestNum = Ynum(test(cv),:);
%訓練分類器
Nb = NaiveBayes.fit(Xtrain,Ytrain,'Distribution',dist);
%進行預測
Y_Nb = Nb.predict(Xtest);
Yscore_Nb = Nb.posterior(Xtest);
Yscore_Nb = Yscore_Nb(:,2);
%計算混淆矩陣
disp('貝葉斯分類結果');
C_nb = confusionmat(Ytest,Y_Nb)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM