主要内容

fitcnb

训练多类朴素贝叶斯模型

描述

Mdl= fitcnb (资源描述ResponseVarName返回一个多类朴素贝叶斯模型(Mdl),由表中的预测器训练资源描述和类标签中的变量资源描述。ResponseVarName

Mdl= fitcnb (资源描述公式返回一个多类朴素贝叶斯模型(Mdl),由表中的预测器训练资源描述公式是否有响应的解释模型和预测变量的子集资源描述适合使用Mdl

Mdl= fitcnb (资源描述Y返回一个多类朴素贝叶斯模型(Mdl),由表中的预测器训练资源描述和数组中的类标签Y

例子

Mdl= fitcnb (XY返回一个多类朴素贝叶斯模型(Mdl),由预测器训练X和类标签Y

例子

Mdl= fitcnb (___名称,值返回一个朴素贝叶斯分类器,其中包含由一个或多个选项指定的附加选项名称,值对参数,使用任何前面的语法。例如,您可以指定用于建模数据的分布、类的先验概率或内核平滑窗口带宽。

例子

全部折叠

载入费雪的虹膜数据集。

负载fisheririsX =量(:,3:4);Y =物种;汇总(Y)
值计数百分比setosa 50 33.33% versicolol50 33.33% virginica 50 33.33%

该软件可以使用朴素贝叶斯方法对具有两个以上类别的数据进行分类。

训练一个朴素贝叶斯分类器。最好是指定类的顺序。

Mdl = fitcnb (X, Y,“类名”, {“setosa”“多色的”“virginica”})
Mdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 DistributionNames: {'normal' 'normal'} DistributionParameters: {3x2 cell}属性,方法

Mdl是一个培训ClassificationNaiveBayes分类器。

默认情况下,软件模型预测器分布在每个类使用高斯分布有一些平均值和标准偏差。使用点表示法来显示特定高斯拟合的参数,例如,显示其中的第一个特征的拟合setosa

(Mdl setosaIndex =比较字符串。一会,“setosa”);估计= Mdl。DistributionParameters {setosaIndex 1}
估计=2×11.4620 - 0.1737

的意思是1.4620标准差是0.1737

画出高斯等高线。

图gscatter (X (: 1), (:, 2), Y);甘氨胆酸h =;cxlim = h.XLim;cylim = h.YLim;持有Params = cell2mat (Mdl.DistributionParameters);μ= Params (2 * (1:3) 1, 1:2);%提取方法σ= 0 (2,2,3);j = 1:3 Sigma(:,:,j) = diag(Params(2*j,:)).^2;%创建对角协方差矩阵xlim = Mu(j,1) + 4*[-1]*√(Sigma(1,1,j));ylim = Mu(j,2) + 4*[-1]*√(Sigma(2,2,j));f = @ (x, y) arrayfun (@ (x0, y0) mvnpdf (x0 y0,μ(j,:),σ(:,:,j)), x, y);fcontour (f, [xlim ylim])绘制多元正态分布的等高线结束h.XLim = cxlim;h.YLim = cylim;标题(“朴素贝叶斯分类器——Fisher的虹膜数据”)包含(“花瓣长度(厘米)”) ylabel (“花瓣宽度(cm)”)传说(“setosa”“多色的”“virginica”)举行

图中包含一个axes对象。标题为朴素贝叶斯分类器——费雪虹膜数据的坐标轴对象包含6个类型为线、函数轮廓的对象。这些物品代表了彩色,彩色,处女。

可以使用名称-值对参数更改默认分布“DistributionNames”.例如,如果一些预测器是分类的,那么您可以指定它们是多元、多项随机变量“DistributionNames”、“mvmn”

为Fisher的虹膜数据集构造一个朴素贝叶斯分类器。此外,在训练过程中指定先验概率。

载入费雪的虹膜数据集。

负载fisheririsX =量;Y =物种;一会= {“setosa”“多色的”“virginica”};%课堂秩序

X是一个数字矩阵,其中包含150个鸢尾的四个花瓣的测量值。Y是包含相应虹膜种类的字符向量的单元格数组。

默认情况下,先验类概率分布是数据集中类的相对频率分布。在这种情况下,每种物种的先验概率为33%。然而,假设你知道在种群中50%的虹膜是濑花,20%是七彩,30%是处女花。您可以通过在训练期间指定该分布作为先验概率来合并这些信息。

训练一个朴素贝叶斯分类器。指定类的顺序和先验类的概率分布。

先验= [0.5 0.2 0.3];Mdl = fitcnb (X, Y,“类名”一会,“之前”之前,)
Mdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 DistributionNames: {'normal' 'normal' 'normal' 'normal'} DistributionParameters: {3x4 cell}属性,方法

Mdl是一个培训ClassificationNaiveBayes分类器,它的一些属性显示在命令窗口中。该软件将预测器视为独立的给定类,默认情况下,使用正态分布拟合它们。

朴素贝叶斯算法在训练过程中不使用先验类概率。因此,可以使用点表示法指定训练后的先验类概率。例如,假设您希望查看使用默认优先类概率的模型与使用不同优先类概率的模型之间的性能差异之前

建立了一种新的朴素贝叶斯模型Mdl,并指定先验类概率分布为经验类分布。

defaultPriorMdl = Mdl;FreqDist = cell2table(汇总(Y));defaultPriorMdl。之前=FreqDist{:,3};

软件将先验类的概率归一化求和1

使用10倍交叉验证估计两个模型的交叉验证误差。

rng (1);%的再现性defaultCVMdl = crossval (defaultPriorMdl);defaultLoss = kfoldLoss (defaultCVMdl)
defaultLoss = 0.0533
CVMdl = crossval (Mdl);损失= kfoldLoss (CVMdl)
损失= 0.0340

Mdl执行比defaultPriorMdl

载入费雪的虹膜数据集。

负载fisheririsX =量;Y =物种;

使用每种预测器训练一个朴素贝叶斯分类器。最好是指定类的顺序。

Mdl1 = fitcnb (X, Y,...“类名”, {“setosa”“多色的”“virginica”})
Mdl1 = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 DistributionNames: {'normal' 'normal' 'normal' 'normal'} DistributionParameters: {3x4 cell}属性,方法
Mdl1。DistributionParameters
ans =3×4单元阵列{2 x1双}{2 x1双}{2 x1双}{2 x1双}{2 x1双}{2 x1双}{2 x1双}{2 x1双}{2 x1双}{2 x1双}{2 x1双}{2 x1双}
Mdl1。DistributionParameters {1,2}
ans =2×13.4280 - 0.3791

默认情况下,软件将每个类中的预测器分布建模为具有一些平均值和标准偏差的高斯分布。有四个预测器和三个类级别。每个细胞在Mdl1。DistributionParameters对应于一个包含每个分布的平均值和标准差的数字向量,例如,鸢尾萼片宽度的平均值和标准差为3.4280而且0.3791,分别。

估计的混淆矩阵Mdl1

isLabels1 = resubPredict (Mdl1);ConfusionMat1 = confusionchart (Y, isLabels1);

图包含一个类型为confusimatrixchart的对象。

元素(jk)表示软件分类为的观察数k,但真正在课堂上j根据数据。

使用预测器1和2(萼片长度和宽度)的高斯分布重新训练分类器,使用预测器3和4(花瓣长度和宽度)的默认正常核密度。

Mdl2 = fitcnb (X, Y,...“DistributionNames”, {“正常”“正常”“内核”“内核”},...“类名”, {“setosa”“多色的”“virginica”});Mdl2。DistributionParameters {1,2}
ans =2×13.4280 - 0.3791

该软件不训练参数的内核密度。相反,软件会选择一个最佳宽度。方法指定宽度“宽度”名称-值对的论点。

估计的混淆矩阵Mdl2

isLabels2 = resubPredict (Mdl2);ConfusionMat2 = confusionchart (Y, isLabels2);

图包含一个类型为confusimatrixchart的对象。

基于混淆矩阵,两个分类器在训练样本中表现相似。

载入费雪的虹膜数据集。

负载fisheririsX =量;Y =物种;rng (1);%的再现性

使用默认选项和训练和交叉验证一个朴素贝叶斯分类器k倍交叉验证。最好是指定类的顺序。

CVMdl1 = fitcnb (X, Y,...“类名”, {“setosa”“多色的”“virginica”},...“CrossVal”“上”);

默认情况下,软件将每个类中的预测器分布建模为具有一些平均值和标准偏差的高斯分布。CVMdl1是一个ClassificationPartitionedModel模型。

创建一个默认的朴素贝叶斯二进制分类器模板,训练一个纠错、输出代码的多类模型。

t = templateNaiveBayes ();CVMdl2 = fitcecoc (X, Y,“CrossVal”“上”“学习者”t);

CVMdl2是一个ClassificationPartitionedECOC模型。您可以使用与for相同的名称-值对参数为朴素贝叶斯二元学习器指定选项fitcnb

比较样本外k-fold分类错误(错误分类观察的比例)。

classErr1 = kfoldLoss (CVMdl1,“LossFun”“ClassifErr”
classErr1 = 0.0533
classErr2 = kfoldLoss (CVMdl2,“LossFun”“ClassifErr”
classErr2 = 0.0467

Mdl2具有较低的泛化误差。

一些垃圾邮件过滤器根据一个单词或标点符号(称为标记)在电子邮件中出现的次数将收到的电子邮件分类为垃圾邮件。预测因素是电子邮件中特定单词或标点符号的出现频率。因此,预测因子组成多项随机变量。

这个例子演示了使用朴素贝叶斯和多项预测器进行分类。

创建培训数据

假设您观察了1000封电子邮件,并将它们分类为垃圾邮件或非垃圾邮件。通过随机分配-1或1y对于每一个电子邮件。

n = 1000;%样本大小rng (1);%的再现性Y = randsample([-1 1],n,true);%随机标签

为了构建预测器数据,假设词汇表中有5个标记,每个电子邮件中观察到20个标记。通过绘制随机的多项偏差,从五个标记生成预测数据。与垃圾邮件相对应的令牌的相对频率应该与非垃圾邮件不同。

tokenProbs = [0.2 0.3 0.1 0.15 0.25;...0.4 0.1 0.3 0.05 0.15];令牌相对频率%tokensPerEmail = 20;%修正为方便X = 0 (n, 5);X (Y = = 1:) = mnrnd (tokensPerEmail, tokenProbs(: 1)、sum (Y = = 1));X (Y = = 1:) = mnrnd (tokensPerEmail, tokenProbs(2:)、sum (Y = = 1));

训练分类器

训练一个朴素贝叶斯分类器。指定预测器是多项的。

Mdl = fitcnb (X, Y,“DistributionNames”“锰”);

Mdl是一个培训ClassificationNaiveBayes分类器。

的样本内性能Mdl通过估计误分类误差。

isGenRate = resubLoss (Mdl,“LossFun”“ClassifErr”
isGenRate = 0.0200

样本内误分类率为2%。

创建新的数据

随机生成代表新一批电子邮件的偏差。

newN = 500;newY = randsample([-1 1],newN,true);newX = 0 (newN 5);newX(newY == 1,:) = mnrnd(tokensPerEmail,tokenProbs(1,:),),...总和(newY = = 1));newX(newY == -1,:) = mnrnd(tokensPerEmail,tokenProbs(2,:),...总和(newY = = 1));

评估分类器的性能

使用训练过的朴素贝叶斯分类器对新邮件进行分类Mdl,并确定该算法是否可泛化。

oosGenRate =损失(Mdl newX newY)
oosGenRate = 0.0261

样本外误分类率为2.6%,说明分类器的泛化效果相当好。

的用法OptimizeHyperparameters在朴素贝叶斯分类器中使用fitcnb.这个例子使用了Fisher的虹膜数据。

载入费雪的虹膜数据。

负载fisheririsX =量;Y =物种;一会= {“setosa”“多色的”“virginica”};

使用'auto'参数优化分类。

为了再现性,设置随机种子并使用“expected-improvement-plus”采集功能。

rng默认的Mdl = fitcnb (X, Y,“类名”一会,“OptimizeHyperparameters”“汽车”...“HyperparameterOptimizationOptions”结构(“AcquisitionFunctionName”...“expected-improvement-plus”))
警告:在优化朴素贝叶斯'Width'参数时,建议您首先标准化所有的数值预测器。如果您已经这样做了,请忽略此警告。
|=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar |分布宽度——| | | | |结果运行时| |(观察)| (estim) |名称  | | |=====================================================================================================| | 最好1 | | 0.053333 | 0.64411 | 0.053333 | 0.053333正常| | - | | 2 |最好| 0.046667 | 0.61967 | 0.046667 | 0.049998 | 0.11903内核| | |3 |接受| 0.053333 | 0.242 | 0.046667 | 0.046667正常| | - | | 4 |接受| 0.086667 | 0.62519 | 0.046667 | 0.046668 | 2.4506内核| | | 5 |接受| 0.046667 | 0.64523 | 0.046667 | 0.046663 | 0.10449内核| | | 6 |接受| 0.073333 | 1.2486 | 0.046667 | 0.046665 | 0.025044内核| | | 7 |接受| 0.046667 | 0.51114 | 0.046667 | 0.046655 | 0.27647内核| | | 8 |接受| 0.046667 | 0.85288 | 0.046667 | 0.046647 | 0.2031内核| | | | 9日接受| 0.06 | 0.73383 | 0.046667 |内核0.046658 | 0.44271 | | | 10 |接受| 0.046667 | 0.52307 | 0.046667 | 0.046618 | 0.2412内核| | | | 11日接受| 0.046667 | 1.2532 | 0.046667 | 0.046619 | 0.071925内核| | | | 12日接受| 0.046667 | 0.51133 | 0.046667 | 0.046612 | 0.083459内核| | | | 13日接受| 0.046667 | 0.55639 | 0.046667 | 0.046603 | 0.15661内核| | | | 14日接受| 0.046667 | 0.49068 | 0.046667 | 0.046607 | 0.25613内核| | | 15 |接受| 0.046667 | 0.67176 | 0.046667 | 0.046606 | 0.17776内核| | |16 |接受| 0.046667 | 0.87842 | 0.046667 | 0.046606 | 0.13632内核| | | | 17日接受| 0.046667 | 0.88013 | 0.046667 | 0.046606 | 0.077598内核| | | | 18日接受| 0.046667 | 0.62199 | 0.046667 | 0.046626 | 0.25646内核| | | | 19日接受| 0.046667 | 1.1707 | 0.046667 | 0.046626 | 0.093584内核| | | 20 |接受| 0.046667 | 1.6152 | 0.046667 | 0.046627 | 0.061602内核|  | |=====================================================================================================| | Iter| Eval客观客观| | | BestSoFar | BestSoFar |分布宽度——| | | | |结果运行时| |(观察)| (estim) |名称  | | |=====================================================================================================| | 21日|接受| 0.046667 | 1.7368 | 0.046667 | 0.046627 | 0.066532内核| | | | 22日接受| 0.093333 | 0.53437 | 0.046667 | 0.046618 | 5.8968内核| | | | 23日接受| 0.046667 | 0.73733 | 0.046667 | 0.046619 | 0.067045内核| | | | | 24日接受内核0.046667 | 0.43878 | 0.046667 | 0.04663 | 0.25281 | | | | 25日接受| 0.046667 | 0.51707 | 0.046667 | 0.04663 | 0.1473内核| | | | 26日接受| 0.046667 | 0.75557 | 0.046667 | 0.046631 | 0.17211内核| | | | 27日接受| 0.046667 | 0.57701 | 0.046667 | 0.046631 | 0.12457内核| | | | 28日接受| 0.046667 | 0.46423 | 0.046667 | 0.046631 | 0.066659内核| | | | 29日接受| 0.046667 | 0.58075 | 0.046667 | 0.046631 | 0.1081内核| | | | 30日接受| 0.08 | 0.48759 | 0.046667 |0.046628 |内核| 1.1048 |

图中包含一个axes对象。标题为Min objective vs. Number of function求值的axis对象包含两个类型为line的对象。这些对象表示最小观测目标,估计最小目标。

图中包含一个axes对象。标题为目标函数模型的轴对象包含线、面、轮廓5个类型的对象。这些对象分别表示观测点、模型均值、下一个点、模型最小可行。

__________________________________________________________ 优化完成。最大目标:达到30。总函数评估:30总运行时间:51.9508秒总目标函数评估时间:22.1251最佳观测可行点:DistributionNames Width _________________ _______ kernel 0.11903观测目标函数值= 0.046667估计目标函数值= 0.046667函数评估时间= 0.61967最佳估计可行点(根据模型):DistributionNames Width _________________ _______ kernel 0.25613估计的目标函数值= 0.046628估计的函数计算时间= 0.59044
Mdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 HyperparameterOptimizationResults: [1x1 BayesianOptimization] DistributionNames: {1x4 cell} DistributionParameters: {3x4 cell} Kernel: {1x4 cell}支持:{1x4 cell}宽度:[3x4 double]属性,方法

输入参数

全部折叠

用于训练模型的样例数据,指定为表。每一行的资源描述对应一个观察结果,每一列对应一个预测变量。可选地,资源描述可以为响应变量包含一个附加列。不允许多列变量和字符向量的单元格数组以外的单元格数组。

  • 如果资源描述包含响应变量,并且希望在中使用所有剩余变量资源描述作为预测器,然后通过使用指定响应变量ResponseVarName

  • 如果资源描述包含响应变量,并且您希望仅使用其余变量的子集资源描述作为预测器,然后用指定公式公式

  • 如果资源描述不包含响应变量,则使用Y.中的响应变量的长度和行数资源描述必须是相等的。

中指定为变量名的响应变量名资源描述

您必须指定ResponseVarName作为字符向量或字符串标量。例如,如果响应变量Y存储为资源描述。Y,然后将其指定为“Y”.的所有列资源描述,包括Y,作为训练模型时的预测因子。

响应变量必须是一个类别、字符或字符串数组;逻辑向量:逻辑或数字向量;或者字符向量的单元格数组。如果Y是字符数组,则响应变量的每个元素必须对应于数组的一行。

类指定类的顺序是一个好的实践一会名称-值参数。

数据类型:字符|字符串

响应变量和预测变量子集的解释模型,在形式中指定为字符向量或字符串标量“Y ~ x1 + x2 + x3”.在这种形式,Y表示响应变量,和x1x2,x3表示预测变量。

中指定变量的子集资源描述使用公式作为训练模型的预测因子。如果您指定了一个公式,那么该软件将不使用任何变量资源描述没有出现在公式

公式中的变量名必须是资源描述(Tbl.Properties.VariableNames)和有效的MATLAB®标识符。中的变量名可以进行验证资源描述通过使用isvarname函数。如果变量名无效,则可以使用matlab.lang.makeValidName函数。

数据类型:字符|字符串

朴素贝叶斯分类器训练到的类标签,指定为类别、字符或字符串数组、逻辑或数字向量或字符向量的单元格数组。的每个元素Y的对应行的类成员XY支持K类的水平。

如果Y是字符数组,则每一行必须对应一个类标签。

的长度Y的行数X必须是等价的。

数据类型:分类|字符|字符串|逻辑|||细胞

预测数据,指定为数值矩阵。

每一行的X对应于一个观察结果(也称为实例或示例),每一列对应于一个变量(也称为特征)。

的长度Y的行数X必须是等价的。

数据类型:

注意:

该软件将,空字符向量('',空字符串(""),< >失踪,<定义>元素作为缺失的数据值。

  • 如果Y包含缺失的值,然后软件删除它们和相应的行X

  • 如果X包含完全由缺失值组成的任何行,则软件将删除这些行和相应的元素Y

  • 如果X包含缺失的值并进行设置“DistributionNames”、“锰”,然后软件会删除这些行X和对应的元素Y

  • 如果一个预测器没有在一个类中表示,也就是说,如果它的所有值都表示在类中,软件返回一个错误。

删除行X和相应的元素Y减少有效训练或交叉验证样本量。

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:“DistributionNames”、“锰”,“前”、“统一”,“KSWidth”,0.5指定数据分布是多项的,所有类的先验概率相等,所有类的内核平滑窗口带宽为0.5单位。

请注意

方法不能使用任何交叉验证名称-值参数“OptimizeHyperparameters”名称-值参数。的交叉验证“OptimizeHyperparameters”只有使用“HyperparameterOptimizationOptions”名称-值参数。

朴素贝叶斯的选项

全部折叠

数据分布fitcnb用于对数据建模,指定为逗号分隔的对,由“DistributionNames”以及字符向量或字符串标量、字符串数组或包含此表中的值的字符向量的单元格数组。

价值 描述
“内核” 核平滑密度估计。
“锰” 多项分布。如果您指定,则所有特征都是多项式分布的分量。因此,您不能包含“锰”作为字符串数组或字符向量单元格数组的元素。有关详细信息,请参见算法
“mvmn” 多元多项式分布。有关详细信息,请参见算法
“正常” 正态(高斯)分布。

如果指定一个字符向量或字符串标量,那么软件将使用该分布对所有特性建模。如果指定1 × -P字符串数组或单元格数组的字符向量,则软件模型的特征j使用元素中的分布j的数组。

默认情况下,该软件将所有指定为类别预测器的预测器(使用CategoricalPredictors名称-值对参数)到“mvmn”.否则,默认分布为“正常”

必须指定至少一个预测器具有分布“内核”另外指定内核支持,或宽度

例子:“DistributionNames”、“锰”

例子:DistributionNames,{“内核”、“正常”、“内核”}

内核平滑器类型,指定为逗号分隔的对,由“内核”以及字符向量或字符串标量、字符串数组或字符向量的单元格数组。

下表总结了设置内核平滑密度区域的可用选项。让u}表示指示函数。

价值 内核 公式
“盒子” 框(统一)

f ( x = 0.5 | x | 1

“epanechnikov” Epanechnikov

f ( x = 0.75 ( 1 x 2 | x | 1

“正常” 高斯

f ( x = 1 2 π 经验值 ( 0.5 x 2

“三角形” 三角

f ( x = ( 1 | x | | x | 1

如果指定1 × -P字符串数组或单元格数组,数组的每个元素包含表中的任何值,然后软件使用元素中的内核平滑类型训练分类器j为特征jX.软件忽略的元素内核不对应于其分布为的预测器“内核”

必须指定至少一个预测器具有分布“内核”另外指定内核支持,或宽度

例子:“内核”,{“epanechnikov”、“正常”}

内核平滑密度支持,指定为逗号分隔的对,由“支持”而且“积极”“无限”、字符串数组、单元格数组或数字行向量。软件将核平滑密度应用到指定区域。

下表总结了设置内核平滑密度区域的可用选项。

价值 描述
1 × 2的数字行向量 例如,(L U),在那里l而且U分别为密度支撑的有限下界和上界。
“积极” 密度支持均为正实值。
“无限” 密度支持都是实数。

如果指定1 × -P字符串数组或单元格数组,字符串数组中的每个元素包含表中的任何文本值,单元格数组中的每个元素包含表中的任何值,然后软件使用元素中的内核支持训练分类器j为特征jX.软件忽略的元素内核不对应于其分布为的预测器“内核”

必须指定至少一个预测器具有分布“内核”另外指定内核支持,或宽度

例子:KSSupport,{[-10, 20],“无界”}

数据类型:字符|字符串|细胞|

内核平滑窗口宽度,指定为逗号分隔的对,由“宽度”和数值矩阵,数值列向量,数值行向量,或标量。

假设有K类级别和P预测因子。下表总结了设置内核平滑窗口宽度的可用选项。

价值 描述
K——- - - - - -P数值矩阵 元素(j k,)指定预测器的宽度j在课堂上k
K-by-1数值列向量 元素k指定类中所有预测器的宽度k
1 -P数字行向量 元素j为预测器指定所有类级别的宽度j
标量 指定所有类中所有特性的带宽。

默认情况下,该软件通过使用高斯分布的最优值,为每种预测器和类的组合自动选择默认宽度。如果您指定宽度,它包含S,然后软件选择宽度的元素包含年代。

必须指定至少一个预测器具有分布“内核”另外指定内核支持,或宽度

例子:“宽度”,南南

数据类型:|结构体

交叉验证选择

全部折叠

交叉验证标志,指定为逗号分隔的对,由“Crossval”而且“上”“关闭”

如果您指定“上”,然后该软件实现10次交叉验证。

要覆盖此交叉验证设置,请使用以下名称-值对参数之一:CVPartition坚持KFold,或Leaveout.要创建交叉验证模型,一次只能使用一个交叉验证名称-值对参数。

或者,稍后通过传递交叉验证Mdlcrossval

例子:“CrossVal”,“上”

交叉验证分区,指定为cvpartition创建的分区对象cvpartition.分区对象指定交叉验证的类型以及训练集和验证集的索引。

要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition坚持KFold,或Leaveout

例子:假设您创建一个随机分区,对500个观察结果进行5次交叉验证本量利= cvpartition(500年,“KFold”,5).然后,您可以使用指定交叉验证的模型“CVPartition”,本量利

用于抵制验证的数据的一部分,指定为范围(0,1)中的标量值。如果您指定‘坚持’,p,然后软件完成以下步骤:

  1. 随机选择和保留p * 100%的数据作为验证数据,并使用其余的数据训练模型。

  2. 存储紧凑的,训练过的模型训练有素的属性的交叉验证模型。

要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition坚持KFold,或Leaveout

例子:“坚持”,0.1

数据类型:|

交叉验证模型中使用的折叠数,指定为大于1的正整数。如果您指定KFold, k,然后软件完成以下步骤:

  1. 将数据随机划分为k集。

  2. 对于每个集合,保留该集合作为验证数据,并使用另一个集合训练模型k- 1集。

  3. 存储k紧凑,训练有素的模型k中的-by-1单元格向量训练有素的属性的交叉验证模型。

要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition坚持KFold,或Leaveout

例子:“KFold”,5

数据类型:|

保留一个交叉验证标志,指定为“上”“关闭”.如果您指定“Leaveout”,“上”,那么对于每一个n观察(n是否指定了观察数(不包括遗漏的观察数)NumObservations属性),软件完成以下步骤:

  1. 保留一个观察结果作为验证数据,并使用另一个来训练模型n- 1的观察。

  2. 存储n紧凑,训练有素的模型n中的-by-1单元格向量训练有素的属性的交叉验证模型。

要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition坚持KFold,或Leaveout

例子:“Leaveout”,“上”

其他分类选项

全部折叠

类别预测器列表,指定为此表中的值之一。

价值 描述
正整数向量

向量中的每个条目都是一个索引值,指示对应的预测器是分类的。索引值在1和之间p,在那里p用于训练模型的预测器的数量。

如果fitcnb使用输入变量的子集作为预测器,然后函数只使用该子集对预测器进行索引。的CategoricalPredictors值不计算响应变量、观察权重变量或函数没有使用的任何其他变量。

逻辑向量

一个真正的入口意味着对应的预测因子是绝对的。向量的长度是p

字符矩阵 矩阵的每一行都是一个预测变量的名称。中的条目名称必须匹配PredictorNames.用额外的空格填充名字,这样字符矩阵的每一行都有相同的长度。
字符向量的字符串数组或单元格数组 数组中的每个元素都是一个预测变量的名称。中的条目名称必须匹配PredictorNames
“所有” 所有的预测都是绝对的。

默认情况下,如果预测器数据在表中(资源描述),fitcnb如果变量是逻辑向量、分类向量、字符数组、字符串数组或字符向量的单元格数组,则假定该变量是分类的。如果预测器数据是一个矩阵(X),fitcnb假设所有的预测器都是连续的。要将任何其他预测器标识为类别预测器,请使用CategoricalPredictors名称-值参数。

对于已识别的类别预测因子,fitcnb使用多元多项式分布。有关详细信息,请参见DistributionNames而且算法

例子:“CategoricalPredictors”、“所有”

数据类型:||逻辑|字符|字符串|细胞

用于训练的类的名称,指定为类别、字符或字符串数组;逻辑向量:逻辑或数字向量;或者字符向量的单元格数组。一会必须具有与响应变量相同的数据类型资源描述Y

如果一会是字符数组,则每个元素必须对应于数组的一行。

使用一会:

  • 在培训期间指定类的顺序。

  • 指定与类顺序对应的任何输入或输出参数维度的顺序。例如,使用一会指定…尺寸的顺序成本返回的分类分数的列顺序预测

  • 选择培训类的一个子集。例如,假设所有不同的类名的集合Y(“a”、“b”、“c”).使用类的观察来训练模型“一个”而且“c”只是,指定“类名”,(“a”、“c”)

的默认值。一会响应变量中所有不同的类名的集合是否在资源描述Y

例子:“类名”,(“b”,“g”)

数据类型:分类|字符|字符串|逻辑|||细胞

点分类错误的代价,指定为逗号分隔的对,由“成本”和以下其中之一:

  • 方阵,成本(i, j)将一个点分类到类的成本是多少j如果它真正的阶级是(即,行对应真正的类,列对应预测的类)。的相应行和列的类顺序成本,另外指定一会名称-值对的论点。

  • 结构年代有两个领域:S.ClassNames作为类型相同的变量包含组名Y,S.ClassificationCosts包含成本矩阵。

默认值是成本(i, j) = 1如果我~ = j,成本(i, j) = 0如果我=我

例子:“成本”,结构(“类名”,{{' b ', ' g '}},“ClassificationCosts”,[0 0.5;1 0])

数据类型:||结构体

预测器变量名,指定为惟一名称的字符串数组或惟一字符向量的单元格数组。的功能PredictorNames这取决于你提供训练数据的方式。

  • 如果你提供X而且Y,然后你可以使用PredictorNames中的预测变量指定名称X

    • 名字的顺序PredictorNames的列顺序必须对应X.也就是说,PredictorNames {1}X (: 1)PredictorNames {2}X (:, 2),等等。同时,大小(X, 2)而且元素个数(PredictorNames)必须是相等的。

    • 默认情况下,PredictorNames{x1, x2,…}

  • 如果你提供资源描述,然后你可以使用PredictorNames选择在训练中使用的预测变量。也就是说,fitcnb中的预测变量PredictorNames训练过程中的响应变量。

    • PredictorNames的子集Tbl.Properties.VariableNames和不能包含响应变量的名称。

    • 默认情况下,PredictorNames包含所有预测变量的名称。

    • 一个好的实践是使用任意一种方法指定训练的预测器PredictorNames公式,但不是两者都有。

例子:“PredictorNames”(“SepalLength”、“SepalWidth”,“PetalLength”,“PetalWidth”)

数据类型:字符串|细胞

每个类的先验概率,指定为逗号分隔的对,由“之前”和这个表中的一个值。

价值 描述
“经验” 类的先验概率是类的相对频率Y
“统一” 所有类的先验概率都等于1/K,在那里K是类的数量。
数值向量 每个元素都是一个类先验概率。对元素进行排序Mdl.ClassNames方法指定顺序一会名称-值对的论点。该软件将元素规范化,使它们的和为1
结构

一个结构年代两个字段:

  • S.ClassNames作为类型相同的变量包含类名Y

  • S.ClassProbs包含相应先验概率的向量。该软件将元素规范化,使它们的和为1

如果为两者设置值权重而且之前,将权重重新规格化,使其相加等于各自类中的先验概率值。

例子:“前”、“制服”

数据类型:字符|字符串|||结构体

响应变量名,指定为字符向量或字符串标量。

  • 如果你提供Y,然后你可以使用ResponseName为响应变量指定名称。

  • 如果你提供ResponseVarName公式,那么你就不能使用ResponseName

例子:“ResponseName”、“反应”

数据类型:字符|字符串

分数转换,指定为字符向量、字符串标量或函数句柄。

这个表总结了可用的字符向量和字符串标量。

价值 描述
“doublelogit” 1 / (1 +e2x
“invlogit” 日志(x/ (1 -x))
“ismax” 将分数最大的类的分数设置为1,并将所有其他类的分数设置为0
“分对数” 1 / (1 +e- - - - - -x
“没有”“身份” x(转换)
“标志” 1x< 0
为0x= 0
1x> 0
“对称” 2x- 1
“symmetricismax” 将分数最大的类的分数设置为1,并将所有其他类的分数设置为-1
“symmetriclogit” 2 / (1 +e- - - - - -x) - 1

对于MATLAB函数或您定义的函数,使用它的函数句柄进行分数变换。函数句柄必须接受一个矩阵(原始分数)并返回一个相同大小的矩阵(转换后的分数)。

例子:“ScoreTransform”、“分对数”

数据类型:字符|字符串|function_handle

观察权值,用逗号分隔的对表示“重量”和正数值向量或变量名资源描述.软件对每一行的观察结果进行加权X资源描述的对应值权重.的大小权重必须等于的行数X资源描述

如果将输入数据指定为表资源描述,然后权重变量的名称可以在资源描述它包含一个数字向量。在这种情况下,您必须指定权重作为字符向量或字符串标量。例如,如果权重向量W存储为资源描述。W,然后将其指定为' W '.的所有列资源描述,包括W,作为训练模型时的预测器或响应。

该软件可实现权重加起来等于各自类的先验概率的值。

默认情况下,权重(n,1),在那里n观察的数量在吗X资源描述

数据类型:||字符|字符串

Hyperparameter优化

全部折叠

参数要优化,指定为逗号分隔的对,由“OptimizeHyperparameters”和以下其中之一:

  • “没有”-不要优化。

  • “汽车”——使用{“DistributionNames”、“宽度”}

  • “所有”—优化所有符合条件的参数。

  • 合格参数名称的字符串数组或单元格数组。

  • 向量的optimizableVariable的输出hyperparameters

优化尝试最小化交叉验证的损失(错误)fitcnb通过改变参数。有关交叉验证丢失的信息(尽管是在不同的上下文中),请参见分类损失.要控制交叉验证类型和优化的其他方面,请使用HyperparameterOptimizationOptions名称-值对。

请注意

的值“OptimizeHyperparameters”覆盖使用其他名称-值参数指定的任何值。例如,设置“OptimizeHyperparameters”“汽车”原因fitcnb参数对应的超参数“汽车”选项,并忽略超参数的任何指定值。

符合条件的参数fitcnb是:

  • DistributionNames- - - - - -fitcnb搜索中“正常”而且“内核”

  • 宽度- - - - - -fitcnb在实值之间搜索,默认情况下按对数缩放范围[MinPredictorDiff / 4,马克斯(MaxPredictorRange MinPredictorDiff)]

  • 内核- - - - - -fitcnb搜索中“正常”“盒子”“epanechnikov”,“三角形”

通过传递vector来设置非默认参数optimizableVariable具有非默认值的对象。例如,

负载fisheririsparams = hyperparameters (“fitcnb”量,物种);参数(2)。范围=(1飞行,1 e2);

通过参数个数的价值OptimizeHyperparameters

默认情况下,迭代显示出现在命令行中,并根据优化中的超参数的数量显示图形。对于优化和绘图,目标函数是误分类率。要控制迭代显示,请设置详细的场的“HyperparameterOptimizationOptions”名称-值参数。要控制情节,设置ShowPlots场的“HyperparameterOptimizationOptions”名称-值参数。

示例请参见优化朴素贝叶斯分类器

例子:“汽车”

优化选项,指定为结构。的效果OptimizeHyperparameters名称-值参数。结构中的所有字段都是可选的。

字段名 默认的
优化器
  • “bayesopt”-使用贝叶斯优化。在内部,这个设置调用bayesopt

  • “gridsearch”-使用网格搜索NumGridDivisions每个维度值。

  • “randomsearch”-在其中随机搜索MaxObjectiveEvaluations点。

“gridsearch”以随机顺序进行搜索,使用统一采样而不从网格中替换。优化后,可以使用该命令获得网格顺序的表sortrows (Mdl.HyperparameterOptimizationResults)

“bayesopt”
AcquisitionFunctionName

  • “expected-improvement-per-second-plus”

  • “expected-improvement”

  • “expected-improvement-plus”

  • “expected-improvement-per-second”

  • “lower-confidence-bound”

  • “probability-of-improvement”

获取函数,其名称包括每秒不会产生可重复的结果,因为优化依赖于目标函数的运行时间。获取函数,其名称包括+当他们过度开发某一区域时,修改他们的行为。有关更多细节,请参见获取函数类型

“expected-improvement-per-second-plus”
MaxObjectiveEvaluations 目标函数评价的最大次数。 30.“bayesopt”而且“randomsearch”,和整个网格“gridsearch”
MaxTime

时间限制,指定为正实标量。时间限制以秒为单位,用抽搐而且toc.运行时间可以超过MaxTime因为MaxTime不会中断函数的计算。

NumGridDivisions “gridsearch”,表示每个维度的值的个数。该值可以是一个给出每个维度值数量的正整数向量,也可以是一个适用于所有维度的标量。对于类别变量,该字段将被忽略。 10
ShowPlots 指示是否显示图形的逻辑值。如果真正的,该字段根据迭代次数绘制最佳观测目标函数值。如果你使用贝叶斯优化(优化器“bayesopt”),则该字段也绘制出最佳估计的目标函数值。最佳观测目标函数值和最佳估计目标函数值对应于BestSoFar(观察)而且BestSoFar (estim)。列的迭代显示,分别。您可以在属性中找到这些值ObjectiveMinimumTrace而且EstimatedObjectiveMinimumTraceMdl。HyperparameterOptimizationResults.如果问题包含一个或两个优化参数的贝叶斯优化,那么ShowPlots并根据参数绘制了目标函数模型。 真正的
SaveIntermediateResults 指示何时是否保存结果的逻辑值优化器“bayesopt”.如果真正的,该字段将覆盖名为“BayesoptResults”在每一个迭代。变量是aBayesianOptimization对象。
详细的

在命令行显示:

  • 0-无迭代显示

  • 1——迭代显示

  • 2-迭代显示额外的信息

详细信息请参见bayesopt详细的名称-值参数和示例使用贝叶斯优化优化分类器拟合

1
UseParallel 指示是否并行运行贝叶斯优化的逻辑值,这需要并行计算工具箱™。由于并行时序的不可再现性,并行贝叶斯优化不一定产生可再现的结果。有关详细信息,请参见平行的贝叶斯优化
重新分区

指示是否在每次迭代时重新划分交叉验证的逻辑值。如果这个字段是,优化器使用单个分区进行优化。

设置真正的通常给出最健壮的结果,因为它考虑了分区噪声。然而,为了得到好的结果,真正的需要至少两倍的函数求值。

只使用以下三个选项中的一个。
CVPartition 一个cvpartition对象,如由cvpartition “Kfold”,5如果不指定交叉验证字段
坚持 范围内的标量(0,1)表示抵制分数
Kfold 大于1的整数

例子:“HyperparameterOptimizationOptions”、结构(MaxObjectiveEvaluations, 60)

数据类型:结构体

输出参数

全部折叠

训练朴素贝叶斯分类模型,返回为ClassificationNaiveBayes模型对象或ClassificationPartitionedModel旨在模型对象。

如果设置任何名称-值对参数KFold坚持CrossVal,或CVPartition,然后Mdl是一个ClassificationPartitionedModel旨在模型对象。否则,Mdl是一个ClassificationNaiveBayes模型对象。

的属性来引用Mdl,使用点表示法。例如,要访问估计的分布参数,输入Mdl。DistributionParameters

更多关于

全部折叠

Bag-of-Tokens模型

在令牌袋模型中,预测器的值j令牌出现的非负次数j在观察。多项模型中类别(箱)的数量是不同标记的数量(预测器的数量)。

朴素贝叶斯

朴素贝叶斯是一种对数据应用密度估计的分类算法。

该算法利用贝叶斯定理,并(天真地)假设预测器在给定类的条件下是独立的。尽管在实践中通常会违背假设,朴素贝叶斯分类器倾向于产生对有偏差类密度估计稳健的后验分布,特别是当后验为0.5(决策边界)时。[1]

朴素贝叶斯分类器将观察值分配给最可能的类(换句话说,即最大后验决策规则)。显式地,该算法执行以下步骤:

  1. 估计每个类内预测因子的密度。

  2. 根据贝叶斯规则建立后验概率模型。也就是说,对所有人来说k= 1,…,K

    P ^ ( Y = k | X 1 .. X P = π ( Y = k j = 1 P P ( X j | Y = k k = 1 K π ( Y = k j = 1 P P ( X j | Y = k

    地点:

    • Y是一个观察值的类索引对应的随机变量。

    • X1、……XP是观察结果的随机预测。

    • π ( Y = k 类索引的先验概率是多少k

  3. 通过估计每个类别的后验概率对观察结果进行分类,然后将观察结果分配给产生最大后验概率的类别。

如果预测因子构成一个多项分布,则后验概率 P ^ ( Y = k | X 1 .. X P π ( Y = k P n ( X 1 ... X P | Y = k 在哪里 P n ( X 1 ... X P | Y = k 是多项分布的概率质量函数。

提示

  • 用于对基于计数的数据进行分类,例如bag-of-tokens模型,使用多项分布(如集合“DistributionNames”、“锰”).

  • 在训练一个模型之后,您可以生成预测新数据标签的C/ c++代码。生成C/ c++代码需要MATLAB编码器™.有关详细信息,请参见代码生成简介

算法

  • 如果预测变量j具有条件正态分布(见DistributionNames(名称-值参数),软件通过计算特定类别的加权平均值和加权标准差的无偏估计来拟合数据的分布。为每一个类k

    • 预测器的加权平均值j

      x ¯ j | k = y = k w x j y = k w

      在哪里w重量是用来观察的吗.该软件将类中的权重规范化,使其之和为该类的先验概率。

    • 预测器加权标准差的无偏估计量j

      年代 j | k = y = k w ( x j x ¯ j | k 2 z 1 | k z 2 | k z 1 | k 1 / 2

      在哪里z1 |k是类内权重的总和吗k而且z2 |k是类内权重的平方和吗k

  • 如果所有的预测变量组成一个条件多项分布(你指定“DistributionNames”、“锰”),该软件适合分布使用bag-of-tokens模型.软件存储该token的概率j出现在课堂上k在房地产DistributionParameters {kj.使用添加剂平滑[2],估计概率为

    P ( 令牌 j | k = 1 + c j | k P + c k

    地点:

    • c j | k = n k y = k x j w y = k w 令牌出现的加权次数是多少j在课堂上k

    • nk是课堂上观察的次数吗k

    • w 重量是用来观察的吗.该软件将类中的权重规范化,使其之和为该类的先验概率。

    • c k = j = 1 P c j | k 类中所有令牌出现的总加权次数是多少k

  • 如果预测变量j具有条件多元多项式分布:

    1. 该软件收集的唯一级别的列表,存储在排序的列表CategoricalLevels,并将每一层视为一个箱子。每个预测因子/类别组合都是一个独立的多项随机变量。

    2. 为每一个类k,该软件使用存储在中的列表来统计每个分类级别的实例CategoricalLevels {j

    3. 软件存储预测器的概率j在课堂上,k,水平l在房地产DistributionParameters {kj,适用于所有级别CategoricalLevels {j.使用添加剂平滑[2],估计概率为

      P ( 预测 j = l | k = 1 + j | k ( l j + k

      地点:

      • j | k ( l = n k y = k x j = l w y = k w 哪个预测器的加权观察数是多少j=l在课堂上k

      • nk是课堂上观察的次数吗k

      • x j = l = 1 如果xij=l,否则为0。

      • w 重量是用来观察的吗.该软件将类中的权重规范化,使其之和为该类的先验概率。

      • j不同水平的数量是预测指标吗j

      • k课堂上观察的次数是加权的吗k

  • 如果指定成本之前,权重参数时,输出模型对象将指定的值存储在成本之前,W属性,分别。的成本属性存储用户指定的成本矩阵(C)。的之前而且W属性分别存储归一化后的先验概率和观测权值。有关详细信息,请参见错误分类成本矩阵,先验概率和观察权重

  • 该软件使用成本属性用于预测,而不是训练。因此,成本不是只读;您可以在创建训练过的模型后使用点表示法更改属性值。

参考文献

[1]哈斯蒂,T., R.蒂布希拉尼,J.弗里德曼。统计学习的要素,第二版。纽约:施普林格,2008年。

[2]曼宁,克里斯托弗·D,普拉巴卡尔·拉加万,辛里奇Schütze。信息检索导论纽约:剑桥大学出版社,2008。

扩展功能

版本历史

介绍了R2014b

Baidu
map