本文仅说明matlab中关于朴素贝叶斯算法中函数运用的简单实例。
使用matlab自带的数据集 fisheriris
此数据集包含以下两个矩阵:
species包含3个种类—‘setosa’,‘versicolor’,‘virginica’
可实现三分类 可仿照这个写
默认情况下,该软件使用具有一定平均值和标准偏差的高斯分布对每个类别内的预测变量分布进行建模。
load fisheriris
X = meas(:,3:4); %仅使用meas里第三和第四的特征
Y = species;
tabulate(Y) %展示Y各个的species的占比
%创建mdl
Mdl = fitcnb(X,Y,...
'ClassNames',{'setosa','versicolor','virginica'});
%预测
Z=meas(25,3:4);
Zclass = predict(Mdl,Z);
setosaIndex = strcmp(Mdl.ClassNames,'setosa');
estimates = Mdl.DistributionParameters{setosaIndex,1};
%使用点表示法显示特定高斯拟合的参数,例如显示setosa中第一个特征的拟合。
%estimates = 2×1
%1.4620
%0.1737
%绘制高斯轮廓
figure
gscatter(X(:,1),X(:,2),Y);
h = gca;
cxlim = h.XLim;
cylim = h.YLim;
hold on
Params = cell2mat(Mdl.DistributionParameters);
Mu = Params(2*(1:3)-1,1:2); % Extract the means
Sigma = zeros(2,2,3);
for j = 1:3
Sigma(:,:,j) = diag(Params(2*j,:)).^2; % Create diagonal covariance matrix
xlim = Mu(j,1) + 4*[1 -1]*sqrt(Sigma(1,1,j));
ylim = Mu(j,2) + 4*[1 -1]*sqrt(Sigma(2,2,j));
ezcontour(@(x1,x2)mvnpdf([x1,x2],Mu(j,:),Sigma(:,:,j)),[xlim ylim]);
% Draw contours for the multivariate normal distributions
end
h.XLim = cxlim;
h.YLim = cylim;
title('Naive Bayes Classifier -- Fisher''s Iris Data');
xlabel('Petal Length (cm)');
ylabel('Petal Width (cm)');
hold off;