机器学习:线性分类、高斯判别分析(GDA)、朴素贝叶斯(NB)

简介:这篇文章主要介绍简单的二分类算法:线性分类器、高斯判别分析、朴素贝叶斯。

一、线性分类器

加入给定如下两类数据(0-1),目测分类器应该对这组数据进行这样的划分。图中,红色样本点表示0,蓝色样本点表示1。

原始数据显示为三维如下:

现在运用前一节介绍的线性拟合来进行分类,即线性分类器。当拟合出来的y值大于等于0.5,则归为1,;否则归为0。

代码如下:

%%
%线性分类器
function Classification_Liner
%%
clc;
clear all;
close all;
%%
n=3;%特征数
m=200;%样本数
x=zeros(m,n);
v0=randn(m/2,2)*0.5-1;
v1=randn(m/2,2)*0.5+1;
figure;hold on;
%axis([-5 5 -5 5]);

plot(v0(:,1),v0(:,2),'r.');
plot(v1(:,1),v1(:,2),'b.');
x(:,1)=1;
x(:,2)=[v0(:,1);v1(:,1)];%前100组是一类,后100组是另一类
x(:,3)=[v0(:,2);v1(:,2)];
y=[zeros(m/2,1);ones(m/2,1)];%前100组是一类,后100组是另一类
%%
figure;hold on;
plot3(x(1:m/2,2),x(1:m/2,3),y(1:m/2,1),'r.');
plot3(x(m/2+1:m,2),x(m/2+1:m,3),y(m/2+1:m,1),'b.');
%%
theta=((x'*x)\x')*y;%最小二乘法
y=x*theta;
for i=1:m
    if (y(i,1)>=0.5)
        y(i,1)=1;
    else
        y(i,1)=0;
    end
end
figure;hold on;
plot3(x(1:m/2,2),x(1:m/2,3),y(1:m/2,1),'r.');
plot3(x(m/2+1:m,2),x(m/2+1:m,3),y(m/2+1:m,1),'b.');
for i=1:n
    fprintf('theta%d=%f;\n',i-1,theta(i,1));%打印估计的参数
end
%完

输出结果:

显然,已经把输入的一组数据分为了两类。同时可会看到,图中本来是属于0的样本(红点),被划分到了1的样本中,这种错误划分的情况,这是不可避免的。数据交叉的越多,错误划分的情况就越明显。

二、高斯判别分析法(GDA)

简单的来说,以一维高斯为例,有两个不同的正态分布如下,当测试点为x1时,可知概率:g0(x1)>g1(x1),此时x1会被判为服从g0(x)的分布,即判别为g0(x)类。当测试点为x2时,显然会判别为g1(x)类。这种也会存在判别失误的情形,例如,x2点本来属于g0(x),但是会判别为g1(x)类。同理可知二维或高维的正态分布情形。

具有n维特征的0-1情况,当然前提是0-1类是服从高斯多元正态分布的。

多元正态分布的公式:

当输入一个测试样本点x时,计算是落在0类的概率大还是落在1类的概率大,将x归于概率较大的那一类。

当输入为如下数据时(2维特征的),0类样本点标记为红色,1类标记为蓝色。

其三维视图为:

对上述样本点运用进行高斯判别分析法(GDA)分类,代码如下:

%%
%高斯判别分析法
clc;
clear all;
close all;
%%
m=200;
n=2;
rp=mvnrnd([1 1],[1 0;0 1],m/2);%生成正样本1
rn=mvnrnd([4 4],[1 0;0 1],m/2);%生成负样本0
y=[ones(m/2,1);zeros(m/2,1)];
figure;hold on;
plot3(rp(:,1),rp(:,2),y(1:m/2,1),'b.');
plot3(rn(:,1),rn(:,2),y(m/2+1:m,1),'r.');
axis([-5 10 -5 10]);
hold off;
x=[rp;rn];
p=sum(y)/m;
%%
positive=find(y);%找到正样本1位置
negative=find(y==0);
%%
mu1=mean(x(positive,:));%计算正(1)样本点均值</span>
mu2=mean(x(negative,:));%计算负(0)样本点均值</span>
sigma1=cov(x(positive,:));%计算样本点协方差矩阵
sigma2=cov(x(negative,:));%计算样本点协方差矩阵
sigma_1=sigma1^(-1);
sigma_2=sigma2^(-1);
A1=1/(((2*pi)^(n/2))*((det(sigma_1))^(1/2)));
A2=1/(((2*pi)^(n/2))*((det(sigma_2))^(1/2)));
for i=1:m
    p0=A1*exp((-1/2)*(x(i,:)-mu1)*sigma_1*(x(i,:)-mu1)');%落在某类的概率
    p1=A2*exp((-1/2)*(x(i,:)-mu2)*sigma_2*(x(i,:)-mu2)');
    if (p0>p1)
        y(i,1)=1;
    else
        y(i,1)=0;
    end
end
%%
figure;hold on;
plot3(x(positive,1),x(positive,2),y(positive,1),'b.');
plot3(x(negative,1),x(negative,2),y(negative,1),'r.');
axis([-5 10 -5 10]);
hold off;
%完

输出结果为,明显有一个点判别错误:

如果要看详细的数学推导公式的话,请自行查阅STANFIRD机器学习公开课的讲义。

时间: 2024-10-09 18:06:33

机器学习:线性分类、高斯判别分析(GDA)、朴素贝叶斯(NB)的相关文章

高斯判别分析、朴素贝叶斯和逻辑回归

近来看论文中经常看到GDA和朴素贝叶斯,并且论文中说的算法中用到的贝叶斯公式,对怎么用的原理比较困惑,今天主要看了斯坦福机器学习的关于GDA,NB和LR的讲义部分.理解了贝叶斯公式在GDA和NB中的原理,以及GDA和LR的关系. 与以前学习贝叶斯公式相比贝叶斯公式:对于目标B有不同的到达方式Ai,i=1,2,3,...,n.已知p(Ai)和p(B|Ai)的话,如果知道B发生了,可以知道Ai的后验概率. 贝叶斯公式图示 在GDA和NB中,类别标签就相当于Ai,每一个特征相当于B的一个分量.根据采集

Stanford机器学习课程笔记2-高斯判别分析与朴素贝叶斯

转载请注明出处: http://xiahouzuoxin.github.io/notes/ 判别学习算法和生成学习算法 高斯判别分析(Gaussian Discriminant Analysis) 朴素贝叶斯算法(Naive Bayesian) 拉普拉斯平滑(Laplace smoothing) 判别学习算法和生成学习算法 判别学习算法:直接学习p(y|x),即直接通过输入特征空间x去确定目标类型{0,1},比如Logistic Regression和Linear Regression以及感知学

Stanford大学机器学习公开课(五):生成学习算法、高斯判别、朴素贝叶斯

(一)生成学习算法 在线性回归和Logistic回归这种类型的学习算法中我们探讨的模型都是p(y|x;θ),即给定x的情况探讨y的条件概率分布.如二分类问题,不管是感知器算法还是逻辑回归算法,都是在解空间中寻找一条直线从而把两种类别的样例分开,对于新的样例,只要判断在直线的哪一侧即可:这种直接对问题求解的方法可以称为判别学习方法. 而生成学习算法则是对两个类别分别进行建模,用新的样例去匹配两个模板,匹配度较高的作为新样例的类别,比如分辨大象(y=1)和狗(y=0),首先,观察大象,然后建立一个大

斯坦福机器学习实现与分析之六(朴素贝叶斯)

朴素贝叶斯(Naive Bayes)适用于离散特征的分类问题,对于连续问题则需将特征离散化后使用.朴素贝叶斯有多元伯努利事件模型和多项式事件模型,在伯努利事件模型中,特征每一维的值只能是0或1,而多项式模型中特征每一维的值可取0到N之间的整数,因此伯努利模型是多项式模型的一种特例,下面的推导就直接使用伯努利模型. 朴素贝叶斯原理推导 与GDA类似,朴素贝叶斯对一个测试样本分类时,通过比较p(y=0|x)和p(y=1|x)来进行决策.根据贝叶斯公式: \( \begin{aligned} p(y=

斯坦福《机器学习》Lesson5感想———2、朴素贝叶斯算法

朴素贝叶斯算法与上篇中写到到生成学习算法的思想是一致的.它不需要像线性回归等算法一样去拟合各种假设的可能,只需要计算各种假设的概率,然后选择概率最高的那种假设分类类别.其中还添入了一个贝叶斯假定:在给定目标值y时属性值x之间相互独立.这样的分类算法被称为朴素贝叶斯分类器(Naive Bayes classifier)  . 1.朴素贝叶斯算法 在朴素贝叶斯算法的模型里,给定的训练集为, 可计算,.因为贝叶斯假定,可以计算出联合似然概率函数: 最大化联合似然概率函数可得到: 然后我们就可以对新的数

文本分类之情感分析 – 朴素贝叶斯分类器

情感分析正成为研究和社交媒体分析的热点领域,尤其是在用户评论和微博上.它是文本挖掘的一种特殊情况,一般关注在识别正反观点上,虽然它常不很准确,它仍然是有用的.为简单起见(因为训练数据容易获取),我将重点放在2个可能的情感分类:积极的和消极的. NLTK 朴素贝叶斯分类 NLTK附带了所有你需要的情感分析的入手的东西:一份带有分为POS和NEG类别的电影评论语料,以及一些可训练分类器.我们先从一个简单的NaiveBayesClassifier作为基准,用布尔特征提取. 词袋特征提取 所有NLTK分

《机器学习实战》学习笔记:基于朴素贝叶斯的分类方法

概率是许多机器学习算法的基础,在前面生成决策树的过程中使用了一小部分关于概率的知识,即统计特征在数据集中取某个特定值的次数,然后除以数据集的实例总数,得到特征取该值的概率. 目录: 一.基于贝叶斯理论的分类方法 二.关于朴素贝叶斯的应用场景 三.基于Python和朴素贝叶斯的文本分类 1.准备数据 2.训练算法 3.测试算法 四.小结 以下进入正文: 一.基于贝叶斯理论的分类方法 假设有两类数据组成的数据集如下: 其中,假设两个概率分布的参数已知,并用p1(x,y)表示当前数据点(x,y)属于类

机器学习Matlab实战之垃圾邮件分类————朴素贝叶斯模型

本系列来自于我<人工智能>课程复习总结以及机器学习部分的实验总结 垃圾邮件分类是监督学习分类中一个最经典的案例,本文先复习了基础的概率论知识.贝叶斯法则以及朴素贝叶斯模型的思想,最后给出了垃圾邮件分类在Matlab中用朴素贝叶斯模型的实现 1.概率 1.1 条件概率 定义:事件B发生的情况下,事件A发生的概率记作条件概率P(A|B) P(A|B)=P(A∧B)P(B) 条件概率也叫后验概率,无条件概率也叫先验概率(在没有任何其它信息存在的情况下关于命题的信度) 可以得到乘法规则: P(A∧B)

机器学习四 -- 基于概率论的分类方法:朴素贝叶斯

基于概率的分类方法:朴素贝叶斯 贝叶斯决策理论 朴素贝叶斯是贝叶斯决策理论的一部分,所以在讲解朴素贝叶斯之前我们先快速简单了解一下贝叶斯决策理论知识. 贝叶斯决策理论的核心思想:选择具有最高概率的决策.比如我们毕业选择就业方向,选择C++方向的概率为0.3,选择Java的概率为0.2,选择机器学习的概率为0.5.那么我们就把这样的一位毕业生就业方向归类为机器学习方向. 条件概率 什么是条件概率?事件A在另一个事件B已知发生条件下的发生概率,记为P(A|B),读作“在B条件下A的概率”. 例子1: