%书中例题实现朴素贝叶斯 %特征1的取值集合 A1=[1;2;3]; %特征2的取值集合 A2=[4;5;6];%S M L AValues={A1;A2}; %Y的取值集合 YValue=[-1;1]; %数据集和 T=[ 1,4,-1; 1,5,-1; 1,5,1; 1,4,1; 1,4,-1; 2,4,-1; 2,5,-1; 2,5,1; 2,6,1; 2,6,1; 3,6,1; 3,5,1; 3,5,1; 3,6,1; 3,6,-1]; %训练带Laplace平滑的朴素贝叶斯模型 ltheta = LaplaceNBtrain(T(:, 1:size(T, 2) - 1), T(:, size(T, 2)), AValues, YValue, 1); %训练朴素贝叶斯模型 theta = NBtrain(T(:, 1:size(T, 2) - 1), T(:, size(T, 2)), AValues, YValue); %测试两个数据与书中答案相符 ans = NBtest(theta, [2,4;], AValues, YValue) lans = NBtest(ltheta, [2,4;], AValues, YValue)
function y = NBtest(theta, X, AValues, YValue) Xindice=ones(size(X, 1), size(X, 2)); %找到特征在取值集合中的下标,将X矩阵转化为下标矩阵 for j=1:1:size(X, 2) AXi = AValues{j, 1}; for i=1:1:size(X, 1) for t=1:1:size(AXi, 1) if(X(i, j) == AXi(t, 1)) Xindice(i, j) = t; & |
|