vlambda博客
学习文章列表

模型研究15-判别分析与朴素贝叶斯

一、判别分析

判别分析是一种分类算法,属于有监督学习,在判别分析里面,最简单的是线性判别分析。

有这么一组数据,x1和x2,上图为x1和x2的分布,红色属于一类,蓝色属于一类,我们要找一个方法,将其分开,线性判别分析如下:

模型研究15-判别分析与朴素贝叶斯

所有的点都可以在直线上做一个投影,通过投影间距离,来做判定标准,上图可以看出,红色投影在一边,蓝色在一边,如果分类分的特别好的话,我们就看他们的平均值,求红色点的平均数,再求蓝色点的平均数,如果两个点的平均数差的很远的话,就是说明分开的很好。还可以用另外一种线:

模型研究15-判别分析与朴素贝叶斯

最后就是是想让平均值分的开一点,哪种分的开,那种就好一点。

寻求平均值的计算公式如下:

模型研究15-判别分析与朴素贝叶斯

单纯看平均值来分析,还是有些缺点的。所以希望同时引入对集中程度的评价,相当于方差:

模型研究15-判别分析与朴素贝叶斯

最终的评价指标为:

模型研究15-判别分析与朴素贝叶斯

方差越集中越好,平均值差越大越好。通过这个标准,来寻找不同投影情况,来比较,选一个最好的。

判别分析在matlab的运用:

clear

load fisheriris

MdlLinear = fitcdiscr(meas,species);

meanmeas = mean(meas);    % 人为创建一个新的x值

meanclass = predict(MdlLinear,meanmeas)   %预测

% 二次

MdlQuadratic = fitcdiscr(meas,species,'DiscrimType','quadratic');

meanclass2 = predict(MdlQuadratic,meanmeas)

二、朴素贝叶斯

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。这里就来介绍贝叶斯定理以及贝叶斯分类中最简单的一种:朴素贝叶斯分类。

首先,了解一下贝叶斯定理:

模型研究15-判别分析与朴素贝叶斯

模型研究15-判别分析与朴素贝叶斯

例子:

一个班级有300个女生,200个男生

        P(女)=300/500=0.6

        P(男)=200/500=0.4

1%的学生不及格

        P(不及格)=0.01

不及格的学生中,男生占50%,女生占50%

        P(男|不及格)=0.5

        P(女|不及格)=0.5

求:一个男生不及格的概率是多少?

        P(不及格|男)=?

模型研究15-判别分析与朴素贝叶斯

朴素贝叶斯算法即计算各种情况的概率,然后通过以下公式进行分类预测,,然后即可得到所需要的分类预测模型。

模型研究15-判别分析与朴素贝叶斯

载入测试数据:

clear

load fisheriris

X = meas(:,1:2);

Y = species;

labels = unique(Y);

figure;

gscatter(X(:,1), X(:,2), species,'rgb','osd');

xlabel('Sepal length');

ylabel('Sepal width');

模型研究15-判别分析与朴素贝叶斯

训练朴素贝叶斯分类器

mdl = fitcnb(X,Y);

测试数据

[xx1, xx2] = meshgrid(4:.01:8,2:.01:4.5);

XGrid = [xx1(:) xx2(:)];

预测

[predictedspecies,Posterior,~] = predict(mdl,XGrid);

sz = size(xx1);

s = max(Posterior,[],2);

结果绘图

figure

hold on

surf(xx1,xx2,reshape(Posterior(:,1),sz),'EdgeColor','none')

surf(xx1,xx2,reshape(Posterior(:,2),sz),'EdgeColor','none')

surf(xx1,xx2,reshape(Posterior(:,3),sz),'EdgeColor','none')

xlabel('Sepal length');

ylabel('Sepal width');

colorbar

view(2)

hold off

模型研究15-判别分析与朴素贝叶斯

分别绘图

figure('Units','Normalized','Position',[0.25,0.55,0.4,0.35]);

hold on

surf(xx1,xx2,reshape(Posterior(:,1),sz),'FaceColor','red','EdgeColor','none')

surf(xx1,xx2,reshape(Posterior(:,2),sz),'FaceColor','blue','EdgeColor','none')

surf(xx1,xx2,reshape(Posterior(:,3),sz),'FaceColor','green','EdgeColor','none')

xlabel('Sepal length');

ylabel('Sepal width');

zlabel('Probability');

legend(labels)

title('Classification Probability')

alpha(0.2)

view(3)

hold off

模型研究15-判别分析与朴素贝叶斯

Learning Power 学习干货
建模论文



狂搞计量












计量21-


模型研究














最强系列


问题探讨



生活旅游感悟