fitcnb

训练多类朴素贝叶斯模型

描述

Mdl= fitcnb(TBLResponseVarName收益多类朴素贝叶斯模型(Mdl),培养在表中的预测TBL和类标签的变量Tbl.ResponseVarName

Mdl= fitcnb(TBL公式收益多类朴素贝叶斯模型(Mdl),培养在表中的预测TBL公式反应的解释模型和预测变量的子集在TBL用来拟合Mdl

Mdl= fitcnb(TBLÿ收益多类朴素贝叶斯模型(Mdl),由受过训练的表中预测TBL和数组中的类标签ÿ

Mdl= fitcnb(Xÿ收益多类朴素贝叶斯模型(Mdl),受过预言者的训练X和类标签ÿ

Mdl= fitcnb(___名称,值返回具有附加选项的朴素贝叶斯分类器由一个或多个指定的名称,值自变量对,使用任何以前的语法。例如,你可以指定一个分布的数据,先验概率为类,或者核平滑窗口带宽模型。

例子

全部折叠

加载费舍尔的虹膜数据集。

加载fisheririsX = MEAS(:,3:4);Y =物种;制表(Y)
值计数百分比setosa 50 33.33%50花斑癣33.33%锦葵50 33.33%

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

训练朴素贝叶斯分类器。这是指定的类顺序很好的做法。

MDL = fitcnb(X,Y,...“类名”,{'setosa'“花斑癣”“弗吉尼亚”})
Mdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' virginica'} ScoreTransform: 'none' NumObservations: 150 DistributionNames: {'normal' 'normal'} DistributionParameters: {3x2 cell}属性、方法

Mdl是一个训练有素的ClassificationNaiveBayes分类器。

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

setosaIndex = strcmp (Mdl.ClassNames,'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);亩=参数(2 *(1:3)-1,1:2);%提取手段西格玛=零(2,2,3);对于1 = 1:3 Sigma(:,:,j) = diag(Params(2*j,:)).^2;%创建对角协方差矩阵xlim = Mu(j,1) + 4*[-1]*sqrt(Sigma(1,1,j));ylim = Mu(j,2) + 4*[-1]*sqrt(Sigma(2,2,j));f = @ (x1, x2)重塑(mvnpdf ((x1 (:), x2(:)),μ(j,:),σ(:,:,j)),大小(x1));fcontour (f, [xlim ylim])%画出轮廓的多变量正态分布结束h。X大号一世米=CXlim; h.YLim = cylim; title(“朴素贝叶斯分类器 - 费舍尔的虹膜数据”)包含('花瓣长度(cm)')ylabel (“花瓣宽度(厘米)”)传说('setosa'“花斑癣”“弗吉尼亚”)保持

您可以使用名称 - 值对参数更改默认的分配'DistributionNames'。例如,如果一些预测是明确的,那么你可以指定他们使用多变量,多项随机变量'DistributionNames', 'mvmn'

构建一个朴素贝叶斯分类器对费舍尔的虹膜数据集。此外,培训期间指定先验概率。

加载费舍尔的虹膜数据集。

加载fisheririsX =量;Y =物种;类名= {'setosa'“花斑癣”“弗吉尼亚”};%级顺序

X是一个包含150和虹膜4次花瓣测量的数值矩阵。ÿ是字符向量的单元阵列,它包含相应的虹膜物种。

默认情况下,在现有类的概率分布是在所述数据集,在这种情况下对于每个物种的33%的类的相对频率分布。但是,假设你知道,在人口虹膜的50%是setosa,20%是花斑癣,30%是弗吉尼亚。您可以通过训练过程中指定该分布作为先验概率将这一信息。

训练朴素贝叶斯分类器。指定类次序和现有类的概率分布。

现有= [0.5 0.2 0.3]。MDL = fitcnb(X,Y,“类名”一会,“在此之前”之前)
MDL = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors:[]类名:{ 'setosa' '云芝' '锦葵'} ScoreTransform: '无' NumObservations:150个DistributionNames:{ '正常' '正常' '正常' '正常'} DistributionParameters{3×4电池}属性,方法

Mdl是一个训练有素的ClassificationNaiveBayes分类,和它的一些特性出现在命令窗口。该软件将预测作为独立给出一个类,在默认情况下,适合使用它们正态分布。

朴素贝叶斯算法训练过程中不使用之前类概率。因此,您可以使用点符号训练后指定之前类概率。例如,假设你想看到使用默认之前类概率和一个模型,使用模型之间的性能差异

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

defaultPriorMdl =铜牌;FreqDist = cell2table(平板状(Y));defaultPriorMdl.Prior = 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'“花斑癣”“弗吉尼亚”})
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双}{2x1双}{2x1双}{2x1双}{2x1双}{2x1双}{2x1双}{2x1双}{2x1双}{2x1双}{2x1双}{2x1双}{2x1双}
Mdl1.DistributionParameters {1,2}
ANS =2×13.4280 0.3791

默认情况下,软件将每个类内的预测器分布建模为具有一定均值和标准差的高斯分布。有四个预测器和三个类级别。每个细胞在Mdl1.DistributionParameters对应于含有各分布的平均值和标准偏差的数值向量,例如,用于setosa的平均值和标准偏差虹膜萼片宽度3.42800.3791, 分别。

估计所述混淆矩阵Mdl1

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

元素(Ĵķ)混淆矩阵图表的表示观察的数目,该软件归类为ķ,但真正在课堂上Ĵ根据该数据。

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

MDL2 = fitcnb(X,Y,...'DistributionNames',{'正常''正常''核心''核心'},...“类名”,{'setosa'“花斑癣”“弗吉尼亚”});Mdl2.DistributionParameters {1,2}
ANS =2×13.4280 0.3791

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

估计所述混淆矩阵Mdl2

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

基于所述混淆矩阵,所述两个分类器训练样本中类似地执行。

加载费舍尔的虹膜数据集。

加载fisheririsX =量;Y =物种;RNG(1);%用于重现

火车和交叉验证朴素贝叶斯分类使用默认选项和ķ倍交叉验证。这是指定的类顺序很好的做法。

CVMdl1 = fitcnb (X, Y,...“类名”,{'setosa'“花斑癣”“弗吉尼亚”},...“CrossVal”'上');

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

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

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

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

比较出的样本ķ-折叠分类误差(误分类观测的比例)。

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

Mdl2具有较低的泛化误差。

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

本实施例说明使用朴素贝叶斯和多项式预测器的分类。

创建训练数据

假设你观察到的1000封电子邮件,并归类他们为垃圾邮件或垃圾邮件。通过随机分配做到这一点-1或1ÿ对于每一个电子邮件。

N = 1000;%样本量RNG(1);%用于重现Y = randsample([-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);下一页末=零(newN,5);下一页末(newY == 1,:) = mnrnd(tokensPerEmail,tokenProbs(1,:),...总和(newY = = 1));newX(newY == -1,:) = mnrnd(tokenProbs),...总和(newY == -1));

评估分类器的性能

使用训练好的朴素贝叶斯分类器对新邮件进行分类Mdl,并确定算法是否可以推广。

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

出样品的-错误分类率2.6%,表明该分类归纳得相当好。

这个示例展示如何使用OptimizeHyperparameters名称 - 值对分类器使用,以尽量减少在朴素贝叶斯交叉验证损失fitcnb。这个例子使用了Fisher的虹膜数据。

加载费舍尔的虹膜数据。

加载fisheririsX =量;Y =物种;类名= {'setosa'“花斑癣”“弗吉尼亚”};

使用“auto”参数优化分类。

对于重复性,设置随机种子,并使用“预计-改善,加上”采集功能。

RNG默认MDL = fitcnb(X,Y,“类名”一会,'OptimizeHyperparameters''汽车'...“HyperparameterOptimizationOptions”,结构('AcquisitionFunctionName'...“预计-改善,加上”))
警告:建议在优化朴素贝叶斯的宽度参数时首先标准化所有数值预测器。如果您已经这样做了,请忽略此警告。
| ===================================================================================================== ||ITER |EVAL |目的|目的|BestSoFar |BestSoFar |分布 -  |宽度| | | result | | runtime | (observed) | (estim.) | Names | | |=====================================================================================================| | 1 | Best | 0.053333 | 0.75774 | 0.053333 | 0.053333 | normal | - |
|2 |最佳|0.046667 |0.76016 |0.046667 |0.049998 |内核|0.11903 |
| 3 |接受| 0.053333 | 0.29251 | 0.046667 | 0.046667正常| - |
|4 |接受|0.086667 |0.6733 |0.046667 |0.046668 |内核|2.4506 |
|5 |接受|0.046667 |0.57392 |0.046667 |0.046663 |内核|0.10449 |
|6 |接受|0.073333 |0.82565 |0.046667 |0.046665 |内核|0.025044 |
|7 |接受|0.046667 |0.75362 |0.046667 |0.046655 |内核|0.27647 |
| 8接受| 0.046667 b| 0.57496 | 0.046667 | 0.046647 |内核bb7 0.2031 |
|9 |接受|0.06 |0.43719 |0.046667 |0.046658 |内核|0.44271 |
|10 |接受|0.046667 |0.53128 |0.046667 |0.046618 |内核|0.2412 |
|11 |接受|0.046667 |0.75877 |0.046667 |0.046619 |内核|0.071925 |
|12 |接受|0.046667 |0.67806 |0.046667 |0.046612 |内核|0.083459 |
|13 |接受|0.046667 |1.2735 |0.046667 |0.046603 |内核|0.15661 |
|14 |接受|0.046667 |0.93114 |0.046667 |0.046607 |内核|0.25613 |
| 15 |接受| 0.046667 b| 0.68034 | 0.046667 | 0.046606 |内核| 0.17776 |
|16 |接受|0.046667 |0.34665 |0.046667 |0.046606 |内核|0.13632 |
| 17接受| 0.046667 b| 0.71023 | 0.046667 | 0.046606 |内核| 0.077598 |
|18 |接受|0.046667 |0.40713 |0.046667 |0.046626 |内核|0.25646 |
|19 |接受|0.046667 |0.89971 |0.046667 |0.046626 |内核|0.093584 |
| 20 |接受| 0.046667 b| 1.4125 | 0.046667 | 0.046627 |内核| 0.061602 |
| ===================================================================================================== ||ITER |EVAL |目的|目的|BestSoFar |BestSoFar |分布 -  |宽度| | | result | | runtime | (observed) | (estim.) | Names | | |=====================================================================================================| | 21 | Accept | 0.046667 | 0.48559 | 0.046667 | 0.046627 | kernel | 0.066532 |
|22 |接受|0.093333 |0.61192 |0.046667 |0.046618 |内核|5.8968 |
|23 |接受|0.046667 |0.34903 |0.046667 |0.046619 |内核|0.067045 |
|24 |接受|0.046667 |0.41643 |0.046667 |0.04663 |内核|0.25281 |
| 25 |接受| 0.77772 | 0.046667 | 0.04663 |内核bb7 0.1473 |
|26 |接受|0.046667 |0.39873 |0.046667 |0.046631 |内核|0.17211 |
| 27 |接受| 0.44217 | 0.046667 | 0.046631 |内核bb7 0.12457 |
| 28 |接受| 0.046667 | 0.39119 | 0.046667 | 0.046631 |内核| 0.066659 |
|29 |接受|0.046667 |0.4653 |0.046667 |0.046631 |内核|0.1081 |
|30 |接受|0.08 |0.42473 |0.046667 |0.046628 |内核|1.1048 |

__________________________________________________________优化完成。30 MaxObjectiveEvaluations达到。总功能评价:30总运行时间:79.0981秒。总目标函数评估时间:(根据型号)DistributionNames宽度_________________ _______内核0.11903观测目标函数值= 0.046667估计目标函数值= 0.046667功能评估时间= 0.76016最佳估计可行点:19.0411最佳观察到的可行点DistributionNames宽度_________________ _______内核0.25613估计目标函数值= 0.046628估计函数评估时间= 0.58962
MDL = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors:[]类名:{ 'setosa' '云芝' '锦葵'} ScoreTransform: '无' NumObservations:150个HyperparameterOptimizationResults:[1x1的BayesianOptimization] DistributionNames:{1×4细胞} DistributionParameters:{3×4细胞}内核:{1×4细胞}支持:{1×4细胞}万博1manbetx宽度:[3x4的双]的属性,方法

输入参数

全部折叠

用于训练模型的样本数据,指定为表。每行TBL对应于一个观测,并且每一列对应于一个预测变量。(可选)TBL可以包含用于响应变量一个附加列。多列变量和除字符向量的单元阵列的其他单元阵列是不允许的。

如果TBL包含响应变量,并且您希望使用中所有剩余的变量TBL作为预测,然后通过使用指定响应变量ResponseVarName

如果TBL包含响应变量,您希望只使用其余变量的一个子集TBL作为预测,然后通过使用指定一个公式公式

如果TBL不包含响应变量,然后通过使用指定的响应变量ÿ。响应变量的长度和输入的行数TBL必须相等。

数据类型:表格

响应变量名,指定为变量的名称中的TBL

您必须指定ResponseVarName作为字符向量或字符串标量。例如,如果响应变量ÿ存储为Tbl.Y,然后将其指定为“Y”。否则,软件处理的所有列TBL, 包含ÿ,作为预测训练模型时。

响应变量必须是明确的,字符或字符串数​​组,逻辑或数字载体,或字符向量的单元阵列。如果ÿ是一个字符数组,那么响应变量的每个元素必须对应于数组的一行。

方法指定类的顺序是一种好的做法类名名称-值对的论点。

数据类型:烧焦|

响应变量和预测器变量的子集的说明模型,指定为形式的字符向量或标量串'Y〜X1 + X2 + X3'。在这种形式下,ÿ表示响应变量,和X1X2,X3代表预测变量。

要指定变量的一个子集TBL作为预测用于训练模型,使用公式。如果您指定一个公式,则该软件不使用任何变量TBL没有出现在公式

公式中的变量名必须在两个变量名TBLTbl.Properties.VariableNames)和有效MATLAB®身份标识。

您可以验证变量名TBL通过使用isvarname函数。下面的代码返回逻辑1真正的)对于具有合法的变量名每个变量。

cellfun (@isvarname Tbl.Properties.VariableNames)
如果变量名中TBL无效,然后使用matlab.lang.makeValidName函数。
Tbl.Properties.VariableNames=matlab.lang.makeValidName(Tbl.Properties.VariableNames);

数据类型:烧焦|

训练朴素贝叶斯分类器的类标签,指定为分类、字符或字符串数组、逻辑或数字向量或字符向量的单元数组。的每个元素ÿ的对应行定义类成员Xÿ万博1manbetx支持ķ职业等级。

如果ÿ是一个字符阵列,则每行必须对应于一个类的标签。

长度ÿ的行数X必须等同。

数据类型:分类|烧焦||合乎逻辑|||细胞

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

每行X对应于一个观测(也称为一个实例或示例),并且每一列对应于一个变量(也称为特征)。

长度ÿ的行数X必须等同。

数据类型:

注意:

该软件将为NaN,空字符向量(),空字符串(“”),<缺失>,<未定义>元素作为丢失的数据值。

  • 如果ÿ包含缺失值,那么软件删除它们,并相应行X

  • 如果X包含任何完全的缺失值组成的行,则该软件除去那些行和相应的元素ÿ

  • 如果X包含缺失值和你设定“DistributionNames”、“锰”,然后软件删除这些行X和的相应的元件ÿ

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

删除的行X对应的元素ÿ降低了有效的培训或交叉验证的样本大小。

名称 - 值对参数

指定可选的用逗号分隔的对名称,值参数。的名字是参数的名称和价值为对应值。的名字必须出现在引号内。可以按任意顺序指定多个名称和值对参数名1,值1,...,NameN,值N

例子:'DistributionNames', 'MN', '前', '均匀', 'KSWidth',0.5指定数据分布是多项,用于所有类的先验概率是相等的,和用于所有类的核平滑窗口带宽是0.5单位。

注意

你可以不使用任何交叉验证名称 - 值对参数与沿'OptimizeHyperparameters'名称-值对的论点。的交叉验证'OptimizeHyperparameters'只有通过使用“HyperparameterOptimizationOptions”名称-值对的论点。

朴素贝叶斯选项

全部折叠

数据分布fitcnb用途的数据,指定为逗号分隔的一对组成的建模'DistributionNames'和字符向量或标量的字符串,一个字符串数组,或字符向量的单元阵列与从该表中的值。

价值 描述
'核心' 核平滑密度估计。
“百万” 多项分布。如果您指定,那么所有的功能都是多项分布组件。因此,你可以不包括“百万”作为字符串数组或字符向量的单元数组的元素。有关详细信息,请参阅算法
'mvmn' 多变量多项分布。有关详细信息,请参阅算法
'正常' 正态(高斯)分布。

如果指定一个字符向量或串标,那么软件模型的所有功能,使用该分布。如果指定了1逐P字符串数组或字符向量的单元阵列,则软件模型特征Ĵ使用元素的分布Ĵ阵列的。

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

您必须指定至少一个预测有分布'核心'要另外指定内核万博1manbetx,或宽度

例子:“DistributionNames”、“锰”

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

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

此表概括了用于设置的核平滑密度区域的可用选项。让一世{ü}表示指示功能。

价值 内核
'框' 盒(统一)

F X = 0.5 一世 { | X | 1 }

“epanechnikov” Epanechnikov

F X = 0.75 1 - X 2 一世 { | X | 1 }

'正常' 高斯

F X = 1 2 π EXP - 0.5 X 2

'三角形' 三角

F X = 1 - | X | 一世 { | X | 1 }

如果指定了1逐P串阵列或电池阵列,用含有表中的任何值阵列的每个元素,则该软件训练使用元件内核平滑类型分类Ĵ为特征ĴX。该软件忽略的要素内核与分布为的预测器不对应'核心'

您必须指定至少一个预测有分布'核心'要另外指定内核万博1manbetx,或宽度

例子:'内核',{ 'epanechnikov', '正常'}

核平滑密度支持,指定为逗号分隔的一对组成的万博1manbetx'万博1manbetx支持'“积极”“无限”,一个字符串数组,一个单元阵列,或一个数字行向量。该软件适用的内核平滑密度到指定区域。

此表概括了用于设置的核平滑密度区域的可用选项。

价值 描述
1×2数字行向量 例如,[鲁],其中大号ü被有限分别降低和上界,对于支持密度。万博1manbetx
“积极” 密度支持都是正的真实值。万博1manbetx
“无限” 密度的支持是所有真正的价万博1manbetx值。

如果指定了1逐P串阵列或电池阵列,用含有在表和包含在表格中的任何值的单元阵列中的每个元件的任何文本值字符串数组中的每个元素,则该软件训练使用元件的内核支持分级万博1manbetxĴ为特征ĴX。该软件忽略的要素内核与分布为的预测器不对应'核心'

您必须指定至少一个预测有分布'核心'要另外指定内核万博1manbetx,或宽度

例子:'KS万博1manbetxSupport',{[ - 10,20], '无界'}

数据类型:烧焦||细胞|

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

假设有ķ一流的水平,P预测。此表概括了用于设置内核平滑窗口宽度可用的选项。

价值 描述
ķ-通过-P数值矩阵 元素(j k,)指定预测器的宽度Ĵ在班上ķ
ķ×1数值列向量 元素ķ指定类的所有预测器的宽度ķ
1逐P数字行向量 元素Ĵ指定所有类级别预测器的宽度Ĵ
标量 指定在所有类所有功能的带宽。

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

您必须指定至少一个预测有分布'核心'要另外指定内核万博1manbetx,或宽度

例子:“宽度”,[楠楠]

数据类型:|结构

交叉验证选项

全部折叠

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

如果您指定'上',则软件工具10倍交叉验证。

要覆盖此交叉验证设置,使用这些名称 - 值对参数之一:CVPartition坚持KFold,或忽略。要创建交叉验证的模型,一次只能使用一个交叉验证的名称-值对参数。

可替代地,交叉验证后通过通过Mdlcrossval

例子:'CrossVal', '上'

交叉验证分区,指定为逗号分隔的对,由“CVPartition”cvpartition分区对象通过创建cvpartition。分区对象指定交叉验证的类型和用于训练和验证集的索引。

要创建交叉验证的模型,您可以仅使用以下四个名称-值对参数之一:CVPartition坚持KFold,或忽略

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

用于坚持验证的部分数据,指定为逗号分隔的对,由“坚持”和范围内的(0,1)的标量值。如果您指定“不吸墨性”,对,那么软件完成以下步骤:

  1. 随机选择和储备P * 100%的数据作为验证数据,并使用剩下的数据训练模型。

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

要创建交叉验证的模型,您可以仅使用以下四个名称-值对参数之一:CVPartition坚持KFold,或忽略

例子:“坚持”,0.1

数据类型:|

褶皱的数目在一个交叉验证模型中使用,指定为逗号分隔的一对组成的'KFold'和一个大于1的正整数。如果您指定'KFold',K,那么软件完成以下步骤:

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

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

  3. 存储ķ在的细胞结构紧凑,训练的模型ķ-by-1在细胞中载体训练有素的交叉验证模型的性能。

要创建交叉验证的模型,您可以仅使用以下四个名称-值对参数之一:CVPartition坚持KFold,或忽略

例子:'KFold',5

数据类型:|

left -one-out交叉验证标志,指定为逗号分隔的对,由'忽略''上'“关闭”。如果您指定“Leaveout”,“上”,然后,针对每一个ñ观察(其中ñ不包括缺失观测的观测数,是否在NumObservations,软件完成以下步骤:

  1. 储备观测作为验证数据,并使用其他训练模型ñ- 1点意见。

  2. 存储ñ在的细胞结构紧凑,训练的模型ñ-by-1在细胞中载体训练有素的交叉验证模型的性能。

要创建交叉验证的模型,您可以仅使用以下四个名称-值对参数之一:CVPartition坚持KFold,或忽略

例子:“Leaveout”,“上”

其他分类选项

全部折叠

分类预测列表中,指定为逗号分隔的一对组成的'CategoricalPredictors'并在此表中的值之一。

价值 描述
正整数的向量 向量中的每个条目是对应于预测数据的列(索引值XTBL)包含分类变量的。
逻辑向量 一个真正的条目表示预测数据的对应的列(XTBL)为分类变量。
汉字字模 矩阵的每一行都是一个预测变量的名称。该名称必须在条目匹配PredictorNames。垫多余的空格的名字,这样的字符矩阵的每一行具有相同的长度。
串阵列或字符向量的单元阵列 数组中的每个元素是一个预测变量的名称。该名称必须在条目匹配PredictorNames
“所有” 所有的预言都是绝对的。

默认情况下,如果预测器数据在表中(TBL),fitcnb假设变量是分类的,如果它是逻辑向量、分类向量、字符数组、字符串数组或字符向量的单元数组。如果预测数据为矩阵(X),fitcnb假设所有的预测都是连续的。要确定任何其他预测作为分类预测,指定它们通过使用'CategoricalPredictors'名称-值对的论点。

对于已识别的范畴谓词,fitcnb使用多变量多项分布。有关详细信息,请参阅DistributionNames算法

例子:“CategoricalPredictors”、“所有”

数据类型:||合乎逻辑|烧焦||细胞

类名称,以用于训练,指定为逗号分隔的一对组成的“类名”和分类,字符或字符串数​​组,逻辑或数字载体,或字符向量的单元阵列。类名必须具有相同的数据类型ÿ

如果类名是一个字符数组,那么每个元素必须对应于数组的一行。

使用“类名”至:

  • 培训期间订购的类。

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

  • 选择要培训的类的子集。例如,假设所有不同的类名集合在ÿ{ 'A', 'B', 'C'}。要使用的观测从班训练模型“一个”“c”只是,指定“类名”,{' a ', ' c '}

作为默认值类名是集合所有不同的类名ÿ

例子:'类名',{ 'B', 'G'}

数据类型:分类|烧焦||合乎逻辑|||细胞

一个点的误分类的成本,指定为逗号分隔的一对组成的'成本'和以下情况之一:

  • 方阵,成本(i, j)将一个分数分类的成本是多少Ĵ如果它的真类是一世(即。,the rows correspond to the true class and the columns correspond to the predicted class). To specify the class order for the corresponding rows and columns of成本,另外指定类名名称-值对的论点。

  • 结构小号有两个字段:S.ClassNames作为相同类型的变量包含组名ÿ,S.ClassificationCosts包含成本矩阵。

默认值是成本(I,J)= 1如果I〜= j的,成本(I,J)= 0如果我= j的

例子:'费用',结构( '类名',{{ 'B', 'G'}}, 'ClassificationCosts',[0 0.5 1 0])

数据类型:||结构

预测器变量名,指定为逗号分隔的一对组成的'PredictorNames'和唯一的名称或唯一的字符向量的单元阵列的一个字符串数组。的功能'PredictorNames'取决于所提供的训练数据的方式。

  • 如果提供Xÿ,然后你可以使用'PredictorNames'给预测变量X名。

    • 名字的顺序PredictorNames的列顺序必须对应X。那是,PredictorNames {1}X(:,1)PredictorNames {2}X(:,2), 等等。也,尺寸(X,2)元素个数(PredictorNames)必须相等。

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

  • 如果提供TBL,然后你可以使用'PredictorNames'选择在训练中使用的预测变量。那是,fitcnb只使用在预测变量PredictorNames和在训练响应变量。

    • PredictorNames一定是?的子集Tbl.Properties.VariableNames并且不能包含响应变量的名称。

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

    • 一个好的做法是使用任何训练指定预测'PredictorNames'公式只要。

例子:'PredictorNames',{ 'SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'}

数据类型:|细胞

先验概率为每个类,指定为逗号分隔的一对组成的“在此之前”并在此表中的值。

价值 描述
'经验' 类先验概率是相对类频率在ÿ
'制服' 所有类先验概率都等于1/ķ,其中ķ是的类的数量。
数字矢量 每个元素是一个类的先验概率。根据命令元素Mdl.ClassNames或使用指定的顺序类名名称-值对的论点。该软件标准化的元件,使得它们的和为1
结构

的结构小号两个字段:

  • S.ClassNames将类名作为变量的类型包含ÿ

  • S.ClassProbs包含对应的先验概率的矢量。该软件标准化的元件,使得它们的和为1

如果为两者都设置值权重之前中,权重被重新归一化,以加起来的先验概率的值在各自的类中。

例子:“前”,“均匀”

数据类型:烧焦||||结构

响应变量名,指定为逗号分隔的一对组成的'ResponseName'和字符向量或标量的字符串。

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

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

例子:'ResponseName', '响应'

数据类型:烧焦|

得分变换,指定为逗号分隔的一对组成的“ScoreTransform”和字符矢量,标量的字符串,或功能句柄。

此表总结了可用的特征向量和字符串标量。

价值 描述
'doublelogit' 1 /(1 +Ë-2X
'invlogit' 日志(X/(1 -X))
“ismax” 设置得分与得分最高的类1,并设置分数为所有其他类0
'Logit模型' 1 /(1 +Ë-X
'没有'“身份” X(无转换)
'标志' -1X< 0
0X= 0
1X> 0
“对称” 2X- 1
'symmetricismax' 将得分最高的类的得分设置为1,并将所有其他类的得分设置为-1
“symmetriclogit” 2 / (1 +Ë-X) - 1

对于MATLAB功能,或者你定义一个函数,使用它的功能句柄得分变换。功能句柄必须接受矩阵(原始分)并返回相同的尺寸(转化分数)的矩阵。

例子:'ScoreTransform', '分对数'

数据类型:烧焦||function_handle

观察权重,指定为逗号分隔的一对组成的“权重”和在正的值的数值向量或名称的变量的TBL。该软件的重量意见的每一行中XTBL与在相应的值权重。的大小权重必须等于的行数XTBL

如果您指定的输入数据表TBL, 然后权重可以为变量的名称TBL包含数字向量。在这种情况下,你必须指定权重作为字符向量或字符串标量。例如,如果权重向量w ^存储为Tbl.W,然后将其指定为' W '。否则,软件处理的所有列TBL, 包含w ^,作为预测或培训模型时的响应。

该软件规格化权重总结在相应类的先验概率的值。

默认情况下,权重那些(ñ,1),其中ñ是观测的数量XTBL

数据类型:||烧焦|

超参数优化

全部折叠

参数来优化,指定为逗号分隔的一对组成的'OptimizeHyperparameters'和以下情况之一:

  • '没有'- 不要优化。

  • '汽车'- 用{ 'DistributionNames', '宽度'}

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

  • String数组或符合条件的参数名称的单元阵列。

  • 向量的optimizableVariable对象,通常输出超参数

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

注意

'OptimizeHyperparameters'值覆盖使用其他名称-值对参数设置的任何值。例如,设置'OptimizeHyperparameters''汽车'导致'汽车'值适用。

符合条件的参数fitcnb是:

  • DistributionNames-fitcnb搜索中'正常''核心'

  • 宽度-fitcnb实际值之间的搜索,默认登录缩放范围[MinPredictorDiff / 4,MAX(MaxPredictorRange,MinPredictorDiff)]

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

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

加载fisheririsPARAMS =超参数('fitcnb',MEAS,物种);PARAMS(2).Range = [1E-2,1e2];

通过参数个数作为价值OptimizeHyperparameters

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

对于一个示例,请参见优化朴素贝叶斯分类器

例子:'汽车'

选项的优化,指定为逗号分隔对组成“HyperparameterOptimizationOptions”和结构。这种说法修改的效果OptimizeHyperparameters名称-值对的论点。在结构上所有字段都是可选的。

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

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

  • 'randomsearch'- 在搜索中随机MaxObjectiveEvaluations点。

'gridsearch'搜索以随机的顺序,使用均匀采样,而不从电网更换。优化后,可以通过使用命令获得网格顺序表sortrows (Mdl.HyperparameterOptimizationResults)

'bayesopt'
AcquisitionFunctionName

  • “预计-改善每秒加”

  • “expected-improvement”

  • “预计-改善,加上”

  • “预计-改善每秒”

  • “低信心结合”

  • “probability-of-improvement”

采集功能名称中包含每秒不会产生重复的结果,因为优化依赖于目标函数的运行时间。采集功能名称中包含+修改自己的行为时,他们过度开发的区域。有关详细信息,请参阅采集功能类型

“预计-改善每秒加”
MaxObjectiveEvaluations 目标函数评估的最大数量。 30.对于'bayesopt''randomsearch',以及整个网格'gridsearch'
MAXTIME

时间限制,指定为正实。时间限制以秒为单位,以抽搐TOC。运行时间可超过MAXTIME因为MAXTIME不会中断函数的计算。

天道酬勤
NumGridDivisions 对于'gridsearch'中,在每个维度的值的数量。该值可以是正整数给出的值的数目为每个维,或适用于所有尺寸的标量的向量。此字段分类变量忽略。 10
ShowPlots 指示是否显示图形的逻辑值。如果真正的,本场地块对迭代次数的最佳目标函数值。如果有一个或两个优化参数,如果优化'bayesopt', 然后ShowPlots并根据参数绘制目标函数的模型。 真正的
SaveIntermediateResults 逻辑值,指示何时是否保存结果优化'bayesopt'。如果真正的,该字段将重写一个名为“BayesoptResults”在每次迭代。该变量是一个BayesianOptimization目的。
详细

显示到命令行。

  • 0- 不重复显示

  • 1- 迭代显示

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

有关详细信息,请参阅bayesopt详细名称-值对的论点。

1
UseParallel 逻辑值指示是否并行运行贝叶斯优化,这需要并行计算工具箱™。由于并行定时的nonreproducibility,平行贝叶斯优化不一定得到重复的结果。有关详细信息,请参阅平行的贝叶斯优化
重新分割

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

真正的通常给出最稳健的结果,因为这种设置考虑了分区噪声。然而,为了更好的结果,真正的至少需要两倍多的功能评价。

使用不超过以下三个字段的名字之一。
CVPartition 一个cvpartition对象,如通过创建cvpartition 'Kfold',5如果你不指定任何交叉验证领域
坚持 一个范围内的标量(0,1)表示抵抗率。
Kfold 一个大于1的整数。

例子:'HyperparameterOptimizationOptions',结构( 'MaxObjectiveEvaluations',60)

数据类型:结构

输出参数

全部折叠

训练有素的朴素贝叶斯分类模型,返回为ClassificationNaiveBayes模型对象或ClassificationPartitionedModel交叉验证的模型对象。

如果你设置任何的名称 - 值对参数KFold坚持CrossVal,或CVPartition, 然后Mdl是一个ClassificationPartitionedModel交叉验证的模型对象。除此以外,Mdl是一个ClassificationNaiveBayes模型对象。

要引用的特性Mdl,使用点记号。例如,访问估计分布参数,输入Mdl.DistributionParameters

更多关于

全部折叠

一袋令牌模型

在一袋令牌模型,预测值Ĵ是的令牌出现的非负数Ĵ在此观察。在本多项模型类别(条块)的数量是不同的令牌的数量,即,预测的数目。

朴素贝叶斯

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

该算法利用贝叶斯定理,和(天真)假定预测器条件独立,给定的类。虽然假设在实践中通常侵犯,朴素贝叶斯分类往往以产生具有鲁棒性来偏置类密度估计,特别是在后为0.5(决策边界)后验分布[1]

朴素贝叶斯分类器分配观测最可能的类(在换句话说,最大后验决策规则)。明确地说,算法:

  1. 估计每类中预测的密度。

  2. 模型根据贝叶斯法则后验概率。也就是说,对于所有ķ= 1,…,ķ

    P ^ ÿ = ķ | X 1 。。 X P = π ÿ = ķ Π Ĵ = 1 P P X Ĵ | ÿ = ķ Σ ķ = 1 ķ π ÿ = ķ Π Ĵ = 1 P P X Ĵ | ÿ = ķ

    哪里:

    • ÿ是对应于一个观测值的类索引的随机变量。

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

    • π ÿ = ķ 是先验概率,一个类索引是ķ

  3. 分类通过估计用于每个类别的后验概率,然后观察分配观测到类产生最大后验概率。

如果预测器组成一个多项分布,则该后验概率 P ^ ÿ = ķ | X 1 。。 X P α π ÿ = ķ P ñ X 1 ... X P | ÿ = ķ 哪里 P ñ X 1 ... X P | ÿ = ķ 是一个多项分布的概率质量函数。

提示

  • 对于基于计数的数据,如分级一袋令牌模型中,使用多项式分布(例如,集“DistributionNames”、“锰”)。

  • 训练模式后,可以生成C / C ++代码,预测新的数据标签。生成C / C ++代码需要MATLAB编码器™。有关详细信息,请参阅介绍代码生成

算法

  • 如果您指定“DistributionNames”、“锰”当训练Mdl运用fitcnb,那么软件配合使用多项分布一袋令牌模型。该软件商店的概率是令牌Ĵ出现在课堂上ķ在属性DistributionParameters {ķĴ}。使用添加剂平滑[2],估计概率为

    P 令牌 Ĵ | ķ = 1 + C Ĵ | ķ P + C ķ

    哪里:

    • C Ĵ | ķ = ñ ķ Σ 一世 ÿ 一世 ķ X 一世 Ĵ w ^ 一世 Σ 一世 ÿ 一世 ķ w ^ 一世 ; 这是令牌出现的加权数Ĵ在班上ķ

    • ñķ是在类的观测数ķ

    • w ^ 一世 是用于观察的重量一世。软件对一个类内的权重进行规范化,这样它们的和就等于这个类的先验概率。

    • C ķ = Σ Ĵ = 1 P C Ĵ | ķ ; 这是在类中的所有令牌出现的总加权数ķ

  • 如果您指定'DistributionNames', 'mvmn'当训练Mdl运用fitcnb, 然后:

    1. 对于每一个预测,该软件收集了独特级别的列表,存储在排序列表CategoricalLevels,并认为每级的Bin。每个预测器/类的组合是分离的,独立多项随机变量。

    2. 为预测Ĵ在班上ķ使用列表中的每个分类级别的软件计数实例存储在CategoricalLevels {Ĵ}

    3. 该软件存储该预测的概率Ĵ, 在班上ķ,有水平大号在属性DistributionParameters {ķĴ},在各级CategoricalLevels {Ĵ}。使用添加剂平滑[2],估计概率为

      P 预报器 Ĵ = 大号 | ķ = 1 + Ĵ | ķ 大号 Ĵ + ķ

      哪里:

      • Ĵ | ķ 大号 = ñ ķ Σ 一世 ÿ 一世 ķ 一世 { X 一世 Ĵ = 大号 } w ^ 一世 Σ 一世 ÿ 一世 ķ w ^ 一世 ; 哪个是针对哪个预测器的观测值的加权数Ĵ=大号在班上ķ

      • ñķ是在类的观测数ķ

      • 一世 { X 一世 Ĵ = 大号 } = 1 如果Xij=大号,否则为0。

      • w ^ 一世 是用于观察的重量一世。软件对一个类内的权重进行规范化,这样它们的和就等于这个类的先验概率。

      • Ĵ在预测器不同的电平的数量Ĵ

      • ķ是在类观测的加权数ķ

参考

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

[2]曼宁,C.D。,P.拉加,和M.Schütze。现代信息检索纽约州:剑桥大学出版社,2008年。

扩展功能

介绍了在R2014b