简单分类器的MATLAB实现

合集下载

贝叶斯分类器MATLAB经典程序

贝叶斯分类器MATLAB经典程序

function Bayes2%为了提高实验样本测试的精度,故采用多次模拟求平均值的方法N=input('实验模拟次数N(N最好为奇数)=');Result(1:3,1:3)=0; %判别矩阵的初始化for k=1:N %控制程序模拟次数N%生成二维正态分布的样本2 X N 维的矩阵X1=mvnrnd([1 2],[4 0;0 6],300)'; %2 X NX2=mvnrnd([5 3],[5 0;0 1],200)';X3=mvnrnd([4 7],[2 0;0 9],500)'; %样本程序%---------------------------------------------------%%测试样本X10=mvnrnd([1 2],[4 0;0 6],100)'; %2 X NX20=mvnrnd([5 3],[5 0;0 1],100)';X30=mvnrnd([4 7],[2 0;0 9],100)';%先验概率P(1)=length(X1)/(length(X1)+length(X2)+length(X3));P(2)=length(X2)/(length(X1)+length(X2)+length(X3));P(3)=length(X3)/(length(X1)+length(X2)+length(X3));%计算相关量cov(X):协方差矩阵Ave:均值%--------------------------------------------------------%W1=-1/2*inv(cov(X1')); W2=-1/2*inv(cov(X2')); W3=-1/2*inv(cov(X3'));%Ave1=(sum(X1')/length(X1))';Ave2=(sum(X2')/length(X2))';Ave3=(sum(X3')/length(X3))';%计算平均值(2维列向量)w1=inv(cov(X1'))*Ave1;w2=inv(cov(X2'))*Ave2;w3=inv(cov(X3'))* Ave3;%2w10=-1/2*Ave1'*inv(cov(X1'))*Ave1-1/2*log(det(cov(X1')))+log(P(1 ));w20=-1/2*Ave2'*inv(cov(X2'))*Ave2-1/2*log(det(cov(X2')))+log(P(2 ));w30=-1/2*Ave3'*inv(cov(X3'))*Ave3-1/2*log(det(cov(X3')))+log(P(3 ));%-----------------------------------------------------------%for i=1:3for j=1:100if i==1g1=X10(:,j)'*W1*X10(:,j)+w1'*X10(:,j)+w10;g2=X10(:,j)'*W2*X10(:,j)+w2'*X10(:,j)+w20;g3=X10(:,j)'*W3*X10(:,j)+w3'*X10(:,j)+w30;if g1>=g2&g1>=g3Result(1,1)=Result(1,1)+1;elseif g2>=g1&g2>=g3Result(1,2)=Result(1,2)+1;%记录误判情况elseResult(1,3)=Result(1,3)+1;%记录误判情况endelseif i==2g1=X20(:,j)'*W1*X20(:,j)+w1'*X20(:,j)+w10;g2=X20(:,j)'*W2*X20(:,j)+w2'*X20(:,j)+w20;g3=X20(:,j)'*W3*X20(:,j)+w3'*X20(:,j)+w30;if g2>=g1&g2>=g3Result(2,2)=Result(2,2)+1;elseif g1>=g2&g1>=g3Result(2,1)=Result(2,1)+1;elseResult(2,3)=Result(2,3)+1;endelseg1=X30(:,j)'*W1*X30(:,j)+w1'*X30(:,j)+w10;g2=X30(:,j)'*W2*X30(:,j)+w2'*X30(:,j)+w20;g3=X30(:,j)'*W3*X30(:,j)+w3'*X30(:,j)+w30;if g3>=g1&g3>=g2Result(3,3)=Result(3,3)+1;elseif g2>=g1&g2>=g3Result(3,2)=Result(3,2)+1;elseResult(3,1)=Result(3,1)+1;endendendendend%画出各样本的分布情况subplot(2,1,1)plot(X1(1,:),X1(2,:),'r.','LineWidth',2),hold onplot(X2(1,:),X2(2,:),'go','LineWidth',2),hold onplot(X3(1,:),X3(2,:),'b+','LineWidth',2),hold ontitle('训练样本分布情况')legend('训练样本1','训练样本2','训练样本3') subplot(2,1,2)plot(X10(1,:),X10(2,:),'r.','LineWidth',2),hold onplot(X20(1,:),X20(2,:),'go','LineWidth',2),hold onplot(X30(1,:),X30(2,:),'b+','LineWidth',2),hold ontitle('测试样本分布情况')legend('测试样本1','测试样本2','测试样本3')%由于多次循环后存在小数,根据实际情况判别矩阵须取整%如果N为偶数,可能出现小数为0.5的情况,此时将无法更加准确判断矩阵Result=Result/N %判别矩阵,反映Bayes的判别效果for i=1:length(Result)if round(sum(Result(i,:)-fix(Result(i,:))))==1[m,n]=find(max(Result(i,:)-fix(Result(i,:)))==(Result(i,:)-fix(Result( i,:))));n=min(n);%存在小数点相同的情况随即选取一个for j=1:length(Result)if j==nResult(i,j)=fix(Result(i,j))+1;elseResult(i,j)=fix(Result(i,j));endendelseif round(sum(Result(i,:)-fix(Result(i,:))))==2[m,n1]=find(max(Result(i,:)-fix(Result(i,:)))==(Result(i,:)-fix(Resul t(i,:))));[m,n2]=find(min(Result(i,:)-fix(Result(i,:)))==(Result(i,:)-fix(Result (i,:))));n1=min(n1);n2=min(n2);%如果有存在小数点相同的情况,随即选取一个for j=1:length(Result)if j==n1Result(i,j)=fix(Result(i,j))+1;elseif j==n2Result(i,j)=fix(Result(i,j));elseResult(i,j)=fix(Result(i,j))+1;endendelsecontinue,endend总结的来说,我们都知道,只要有意义,那么就必须慎重考虑。

利用Matlab进行数据聚类与分类的方法

利用Matlab进行数据聚类与分类的方法

利用Matlab进行数据聚类与分类的方法导言在当今大数据时代,处理和分析庞大的数据成为许多领域的重要任务,而数据聚类与分类是其中重要的一环。

Matlab作为一种功能强大的编程语言和工具,在数据聚类与分类方面具有广泛的应用。

本文将介绍利用Matlab进行数据聚类与分类的常用方法和技巧。

一、数据聚类的概念与方法1.1 数据聚类的定义数据聚类是指将具有相似特征的数据对象自动分成若干组的过程,旨在将相似的数据归为一类,不相似的数据分开。

1.2 常用的数据聚类方法- K-means聚类算法:K-means是一种常见且简单的数据聚类方法,通过迭代优化的方式将数据划分成K个簇。

- 层次聚类算法:层次聚类是一种基于树形结构的聚类方法,它将数据逐步合并或分裂,直到得到最终的聚类结果。

- 密度聚类算法:密度聚类根据数据点的密度特征进行聚类,能够有效地发现任意形状和大小的聚类簇。

- 谱聚类算法:谱聚类结合图论的思想,通过计算数据的拉普拉斯矩阵特征向量,将数据聚类成多个划分。

二、利用Matlab进行数据聚类2.1 准备工作在使用Matlab进行数据聚类之前,需要准备好数据集。

通常,数据集需要进行预处理,包括数据清洗、特征选择和降维等步骤。

2.2 K-means聚类利用Matlab的统计工具箱,可以轻松实现K-means聚类算法。

首先,将数据集读入Matlab并进行必要的归一化处理。

然后,使用kmeans函数运行K-means聚类算法,指定聚类的簇数K和迭代次数等参数。

最后,根据聚类结果进行数据可视化或进一步的分析。

2.3 层次聚类Matlab中的cluster函数提供了层次聚类的功能。

将数据集转换为距离矩阵,然后调用cluster函数即可实现层次聚类。

该函数支持不同的聚类算法和距离度量方法,用户可以根据具体需求进行调整。

2.4 密度聚类实现密度聚类可以使用Matlab中的DBSCAN函数。

DBSCAN是一种基于密度的聚类算法,它通过确定数据点的领域密度来判定是否为核心对象,并通过核心对象的连接性将数据点分为不同的簇。

matlab感知机实现二分类四分类例题

matlab感知机实现二分类四分类例题

一、引言在机器学习领域,感知机是一种简单而有效的分类算法,可以用于解决二分类和多分类问题。

而Matlab作为一个功能强大的工具,可以帮助我们实现感知机算法,从而进行分类任务。

二、感知机原理感知机是一种简单的线性分类器,其基本原理是根据输入的特征向量和权值进行线性组合,再经过激活函数得到分类结果。

其数学表达式可以表示为:\[y = f(w^Tx + b)\]其中,\(w\)为权值向量,\(x\)为输入特征向量,\(b\)为偏置项,\(f(\cdot)\)为激活函数。

三、二分类问题的感知机实现在二分类问题中,我们需要根据输入的特征向量将样本分为两类。

假设我们有一组特征向量\(X\)和对应的标签\(Y\),其中\(Y\)只能取-1或1两个值。

我们可以使用感知机算法来训练一个分类器,将输入的特征向量进行分类。

具体实现步骤如下:1. 初始化权值向量\(w\)和偏置项\(b\)为0。

2. 遍历训练样本,对每个样本计算激活值\(z = w^Tx + b\)。

3. 如果激活值与真实标签符号相反,则更新权值向量和偏置项\(w\leftarrow w + \eta yx, b \leftarrow b + \eta y\),其中\(\eta\)为学习率。

4. 重复上述步骤,直至分类器收敛或达到指定的迭代次数。

四、四分类问题的感知机实现对于多分类问题,可以通过一对多的方式来实现感知机算法。

以下是实现步骤:1. 将多分类任务分解为多个二分类任务,每个任务将一类样本与其他类样本进行区分。

2. 对每个二分类任务训练一个感知机分类器。

3. 当新样本输入时,对每个分类器进行分类,将激活值最大的类别作为最终分类结果。

五、实例演示为了更直观地了解感知机在二分类和四分类问题中的应用,我们可以选择一个具体的例题进行演示。

在Matlab环境下,我们可以通过编写代码实现感知机算法,并使用模拟数据进行训练和测试。

可以选择一个二维数据集,对其进行二分类或四分类任务,并使用感知机算法进行训练,最终可视化分类结果。

matlab近邻分类器的构建knn分类方法的实现

matlab近邻分类器的构建knn分类方法的实现

近邻分类器(k-nearest neighbor classifier,简称k-NN分类器)是一种常见的机器学习算法,可用于分类和回归问题。

它的工作原理是根据输入实例的特征向量,在训练集中找出与该实例特征最相似的k 个实例,然后使用这k个实例中的多数类别(对于分类问题)或平均值(对于回归问题)作为预测结果。

在本文中,我们将介绍如何使用Matlab编程语言来构建k-NN分类器,以及如何实现k-NN分类方法。

我们将从k-NN分类器的基本原理开始介绍,然后逐步介绍Matlab代码的实现过程,并结合实例进行演示。

1. k-NN分类器的原理及特点k-NN分类器是一种基于实例的学习方法,不同于传统的基于模型的学习方法(如决策树、支持向量机等)。

它的主要特点包括:- 非参数化:k-NN分类器没有显式的模型参数,它的预测结果完全依赖于训练集中实例的分布。

- 适用性广泛:k-NN分类器适用于各种类型的数据,包括连续型、离散型、多类别、多标签等。

- 可解释性强:k-NN分类器的预测结果可以直观地解释为与输入实例最相似的训练集实例的类别。

2. Matlab中k-NN分类器的构建在Matlab中,使用Statistics and Machine Learning Toolbox工具箱可以方便地构建k-NN分类器。

我们需要加载训练集数据和对应的类别标签,然后使用fitcknn函数来构建k-NN分类器模型。

具体的步骤如下:2.1 加载训练集数据和类别标签在Matlab中,可以使用csvread函数或readtable函数来加载训练集数据,然后将数据分为特征向量和类别标签两部分。

例如: ```matlabdata = csvread('train_data.csv');X = data(:, 1:end-1); % 特征向量Y = data(:, end); % 类别标签```2.2 构建k-NN分类器模型使用fitcknn函数可以构建k-NN分类器模型,需要指定k的取值和距离度量方法等参数。

贝叶斯分类器的MATLAB实现

贝叶斯分类器的MATLAB实现

贝叶斯分类器的MATLAB实现贝叶斯分类器是⼀种简单的模式分类器,它是以特征值的统计概率为基础的,简单的讲,例如已知两个类w1和w2,⼀个未知样本x,这⾥说的未知,就是不知道它属于w1类还是属于w2类,然后根据统计⽅法分别计算得到x属于w1类的概率,即P(w1|x)和属于w2类的概率,即P(w2|x),如果P(w1|x)> P(w2|x),则x属于w1,反之则属于w2。

其matlab代码如下:clear;%clc;n=100;m1=0;m2=0;num1=0;%⽤于计数num2=0;%⽤于计数num3=0;%⽤于计数num4=0;%⽤于计数mu1=[1 3];sigma1=[1.5 0;0 1];r1=mvnrnd(mu1,sigma1,n);%⽣成模式类1mu2=[3 1];sigma2=[1 0.5;0.5 2];r2=mvnrnd(mu2,sigma2,n);%⽣成模式类2subplot(1,2,1);plot(r1(:,1),r1(:,2),'ro',r2(:,1),r2(:,2),'b*');title('图1:两个模式类各⽣成个100正态分布的随机数⼆维散点图');p1=normpdf(r1(:,1),mu1(:,1),sqrt(1.5));p2=normpdf(r1(:,1),mu2(:,1),1);p3=normpdf(r2(:,1),mu1(:,1),sqrt(1.5));p4=normpdf(r2(:,1),mu2(:,1),1);for i=1:1:100if (p1(i)*0.5)>=(p2(i)*0.5)%进⾏模式判别num1=num1+1;m1=m1+1;a1(m1,:)=r1(i,:);%分到模式类1elsenum2=num2+1;m2=m2+1a2(m2,:)=r1(i,:);%分到模式类2endif (p3(i)*0.5)<=(p2(i)*0.5)num3=num3+1;m1=m1+1;a1(m1,:)=r2(i,:);%分到模式类1elsenum4=num4+1;m2=m2+1;a2(m2,:)=r2(i,:);%分到模式类2endendsubplot(1,2,2);plot(a1(:,1),a1(:,2),'ro',a2(:,1),a2(:,2),'b*');title('图2:以第⼀特征分量对200个样本分类');运⾏结果如下图所⽰:从运⾏结果可看出,模式类1的⼀些样本点被错误分到模式类2,模式类2的⼀些样本点被错误分到模式类1,也就是说,贝叶斯分类器的分类正确率不⾼。

matlab训练神经网络分类器方法,用神经网络做训练和分类的matlab代码

matlab训练神经网络分类器方法,用神经网络做训练和分类的matlab代码

matlab训练神经⽹络分类器⽅法,⽤神经⽹络做训练和分类的matlab代码close allclear allclcx=xlsread('training_data.xls',['B2:G401']);y=xlsread('training_data.xls',['I2:K401']);inputs = x';targets = y';% 创建⼀个模式识别⽹络(两层BP⽹络),同时给出中间层神经元的个数,这⾥使⽤20hiddenLayerSize = 20;net = patternnet(hiddenLayerSize);% 对数据进⾏预处理,这⾥使⽤了归⼀化函数(⼀般不⽤修改)% For a list of all processing functions type: help nnprocessnet.inputs{1}.processFcns = {'removeconstantrows','mapminmax'};net.outputs{2}.processFcns = {'removeconstantrows','mapminmax'};% 把训练数据分成三部分,训练⽹络、验证⽹络、测试⽹络% For a list of all data division functions type: help nndividenet.divideFcn = 'dividerand'; % Divide data randomlynet.divideMode = 'sample'; % Divide up every samplenet.divideParam.trainRatio = 70/100;net.divideParam.valRatio = 15/100;net.divideParam.testRatio = 15/100;% 训练函数% For a list of all training functions type: help nntrainnet.trainFcn = 'trainlm'; % Levenberg-Marquardt% 使⽤均⽅误差来评估⽹络% For a list of all performance functions type: help nnperformancenet.performFcn = 'mse'; % Mean squared error% 画图函数% For a list of all plot functions type: help nnplotnet.plotFcns = {'plotperform','plottrainstate','ploterrhist', ...'plotregression', 'plotfit'};% 开始训练⽹络(包含了训练和验证的过程)[net,tr] = train(net,inputs,targets);% 测试⽹络outputs = net(inputs);errors = gsubtract(targets,outputs);performance = perform(net,targets,outputs)% 获得训练、验证和测试的结果trainTargets = targets .* tr.trainMask{1};valTargets = targets .* tr.valMask{1};testTargets = targets .* tr.testMask{1};trainPerformance = perform(net,trainTargets,outputs) valPerformance = perform(net,valTargets,outputs) testPerformance = perform(net,testTargets,outputs)% 可以查看⽹络的各个参数view(net)% 根据画图的结果,决定是否满意% Uncomment these lines to enable various plots. figure, plotperform(tr)figure, plottrainstate(tr)figure, plotconfusion(targets,outputs)figure, ploterrhist(errors)%如果你对该次训练满意,可以保存训练好⽹络save('training_net.mat','net','tr');下⾯是⽤来分类的代码clear allclose allclcload 'training_net.mat'%% You can change the filename, sheet name, and range %导⼊测试数据new_input = xlsread('new_data.xls',['A2:F25']);new_output = round(net(new_input'));xlswrite('new_data.xls',new_output','result','G2');%把⼆进制转换成对应的类别。

matlab-线性分类器的设计doc

matlab-线性分类器的设计doc

线性分类器设计1 问题描述对“data1.m ”数据,分别采用感知机算法、最小平方误差算法、线性SVM 算法设计分类器,分别画出决策面,并比较性能。

(注意讨论算法中参数设置的影响。

)2 方法描述2.1 感知机算法线性分类器的第一个迭代算法是1956年由Frank Rosenblatt 提出的,即具有自学习能力的感知器(Perceptron )神经网络模型,用来模拟动物或者人脑的感知和学习能力。

这个算法被提出后,受到了很大的关注。

感知器在神经网络发展的历史上占据着特殊的位置:它是第一个从算法上完整描述的神经网络,是一种具有分层神经网络结构、神经元之间有自适应权相连接的神经网络的一个基本网络。

感知器的学习过程是不断改变权向量的输入,更新结构中的可变参数,最后实现在有限次迭代之后的收敛。

感知器的基本模型结构如图1所示:图1 感知器基本模型其中,X 输入,Xi 表示的是第i 个输入;Y 表示输出;W 表示权向量;w0是阈值,f 是一个阶跃函数。

感知器实现样本的线性分类主要过程是:特征向量的元素x1,x2,……,xk 是网络的输入元素,每一个元素与相应的权wi 相乘。

,乘积相加后再与阈值w0相加,结果通过f 函数执行激活功能,f 为系统的激活函数。

因为f 是一个阶跃函数,故当自变量小于0时,f= -1;当自变量大于0时,f= 1。

这样,根据输出信号Y ,把相应的特征向量分到为两类。

然而,权向量w 并不是一个已知的参数,故感知器算法很重要的一个步骤即是寻找一个合理的决策超平面。

故设这个超平面为w ,满足:12*0,*0,T Tw x x w x x ωω>∀∈<∀∈ (1)引入一个代价函数,定义为:()**T x x YJ w w xδ∈=∑ (2)其中,Y 是权向量w 定义的超平面错误分类的训练向量的子集。

变量x δ定义为:当1x ω∈时,x δ= -1;当2x ω∈时,x δ= +1。

显然,J(w)≥0。

matlab分类算法

matlab分类算法

matlab分类算法Matlab是一种功能强大的编程语言和环境,广泛应用于科学计算、机器学习和数据分析等领域。

在机器学习中,Matlab提供了丰富的分类算法,可以帮助研究人员和工程师解决各种分类问题。

一、简介分类是一种常见的机器学习任务,其目标是根据已知的样本数据集,将新的未知样本分配到已定义的类别中。

Matlab提供了多种分类算法,包括K近邻法、支持向量机、决策树、朴素贝叶斯等,可以根据具体问题的特点选择合适的算法进行分类。

二、K近邻法K近邻法是一种基于实例的分类方法,其思想是对于一个新的样本,通过计算其与已知样本的距离,找到距离最近的K个样本,然后根据这K个样本的类别,通过投票或加权投票的方式来确定新样本的类别。

Matlab提供了knnsearch函数实现K近邻法分类,可以设置K值和距离度量方法来进行分类。

三、支持向量机支持向量机是一种二分类模型,其目标是找到一个超平面,将样本空间划分为两个不同类别的区域。

Matlab中的svmtrain函数可以用于训练支持向量机分类器,svmclassify函数用于进行分类预测。

支持向量机具有较强的泛化能力,可以处理高维数据和非线性问题。

四、决策树决策树是一种基于树形结构的分类算法,通过一系列的判断条件对样本进行分类。

Matlab中的classregtree函数用于构建决策树模型,可以通过设置参数来控制树的生长过程。

决策树具有可解释性强、计算效率高等优点,适用于处理特征较多的数据集。

五、朴素贝叶斯朴素贝叶斯是一种基于贝叶斯定理的分类算法,它假设特征之间相互独立,通过计算后验概率来进行分类。

Matlab中的fitcnb函数可以用于训练朴素贝叶斯分类器,predict函数用于进行分类预测。

朴素贝叶斯算法具有计算简单、适用于大规模数据集等特点,但对特征独立性的假设可能会影响分类效果。

六、模型评估在使用分类算法进行实际应用时,需要对模型进行评估来衡量其分类性能。

Matlab提供了多种评估指标,如准确率、召回率、F1值等,可以通过confusionmat函数计算混淆矩阵来得到这些指标。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单分类器的MATLAB实现
摘要:本实验运用最小距离法、Fisher线形判别法、朴素贝叶斯法、K近邻法四种模式识别中最简单的方法处理两维两类别的识别问题,最后对实验结果进行了比较。

关键字:MATLAB 最小距离Fisher线形判别朴素贝叶斯K近邻法
一.M atlab语言简介
Matlab 语言(即Matrix 和Laboratory) 的前三位字母组合,意为“矩阵实验室”,Matlab 语言是一种具有面向对象程序设计特征的高级语言,以矩阵和阵列为基本编程单位。

Matlab 可以被高度“向量化”,而且用户易写易读。

传统的高级语言开发程序不仅仅需要掌握所用语言的语法,还需要对有关算法进行深入的分析。

与其他高级程序设计语言相比,Matlab 在编程的效率、可读性以及可移植性等方面都要高于其他高级语言,但是执行效率要低于高级语言,对计算机系统的要求比较高。

例如,某数据集是m*n的二维数据组,对一般的高级计算机语言来说,必须采用两层循环才能得到结果,不但循环费时费力,而且程序复杂;而用Matlab 处理这样的问题就快得多,只需要一小段程序就可完成该功能,虽然指令简单,但其计算的快速性、准确性和稳定性是一般高级语言程序所远远不及的。

严格地说,Matlab 语言所开发的程序不能脱离其解释性执行环境而运行。

二.样本预处理
实验样本来源于1996年UCI的Abalone data,原始样本格式如下:
1 2 3 4 5 6 7 8 9
其中第一行是属性代码:1.sex 2.length 3.diameter 4.height 5.whole_weight 6.shucked_weight 7 .viscera weight 8. shell weight 9.age
原始样本是一个8维20类的样本集,就是根据Abalone的第一至第八个特征来预测第九个特征,即Abalone的年龄。

为简单其见,首先将原始样本处理成两维两类别问题的样本。

选取length和weiht作为两个特征向量,来预测第三个特征向量age.(age=6或者age=9),我们将age=6的样本做为第一类,age=12的样本做为第二类。

处理后的样本:
length weight age
三.实验过程
1.最小距离法
最小距离法是事先从给定的训练集中为每一个类别生成一个代表该类的中心向量,计算新向量与每个类别中心向量的距离,距离最小的类别即新向量的类别。

两类别的分界面就是就是两类别中心向量终点连线的中垂线。

图1
分界面方程可以由下式求出:
(m1-m2)[x1,x2]'-(m1-m2)(m1+(m2-m1)/2)'=0
其中:m1为第一类训练样本的均值,m2为第二类样本的均值.
2.Fisher判别法
最小距离判别法对于离散度相等的线性可分问题分类效果是令人满意的,但是根据本实验样本而言,由上图可见第一类与第二类的离散度并不相等,而Fisher线性判别法较好的解决的这一问题.Fisher判别法希望类内离散度与类间离散度的比值越小越好,然后根据最小的比值将两维空间影射的一维空间.影射方向可由以下matlab程序求出
m1=mean(newtrain6)
m2=mean(newtrain12)%求两类的均值
s1=cov(newtrain6)
s2=cov(newtrain12)%求两类的协方差
s=s1+s2
w=(inv(s))*(m1-m2)'%求影射方向
图2
3. 素贝叶斯法
朴素贝叶斯算法以贝叶斯定理为理论基础,是一种在已知先验概率与类条件概率情况下的模式识别方法,其基本思想是:一个向量属于某个类别的概率,等于词属于该类别概率的综合表达式。

之所以称其为“朴素”,是因为它的条件独立性假设,即个向量在给定类别下的条件概率分布是相互独立的。

设训练样本集为m 类,记作C={c 1,c 2,…c m },每类的先验概率P(c i )=c i 类样本数/总样本数,i=1,2,……,m ,对于新样本x ,其属于c i 的条件概率为P(x |c i ),根据贝叶斯定理,c i 的后验概率为P(c i |x )为:
∑==
=
m
k k k
i i i i i C P C
x P C P C x P x P C P C x P x C P 1
)
()|()
()|()
()
()|()|( (2-1)
如果)|()|(x C P x C P j i > i=1,2,……,m ,则i C x ∈ (2-2) 上式为最大后验概率判别准则。

将式子2-1代入2-2中,则有:
如果)()|()()|(j j i i C P C x P C P C x P > i=1,2,……,m ,则i C x ∈ (2-3) 特殊情况下,若)|()|(x C P x C P j i >,可以采用最大似然判别准则: 如果))|(max ()|(j i C x P C x P = j=1,2,……,m ,则i C x ∈ (2-4) 对本实验而言我们假设先验概率相等即P(c1)= P(c 2),现在主要问题就转化为求类条件概率密度问题,我们假设类条件概率密度服从正态分布,采用最大似然估计法估计参数。

用最大似然估计发求参数的matlab 函数是mle(); 也可以根据最大似然估计法的结论直接计算正态分布的参数值,程序如下:
m6=mean(newtrain6) m12=mean(newtrain12) cov1=cov(newtrain6) cov2=cov(newtrain12)
f1=(exp(-(x-m6)*inv(cov1)*(x-m6)'/2))/((2*pi)*sqrt(det(cov1))) f2=(exp(-(x-m12)*inv(cov2)*(x-m12)'/2))/((2*pi)*sqrt(det(cov2)))
f1,f2既是所给向量x 的在每一类的类条件概率密度值。

然后根据上述判别函数中的最大似然判别法:))|(max ()|(j i C x P C x P = j=1,2,……,m ,则i C x ∈
4.K 近邻法
k 近邻算法是一种逼近实数值或离散值的基于实例的分类算法,其基本思想是:当有新的向量时,在n 维向量
空间中计算新向量与样本实例中每个向量之间的距离,找
出k 个与新向量距离最近的向量,即k 个最近“邻居”,
这些“邻居”与新向量具有较高的相似度,因而,新向量
的类别可以根据这k 个近邻向量的所属类别值估算得到。

如图3所示,“x ”表示待分类新向量,“+”表示第一
类,“-”表示第二类,当k=5时,新向量的“5-近邻”中有3个第一类,2个第二类,通过计算,新向量与第一类的相似度较大,于是,新向量被分到第一类中。

K 近邻算法最大的缺点就是计算量大,为了克服这个缺点,人们提出了很多快速的近邻算法,由于本实验的训练样本集比较小(第一类与第二类均为100个样本),我们直接采用近邻算法。

本实验测试了K=1,K=3,K=5,K=7,K=9,K=11,K=13。

K 一率取奇数,这是为了避免分类器做出拒绝判别的情况。

四. 实验结果分析
实验中第一类与第二类训练样本都为100即 train1=100,train2=100。

剩余样本全部作为测试集,测试样本中第一类test1=169,test2=167。

分类器的性能评价用用每一类的查全率
图3 K-近邻算法示意图。

相关文档
最新文档