fitcnb
训练多类朴素贝叶斯模型
语法
描述
返回一个多类朴素贝叶斯模型(Mdl
= fitcnb (资源描述
,ResponseVarName
)Mdl
),由表中的预测器训练资源描述
和类标签中的变量资源描述。ResponseVarName
.
例子
训练一个朴素贝叶斯分类器
载入费雪的虹膜数据集。
负载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”)举行从
可以使用名称-值对参数更改默认分布“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);
元素(j,k)表示软件分类为的观察数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);
基于混淆矩阵,两个分类器在训练样本中表现相似。
使用交叉验证比较分类器
载入费雪的虹膜数据集。
负载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 |
__________________________________________________________ 优化完成。最大目标:达到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
.中的响应变量的长度和行数资源描述
必须是相等的。
公式
- - - - - -响应变量和预测变量子集的解释模型
特征向量|字符串标量
响应变量和预测变量子集的解释模型,在形式中指定为字符向量或字符串标量“Y ~ x1 + x2 + x3”
.在这种形式,Y
表示响应变量,和x1
,x2
,x3
表示预测变量。
中指定变量的子集资源描述
使用公式作为训练模型的预测因子。如果您指定了一个公式,那么该软件将不使用任何变量资源描述
没有出现在公式
.
公式中的变量名必须是资源描述
(Tbl.Properties.VariableNames
)和有效的MATLAB®标识符。中的变量名可以进行验证资源描述
通过使用isvarname
函数。如果变量名无效,则可以使用matlab.lang.makeValidName
函数。
数据类型:字符
|字符串
Y
- - - - - -类标签
分类数组|字符数组|字符串数组|逻辑向量|数值向量|字符向量的单元格数组
朴素贝叶斯分类器训练到的类标签,指定为类别、字符或字符串数组、逻辑或数字向量或字符向量的单元格数组。的每个元素Y
的对应行的类成员X
.Y
支持K类的水平。
如果Y
是字符数组,则每一行必须对应一个类标签。
的长度Y
的行数X
必须是等价的。
数据类型:分类
|字符
|字符串
|逻辑
|单
|双
|细胞
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”
名称-值参数。
DistributionNames
- - - - - -数据分布
“内核”
|“锰”
|“mvmn”
|“正常”
|字符串数组|字符向量的单元格数组
数据分布fitcnb
用于对数据建模,指定为逗号分隔的对,由“DistributionNames”
以及字符向量或字符串标量、字符串数组或包含此表中的值的字符向量的单元格数组。
价值 | 描述 |
---|---|
“内核” |
核平滑密度估计。 |
“锰” |
多项分布。如果您指定锰 ,则所有特征都是多项式分布的分量。因此,您不能包含“锰” 作为字符串数组或字符向量单元格数组的元素。有关详细信息,请参见算法. |
“mvmn” |
多元多项式分布。有关详细信息,请参见算法. |
“正常” |
正态(高斯)分布。 |
如果指定一个字符向量或字符串标量,那么软件将使用该分布对所有特性建模。如果指定1 × -P字符串数组或单元格数组的字符向量,则软件模型的特征j使用元素中的分布j的数组。
默认情况下,该软件将所有指定为类别预测器的预测器(使用CategoricalPredictors
名称-值对参数)到“mvmn”
.否则,默认分布为“正常”
.
必须指定至少一个预测器具有分布“内核”
另外指定内核
,支持
,或宽度
.
例子:“DistributionNames”、“锰”
例子:DistributionNames,{“内核”、“正常”、“内核”}
内核
- - - - - -内核流畅的类型
“正常”
(默认)|“盒子”
|“epanechnikov”
|“三角形”
|字符串数组|字符向量的单元格数组
内核平滑器类型,指定为逗号分隔的对,由“内核”
以及字符向量或字符串标量、字符串数组或字符向量的单元格数组。
下表总结了设置内核平滑密度区域的可用选项。让我{u}表示指示函数。
价值 | 内核 | 公式 |
---|---|---|
“盒子” |
框(统一) |
|
“epanechnikov” |
Epanechnikov |
|
“正常” |
高斯 |
|
“三角形” |
三角 |
|
如果指定1 × -P字符串数组或单元格数组,数组的每个元素包含表中的任何值,然后软件使用元素中的内核平滑类型训练分类器j为特征j在X
.软件忽略的元素内核
不对应于其分布为的预测器“内核”
.
必须指定至少一个预测器具有分布“内核”
另外指定内核
,支持
,或宽度
.
例子:“内核”,{“epanechnikov”、“正常”}
支持
- - - - - -内核平滑密度支持
“无限”
(默认)|“积极”
|字符串数组|单元阵列|数字行向量
内核平滑密度支持,指定为逗号分隔的对,由“支持”
而且“积极”
,“无限”
、字符串数组、单元格数组或数字行向量。软件将核平滑密度应用到指定区域。
下表总结了设置内核平滑密度区域的可用选项。
价值 | 描述 |
---|---|
1 × 2的数字行向量 | 例如,(L U) ,在那里l 而且U 分别为密度支撑的有限下界和上界。 |
“积极” |
密度支持均为正实值。 |
“无限” |
密度支持都是实数。 |
如果指定1 × -P字符串数组或单元格数组,字符串数组中的每个元素包含表中的任何文本值,单元格数组中的每个元素包含表中的任何值,然后软件使用元素中的内核支持训练分类器j为特征j在X
.软件忽略的元素内核
不对应于其分布为的预测器“内核”
.
必须指定至少一个预测器具有分布“内核”
另外指定内核
,支持
,或宽度
.
例子:KSSupport,{[-10, 20],“无界”}
数据类型:字符
|字符串
|细胞
|双
宽度
- - - - - -核平滑窗口宽度
数值矩阵|数字列向量|数字行向量|标量
内核平滑窗口宽度,指定为逗号分隔的对,由“宽度”
和数值矩阵,数值列向量,数值行向量,或标量。
假设有K类级别和P预测因子。下表总结了设置内核平滑窗口宽度的可用选项。
价值 | 描述 |
---|---|
K——- - - - - -P数值矩阵 | 元素(j k,)指定预测器的宽度j在课堂上k. |
K-by-1数值列向量 | 元素k指定类中所有预测器的宽度k. |
1 -P数字行向量 | 元素j为预测器指定所有类级别的宽度j. |
标量 | 指定所有类中所有特性的带宽。 |
默认情况下,该软件通过使用高斯分布的最优值,为每种预测器和类的组合自动选择默认宽度。如果您指定宽度
,它包含南
S,然后软件选择宽度的元素包含南
年代。
必须指定至少一个预测器具有分布“内核”
另外指定内核
,支持
,或宽度
.
例子:“宽度”,南南
数据类型:双
|结构体
CVPartition
- - - - - -交叉验证分区
[]
(默认)|cvpartition
分区对象
交叉验证分区,指定为cvpartition
创建的分区对象cvpartition
.分区对象指定交叉验证的类型以及训练集和验证集的索引。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:假设您创建一个随机分区,对500个观察结果进行5次交叉验证本量利= cvpartition(500年,“KFold”,5)
.然后,您可以使用指定交叉验证的模型“CVPartition”,本量利
.
坚持
- - - - - -保留验证的部分数据
(0,1)范围内的标量值
用于抵制验证的数据的一部分,指定为范围(0,1)中的标量值。如果您指定‘坚持’,p
,然后软件完成以下步骤:
随机选择和保留
p * 100
%的数据作为验证数据,并使用其余的数据训练模型。存储紧凑的,训练过的模型
训练有素的
属性的交叉验证模型。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“坚持”,0.1
数据类型:双
|单
KFold
- - - - - -数量的折叠
10
(默认)|大于1的正整数
交叉验证模型中使用的折叠数,指定为大于1的正整数。如果您指定KFold, k
,然后软件完成以下步骤:
将数据随机划分为
k
集。对于每个集合,保留该集合作为验证数据,并使用另一个集合训练模型
k
- 1集。存储
k
紧凑,训练有素的模型k
中的-by-1单元格向量训练有素的
属性的交叉验证模型。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“KFold”,5
数据类型:单
|双
Leaveout
- - - - - -分析交叉验证标志
“关闭”
(默认)|“上”
保留一个交叉验证标志,指定为“上”
或“关闭”
.如果您指定“Leaveout”,“上”
,那么对于每一个n观察(n是否指定了观察数(不包括遗漏的观察数)NumObservations
属性),软件完成以下步骤:
保留一个观察结果作为验证数据,并使用另一个来训练模型n- 1的观察。
存储n紧凑,训练有素的模型n中的-by-1单元格向量
训练有素的
属性的交叉验证模型。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“Leaveout”,“上”
CategoricalPredictors
- - - - - -分类预测列表
正整数向量|逻辑向量|字符矩阵|字符串数组|字符向量的单元格数组|“所有”
类别预测器列表,指定为此表中的值之一。
价值 | 描述 |
---|---|
正整数向量 | 向量中的每个条目都是一个索引值,指示对应的预测器是分类的。索引值在1和之间 如果 |
逻辑向量 | 一个 |
字符矩阵 | 矩阵的每一行都是一个预测变量的名称。中的条目名称必须匹配PredictorNames .用额外的空格填充名字,这样字符矩阵的每一行都有相同的长度。 |
字符向量的字符串数组或单元格数组 | 数组中的每个元素都是一个预测变量的名称。中的条目名称必须匹配PredictorNames . |
“所有” |
所有的预测都是绝对的。 |
默认情况下,如果预测器数据在表中(资源描述
),fitcnb
如果变量是逻辑向量、分类向量、字符数组、字符串数组或字符向量的单元格数组,则假定该变量是分类的。如果预测器数据是一个矩阵(X
),fitcnb
假设所有的预测器都是连续的。要将任何其他预测器标识为类别预测器,请使用CategoricalPredictors
名称-值参数。
对于已识别的类别预测因子,fitcnb
使用多元多项式分布。有关详细信息,请参见DistributionNames
而且算法.
例子:“CategoricalPredictors”、“所有”
数据类型:单
|双
|逻辑
|字符
|字符串
|细胞
一会
- - - - - -用于培训的类的名称
分类数组|字符数组|字符串数组|逻辑向量|数值向量|字符向量的单元格数组
用于训练的类的名称,指定为类别、字符或字符串数组;逻辑向量:逻辑或数字向量;或者字符向量的单元格数组。一会
必须具有与响应变量相同的数据类型资源描述
或Y
.
如果一会
是字符数组,则每个元素必须对应于数组的一行。
使用一会
:
在培训期间指定类的顺序。
指定与类顺序对应的任何输入或输出参数维度的顺序。例如,使用
一会
指定…尺寸的顺序成本
返回的分类分数的列顺序预测
.选择培训类的一个子集。例如,假设所有不同的类名的集合
Y
是(“a”、“b”、“c”)
.使用类的观察来训练模型“一个”
而且“c”
只是,指定“类名”,(“a”、“c”)
.
的默认值。一会
响应变量中所有不同的类名的集合是否在资源描述
或Y
.
例子:“类名”,(“b”,“g”)
数据类型:分类
|字符
|字符串
|逻辑
|单
|双
|细胞
成本
- - - - - -成本的错误分类
方阵|结构
点分类错误的代价,指定为逗号分隔的对,由“成本”
和以下其中之一:
默认值是成本(i, j) = 1
如果我~ = j
,成本(i, j) = 0
如果我=我
.
例子:“成本”,结构(“类名”,{{' b ', ' g '}},“ClassificationCosts”,[0 0.5;1 0])
数据类型:单
|双
|结构体
PredictorNames
- - - - - -预测变量的名字
唯一名称的字符串数组|唯一字符向量的单元格数组
预测器变量名,指定为惟一名称的字符串数组或惟一字符向量的单元格数组。的功能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 . |
结构 | 一个结构
|
如果为两者设置值权重
而且之前
,将权重重新规格化,使其相加等于各自类中的先验概率值。
例子:“前”、“制服”
数据类型:字符
|字符串
|单
|双
|结构体
ResponseName
- - - - - -响应变量名
“Y”
(默认)|特征向量|字符串标量
响应变量名,指定为字符向量或字符串标量。
如果你提供
Y
,然后你可以使用ResponseName
为响应变量指定名称。如果你提供
ResponseVarName
或公式
,那么你就不能使用ResponseName
.
例子:“ResponseName”、“反应”
数据类型:字符
|字符串
ScoreTransform
- - - - - -分数转换
“没有”
(默认)|“doublelogit”
|“invlogit”
|“ismax”
|“分对数”
|函数处理|……
分数转换,指定为字符向量、字符串标量或函数句柄。
这个表总结了可用的字符向量和字符串标量。
价值 | 描述 |
---|---|
“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
权重
- - - - - -观察权重
正数值的数值向量|变量的名称资源描述
OptimizeHyperparameters
- - - - - -参数优化
“没有”
(默认)|“汽车”
|“所有”
|合格参数名称的字符串数组或单元格数组|向量的optimizableVariable
对象
参数要优化,指定为逗号分隔的对,由“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”
名称-值参数。
示例请参见优化朴素贝叶斯分类器.
例子:“汽车”
HyperparameterOptimizationOptions
- - - - - -选择优化
结构
优化选项,指定为结构。的效果OptimizeHyperparameters
名称-值参数。结构中的所有字段都是可选的。
字段名 | 值 | 默认的 |
---|---|---|
优化器 |
|
“bayesopt” |
AcquisitionFunctionName |
获取函数,其名称包括 |
“expected-improvement-per-second-plus” |
MaxObjectiveEvaluations |
目标函数评价的最大次数。 | 30. 为“bayesopt” 而且“randomsearch” ,和整个网格“gridsearch” |
MaxTime |
时间限制,指定为正实标量。时间限制以秒为单位,用 |
正 |
NumGridDivisions |
为“gridsearch” ,表示每个维度的值的个数。该值可以是一个给出每个维度值数量的正整数向量,也可以是一个适用于所有维度的标量。对于类别变量,该字段将被忽略。 |
10 |
ShowPlots |
指示是否显示图形的逻辑值。如果真正的 ,该字段根据迭代次数绘制最佳观测目标函数值。如果你使用贝叶斯优化(优化器 是“bayesopt” ),则该字段也绘制出最佳估计的目标函数值。最佳观测目标函数值和最佳估计目标函数值对应于BestSoFar(观察) 而且BestSoFar (estim)。 列的迭代显示,分别。您可以在属性中找到这些值ObjectiveMinimumTrace 而且EstimatedObjectiveMinimumTrace 的Mdl。HyperparameterOptimizationResults .如果问题包含一个或两个优化参数的贝叶斯优化,那么ShowPlots 并根据参数绘制了目标函数模型。 |
真正的 |
SaveIntermediateResults |
指示何时是否保存结果的逻辑值优化器 是“bayesopt” .如果真正的 ,该字段将覆盖名为“BayesoptResults” 在每一个迭代。变量是aBayesianOptimization 对象。 |
假 |
详细的 |
在命令行显示:
详细信息请参见 |
1 |
UseParallel |
指示是否并行运行贝叶斯优化的逻辑值,这需要并行计算工具箱™。由于并行时序的不可再现性,并行贝叶斯优化不一定产生可再现的结果。有关详细信息,请参见平行的贝叶斯优化. | 假 |
重新分区 |
指示是否在每次迭代时重新划分交叉验证的逻辑值。如果这个字段是 设置 |
假 |
只使用以下三个选项中的一个。 | ||
CVPartition |
一个cvpartition 对象,如由cvpartition |
“Kfold”,5 如果不指定交叉验证字段 |
坚持 |
范围内的标量(0,1) 表示抵制分数 |
|
Kfold |
大于1的整数 |
例子:“HyperparameterOptimizationOptions”、结构(MaxObjectiveEvaluations, 60)
数据类型:结构体
输出参数
Mdl
-训练朴素贝叶斯分类模型
ClassificationNaiveBayes
模型对象|ClassificationPartitionedModel
旨在模型对象
训练朴素贝叶斯分类模型,返回为ClassificationNaiveBayes
模型对象或ClassificationPartitionedModel
旨在模型对象。
如果设置任何名称-值对参数KFold
,坚持
,CrossVal
,或CVPartition
,然后Mdl
是一个ClassificationPartitionedModel
旨在模型对象。否则,Mdl
是一个ClassificationNaiveBayes
模型对象。
的属性来引用Mdl
,使用点表示法。例如,要访问估计的分布参数,输入Mdl。DistributionParameters
.
更多关于
Bag-of-Tokens模型
在令牌袋模型中,预测器的值j令牌出现的非负次数j在观察。多项模型中类别(箱)的数量是不同标记的数量(预测器的数量)。
朴素贝叶斯
朴素贝叶斯是一种对数据应用密度估计的分类算法。
该算法利用贝叶斯定理,并(天真地)假设预测器在给定类的条件下是独立的。尽管在实践中通常会违背假设,朴素贝叶斯分类器倾向于产生对有偏差类密度估计稳健的后验分布,特别是当后验为0.5(决策边界)时。[1].
朴素贝叶斯分类器将观察值分配给最可能的类(换句话说,即最大后验决策规则)。显式地,该算法执行以下步骤:
估计每个类内预测因子的密度。
根据贝叶斯规则建立后验概率模型。也就是说,对所有人来说k= 1,…,K,
地点:
Y是一个观察值的类索引对应的随机变量。
X1、……XP是观察结果的随机预测。
类索引的先验概率是多少k.
通过估计每个类别的后验概率对观察结果进行分类,然后将观察结果分配给产生最大后验概率的类别。
如果预测因子构成一个多项分布,则后验概率 在哪里 是多项分布的概率质量函数。
提示
用于对基于计数的数据进行分类,例如bag-of-tokens模型,使用多项分布(如集合
“DistributionNames”、“锰”
).在训练一个模型之后,您可以生成预测新数据标签的C/ c++代码。生成C/ c++代码需要MATLAB编码器™.有关详细信息,请参见代码生成简介.
算法
如果预测变量
j
具有条件正态分布(见DistributionNames
(名称-值参数),软件通过计算特定类别的加权平均值和加权标准差的无偏估计来拟合数据的分布。为每一个类k:预测器的加权平均值j是
在哪里w我重量是用来观察的吗我.该软件将类中的权重规范化,使其之和为该类的先验概率。
预测器加权标准差的无偏估计量j是
在哪里z1 |k是类内权重的总和吗k而且z2 |k是类内权重的平方和吗k.
如果所有的预测变量组成一个条件多项分布(你指定
“DistributionNames”、“锰”
),该软件适合分布使用bag-of-tokens模型.软件存储该token的概率j
出现在课堂上k
在房地产DistributionParameters {
.使用添加剂平滑[2],估计概率为k
,j
}地点:
令牌出现的加权次数是多少j在课堂上k.
nk是课堂上观察的次数吗k.
重量是用来观察的吗我.该软件将类中的权重规范化,使其之和为该类的先验概率。
类中所有令牌出现的总加权次数是多少k.
如果预测变量
j
具有条件多元多项式分布:该软件收集的唯一级别的列表,存储在排序的列表
CategoricalLevels
,并将每一层视为一个箱子。每个预测因子/类别组合都是一个独立的多项随机变量。为每一个类
k
,该软件使用存储在中的列表来统计每个分类级别的实例CategoricalLevels {
.j
}软件存储预测器的概率
j
在课堂上,k
,水平l在房地产DistributionParameters {
,适用于所有级别k
,j
}CategoricalLevels {
.使用添加剂平滑[2],估计概率为j
}地点:
哪个预测器的加权观察数是多少j=l在课堂上k.
nk是课堂上观察的次数吗k.
如果xij=l,否则为0。
重量是用来观察的吗我.该软件将类中的权重规范化,使其之和为该类的先验概率。
米j不同水平的数量是预测指标吗j.
米k课堂上观察的次数是加权的吗k.
如果指定
成本
,之前
,权重
参数时,输出模型对象将指定的值存储在成本
,之前
,W
属性,分别。的成本
属性存储用户指定的成本矩阵(C)。的之前
而且W
属性分别存储归一化后的先验概率和观测权值。有关详细信息,请参见错误分类成本矩阵,先验概率和观察权重.该软件使用
成本
属性用于预测,而不是训练。因此,成本
不是只读;您可以在创建训练过的模型后使用点表示法更改属性值。
参考文献
[1]哈斯蒂,T., R.蒂布希拉尼,J.弗里德曼。统计学习的要素,第二版。纽约:施普林格,2008年。
[2]曼宁,克里斯托弗·D,普拉巴卡尔·拉加万,辛里奇Schütze。信息检索导论纽约:剑桥大学出版社,2008。
扩展功能
高大的数组
使用行数超过内存容量的数组进行计算。
此函数支持高数组,但有以下限制:
支持的语法是:
Mdl = fitcnb(资源描述,Y)
Mdl = fitcnb (X, Y)
Mdl = fitcnb(___、名称、值)
不支持与内核密度、交叉验证和超参数优化相关的选项。支持的名称-值对参数是:
“DistributionNames”
- - - - - -“内核”
值不支持。“CategoricalPredictors”
“成本”
“PredictorNames”
“之前”
“ResponseName”
“ScoreTransform”
“重量”
- Value必须是一个高数组。
有关更多信息,请参见用于内存不足数据的高数组.
自动并行支持
通过使用并行计算工具箱™自动并行运行计算来加速代码。
要执行并行超参数优化,请使用“HyperparameterOptimizationOptions”、结构(UseParallel,真的)
类调用中的名称-值参数fitcnb
函数。
有关并行超参数优化的更多信息,请参见平行的贝叶斯优化.
有关并行计算的一般信息,请参见运行MATLAB函数与自动并行支持(并行计算工具箱).
版本历史
介绍了R2014b
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。