机器学习十大算法之Matlab-8贝叶斯

机器学习十大算法之Matlab-8贝叶斯

  • NB
    • Matlab代码
      • 例子1-系统fitcnb做多分类
      • 例子2-使用函数 fitcnb 时还可以预先指定先验概率
      • 例子3

NB

Matlab代码

例子1-系统fitcnb做多分类

  • nba_mat.m
%朴素贝叶斯算法MATLAB实现
clear all; close all; clc;
load fisheriris   %载入样本数据
X=meas; %训练样本矩阵
Y=species; %标签向量
Mdl=fitcnb(X,Y)  %训练朴素贝叶斯模型
Mdl.ClassNames   %查看模型中的分类名称
Mdl.Prior       %查看模型中的先验概率
predict(Mdl,[1 0.2 0.4 2]) %预测新样本的类别

例子2-使用函数 fitcnb 时还可以预先指定先验概率

  • nba1_mat.m
load fisheriris
X = meas;
Y = species;
classNames = {'setosa','versicolor','virginica'}; %指定类的顺序
prior = [0.5 0.2 0.3]; %给定每个类的先验概率
Mdl = fitcnb(X,Y,'ClassNames',classNames,'Prior',prior);
%按指定的类序和先验概率创建新模型
CVMdl = crossval(Mdl); %对Mdl模型k折交叉验证
Loss = kfoldLoss(CVMdl), %损失率
rng(1); %可重复性
defaultPriorMdl = Mdl;
FreqDist = cell2table(tabulate(Y)); %混淆矩阵
defaultPriorMdl.Prior = FreqDist{:,3}; %先验概率用1/3,1/3,1/3
defaultCVMdl = crossval(defaultPriorMdl); %k折交叉验证
defaultLoss = kfoldLoss(defaultCVMdl), %损失率

例子3

load fisheriris %载入Iris数据集
X = meas(:,3:4);  %为方便可视化仅使用3,4两个特征
Y = species; %类标签
tabulate(Y),  %展示Y各个的species的占比
%创建朴素贝叶斯模型
Mdl = fitcnb(X,Y, 'ClassNames',{'setosa','versicolor','virginica'});
%预测
Z=meas(25,3:4);
Zclass = predict(Mdl,Z), 
%绘制高斯轮廓
figure
gscatter(X(:,1),X(:,2),Y, 'kkk','*x+'); %数据散点图
h = gca; hold on
cxlim = h.XLim; cylim = h.YLim; %横、纵坐标范围
Params = cell2mat(Mdl.DistributionParameters); 
Mu = Params(2*(1:3)-1,1:2); %均值
Sigma = zeros(2,2,3); %方差
for j = 1:3
    Sigma(:,:,j) = diag(Params(2*j,:)).^2; %建立对角协方差矩阵
    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]);
    %画多为正态分布等高线图
end
h.XLim = cxlim; h.YLim = cylim;
title('朴素贝叶斯分类器--鸢尾属植物数据集');
xlabel('花瓣长度(cm)');
ylabel('花瓣宽度 (cm)');
hold off;

你可能感兴趣的:(matlab,算法)