主要内容

fitcnb

训练多类朴素贝叶斯模型

描述

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

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

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

例子

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

例子

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

例子

全部折叠

载入费雪的虹膜数据集。

负载fisheririsX =量(:,3:4);Y =物种;汇总(Y)
价值计数百分比setosa 50 33.33%花色50 33.33%弗吉尼亚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);Sigma(:,:,j) = diag(Params(2*j,:)).^2;%创建对角协方差矩阵xlim = Mu(j,1) + 4*[-1 1]*根号(Sigma(1,1,j));ylim = Mu(j,2) + 4*[-1 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”)举行

图中包含一个坐标轴。标题为朴素贝叶斯分类器- Fisher's Iris Data的坐标轴包含类型线、函数轮廓等6个对象。这些物品代表着维珍卡。

您可以使用名称-值对参数更改默认发行版“DistributionNames”.例如,如果一些预测因子是分类的,那么您可以使用“DistributionNames”、“mvmn”

为费雪的虹膜数据集构造朴素贝叶斯分类器。此外,指定训练期间的先验概率。

载入费雪的虹膜数据集。

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

X是一个数字矩阵,包含四个花瓣测量150鸢尾。Y是包含相应虹膜种类的字符向量的细胞阵列。

默认情况下,先验类概率分布是数据集中类的相对频率分布。在这种情况下,每种物种的先验概率是33%。然而,假设你知道在种群中有50%的鸢尾是刚毛鸢尾,20%是花斑鸢尾,30%是弗吉尼亚鸢尾。您可以通过在训练期间指定此分布为先验概率来合并此信息。

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

Prior = [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'} 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'} DistributionParameters: {3x4 cell}属性,方法
Mdl1。DistributionParameters
ans =3×4单元阵列{2x1 double} {2x1 double} {2x1 double} {2x1 double} {2x1 double} {2x1 double} {2x1 double} {2x1 double} {2x1 double}
Mdl1。DistributionParameters {1,2}
ans =2×13.4280 - 0.3791

默认情况下,软件将每个类中的预测器分布建模为带有一些均值和标准偏差的高斯分布。有四个预测因素和三个等级。每个细胞在Mdl1。DistributionParameters对应一个数值向量,其中包含各分布的均值和标准差,如刚毛鸢尾萼片宽度的均值和标准差为3.42800.3791,分别。

估计混淆矩阵Mdl1

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

Figure包含一个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);

Figure包含一个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-倍分类误差(误分类观测值的比例)。

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

Mdl2具有较低的泛化误差。

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

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

创建培训数据

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

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

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

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”))
警告:建议您在优化朴素贝叶斯“宽度”参数时首先标准化所有数值预测器。如果您已经这样做了,请忽略此警告。
|=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar |分布宽度——| | | | |结果运行时| |(观察)| (estim)名字| | ||=====================================================================================================| | 最好1 | | 0.053333 | 0.6548 | 0.053333 | 0.053333正常| | - | | 2 |最好| 0.046667 | 0.89394 | 0.046667 | 0.049998 | 0.11903内核| | | 3 |接受| 0.053333 | 0.28682 | 0.046667 | 0.046667 |正常| - | | | 0.086667 | 4 |接受内核0.38664 | 0.046667 | 0.046668 | 2.4506 | | | 5 |接受| 0.046667 | 0.56548 | 0.046667 | 0.046663 | 0.10449内核| | | 6 |接受| 0.073333 | 0.7573 | 0.046667 | 0.046665 | 0.025044内核| | | | 7日接受| 0.046667 | 0.46154 | 0.046667 | 0.046655 | 0.27647内核| | | 8 |接受| 0.046667 | 0.46012 | 0.046667 | 0.046647 | |内核0.2031 | | | 9日接受| 0.06 | 0.54849 | 0.046667 | 0.046658 | 0.44271内核| | | 10 |接受| 0.046667 | 0.33936 | 0.046667 | 0.046618 | 0.2412内核| | | | 11日接受| 0.046667 | 0.9107 | 0.046667 | 0.046619 | 0.071925内核| | | | 12日接受| 0.046667 | 0.9163 | 0.046667 | 0.046612 | 0.083459内核| | | | 13日接受| 0.046667 | 0.30337内核| 0.15661 | 0.046667 | 0.046603 | | | | 14日接受| 0.046667 | 0.34313 | 0.046667 | 0.046607 | 0.25613内核| | | 15 |接受| 0.046667 | 0.41479 | 0.046667 | 0.046606 | 0.17776内核| | | | 16日接受| 0.046667 | 0.27877 | 0.046667 | 0.046606 | 0.13632内核| | | | 17日接受| 0.046667 | 0.4518 | 0.046667 | 0.046606 | |内核18 0.077598 | | |接受| 0.046667 | 0.38954 | 0.046667 | 0.046626 | 0.25646内核| | | | 19日接受| 0.046667 | 0.80467 | 0.046667 | 0.046626 | 0.093584内核| | | 20 |接受| 0.046667 | 1.1248 | 0.046667 | 0.046627 | 0.061602内核|  | |=====================================================================================================|| Iter | Eval客观客观| | | BestSoFar | BestSoFar |分布宽度——| | | | |结果运行时| |(观察)| (estim) |名称  | | |=====================================================================================================| | 21日|接受| 0.046667 | 0.42513 | 0.046667 | 0.046627 | 0.066532内核| | | | | 22日接受内核0.093333 | 0.26983 | 0.046667 | 0.046618 | 5.8968 | | | | 23日接受| 0.046667 | 0.28085 | 0.046667 | 0.046619 | 0.067045内核| | | | 24日接受| 0.046667 | 0.2893 | 0.046667 | 0.04663 | 0.25281内核| | | | 25日接受| 0.046667 | 0.32039 | 0.046667 | 0.04663 | 0.1473内核| | | | 26日接受| 0.046667 | 0.32436 | 0.046667 | 0.046631 |kernel | 0.17211 | | 27 | Accept | 0.046667 | 0.31078 | 0.046667 | 0.046631 | kernel | 0.12457 | | 28 | Accept | 0.046667 | 0.2672 | 0.046667 | 0.046631 | kernel | 0.066659 | | 29 | Accept | 0.046667 | 0.33994 | 0.046667 | 0.046631 | kernel | 0.1081 | | 30 | Accept | 0.08 | 0.46366 | 0.046667 | 0.046628 | kernel | 1.1048 |

图中包含一个坐标轴。标题为“最小目标vs.函数计算数”的轴包含2个类型为line的对象。这些对象代表最小观测目标、最小估计目标。

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

__________________________________________________________ 优化完成。maxobjective达到30个。总函数计算:30总运行时间:67.5244秒总目标函数计算时间:14.5838最佳观测可行点:DistributionNames Width _________________ _______ kernel 0.11903观测目标函数值= 0.046667估计目标函数值= 0.046667函数计算时间= 0.89394最佳估计可行点(根据模型):DistributionNames Width _________________ _______ kernel 0.25613 Estimated objective function value = 0.046628 Estimated function evaluation time = 0.41955
Mdl = ClassificationNaiveBayes ResponseName:‘Y’CategoricalPredictors:[]类名:{“setosa”“杂色的”“virginica”}ScoreTransform:“没有一个”NumObservations: 150 HyperparameterOptimizationResults: [1 x1 BayesianOptimization] DistributionNames: {1} x4细胞DistributionParameters: {} 3 x4细胞内核:{1}x4细胞支持:{1}x4细胞宽度:万博1manbetx[3x4 double]属性,方法

输入参数

全部折叠

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

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

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

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

数据类型:表格

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

您必须指定ResponseVarName作为字符向量或字符串标量。例如,如果响应变量Y存储为资源描述。Y,则指定为“Y”.否则,软件将对所有列进行处理资源描述,包括Y,作为训练模型时的预测器。

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

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

数据类型:字符|字符串

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

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

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

数据类型:字符|字符串

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

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

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

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

预测器数据,指定为数字矩阵。

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

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

数据类型:

注意:

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

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

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

  • 如果X包含丢失的值和您设置的值“DistributionNames”、“锰”,然后软件删除这些行X和相应的元素Y

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

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

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

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

请注意

的参数不能同时使用任何交叉验证的名称-值对参数“OptimizeHyperparameters”名称-值对的论点。可以为。修改交叉验证“OptimizeHyperparameters”只有使用“HyperparameterOptimizationOptions”名称-值对的论点。

朴素贝叶斯的选项

全部折叠

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

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

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

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

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

例子:“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.该软件忽略的元素内核不对应于一个分布是“内核”

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

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

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

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

价值 描述
1乘2的数字行向量 例如,(L U),在那里lU分别为密度支持的有限上界和下界。万博1manbetx
“积极” 密度支持都是正的实值。万博1manbetx
“无限” 密度支持都是真实值。万博1manbetx

如果你指定一个1乘-P字符串数组或单元格数组,字符串数组中的每个元素包含表中的任意文本值,单元格数组中的每个元素包含表中的任意值,然后软件使用element中的内核支持来训练分类器万博1manbetxj为特征jX.该软件忽略的元素内核不对应于一个分布是“内核”

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

例子:KSS万博1manbetxupport,{[-10, 20],“无界”}

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

核平滑窗宽,指定为逗号分隔对组成“宽度”以及由数值、数值列向量、数值行向量或标量组成的矩阵。

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

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

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

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

例子:“宽度”,南南

数据类型:|结构体

交叉验证选择

全部折叠

交叉验证标志,指定为逗号分隔对,由“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”值不计算响应变量、观察权重变量和函数未使用的任何其他变量。

逻辑向量

一个真正的Entry表示预测数据对应的列是一个分类变量。向量的长度是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这取决于你提供培训数据的方式。

  • 如果你提供XY,则可以使用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是:

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

  • 宽度- - - - - -fitcnb在实际值中搜索,默认在范围内按对数缩放[MinPredictorDiff / 4,马克斯(MaxPredictorRange MinPredictorDiff)]

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

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

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

通过参数个数的价值OptimizeHyperparameters

默认情况下,在命令行出现迭代显示,并根据优化中超参数的数量出现绘图。对于优化和绘图,目标函数为Log(1 +交叉验证损失)为回归和误分类率为分类。若要控制迭代显示,请设置详细的场的“HyperparameterOptimizationOptions”名称-值对的论点。要控制情节,设置ShowPlots场的“HyperparameterOptimizationOptions”名称-值对的论点。

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

例子:“汽车”

用于优化的选项,指定为逗号分隔的对,由“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”,然后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编码器™.有关详细信息,请参见代码生成简介

算法

  • 如果您指定“DistributionNames”、“锰”当训练Mdl使用fitcnb,则该软件拟合一个多项分布,使用bag-of-tokens模型.软件存储该令牌的概率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

  • 如果您指定“DistributionNames”、“mvmn”当训练Mdl使用fitcnb,那么:

    1. 对于每个预测器,软件会收集一个独特关卡的列表,并将排序后的列表存储在其中CategoricalLevels,并将每一层视为一个容器。每个预测器/类组合是一个独立的,独立的多项随机变量。

    2. 为预测j在课堂上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 如果xijl,否则为0。

      • w 重量是用于观察的吗.该软件将一个类中的权重标准化,这样它们的总和就等于该类的先验概率。

      • j预测器中不同水平的数量j

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

参考文献

Hastie, T., R. Tibshirani, J. Friedman。统计学习的要素,第二版。纽约:施普林格,2008年。

[2] Manning, c.d., P. Raghavan, M. Schütze。信息检索概论,纽约:剑桥大学出版社,2008。

扩展功能

介绍了R2014b