预测
预测线性分类模型的标签
描述
输入参数
Mdl
- - - - - -二元线性分类模型
ClassificationLinear
模型对象
二进制,线性分类模型,指定为ClassificationLinear
模型对象。您可以创建ClassificationLinear
使用模型对象fitclinear
.
X
- - - - - -预测数据要分类
全数值矩阵|稀疏数值矩阵|表格
要分类的预测器数据,指定为完整或稀疏的数字矩阵或表格。
默认情况下,每一行X
对应一个观察结果,每一列对应一个变量。
对于数值矩阵:
列中的变量
X
必须与训练的预测变量有相同的顺序Mdl
.如果你训练
Mdl
使用表格(例如,资源描述
),资源描述
那么,只包含数值预测变量X
可以是数值矩阵。处理中的数值预测器资源描述
作为分类的训练,识别分类预测因子使用CategoricalPredictors
的名称-值对参数fitclinear
.如果资源描述
包含异构预测变量(例如,数字和分类数据类型)和X
是数字矩阵吗预测
抛出错误。
对于表格:
预测
不支持多列变量或除金宝app字符向量的单元格数组外的单元格数组。如果你训练
Mdl
使用表格(例如,资源描述
),然后输入所有预测变量X
必须具有与训练的变量相同的变量名和数据类型Mdl
(存储在Mdl。PredictorNames
).的列序X
是否需要对应的列顺序资源描述
.同时,资源描述
而且X
可以包含额外的变量(响应变量、观察权重等),但是预测
忽略了它们。如果你训练
Mdl
使用一个数字矩阵,然后预测器名称在Mdl。PredictorNames
必须与中对应的预测变量名称相同X
.若要在训练期间指定预测器名称,请使用PredictorNames
的名称-值对参数fitclinear
.所有预测变量X
必须是数值向量。X
可以包含额外的变量(响应变量、观察权重等),但是预测
忽略了它们。
请注意
如果你定位你的预测矩阵,使观察结果与列相对应,并指定“ObservationsIn”、“列”
,那么优化执行时间可能会显著减少。你不能指定“ObservationsIn”、“列”
用于表中的预测器数据。
数据类型:表格
|双
|单
维
- - - - - -预测器数据观测维数
“行”
(默认)|“列”
预测器数据观测维数,指定为“列”
或“行”
.
请注意
如果你定位你的预测矩阵,使观察结果与列相对应,并指定“ObservationsIn”、“列”
,那么优化执行时间可能会显著减少。你不能指定“ObservationsIn”、“列”
用于表中的预测器数据。
输出参数
标签
-预测船级标签
分类数组|字符数组|逻辑矩阵|数字矩阵|字符向量单元数组
例子
预测训练样本标签
加载NLP数据集。
负载nlpdata
X
是一个稀疏矩阵的预测数据,和Y
是类标签的分类向量。数据中有两个以上的类。
这些模型应该识别网页中的字数是否来自统计和机器学习工具箱™文档。因此,确定与统计和机器学习工具箱™文档网页对应的标签。
Ystats = Y ==“统计数据”;
使用整个数据集训练一个二进制线性分类模型,它可以识别文档网页中的字数是否来自统计和机器学习工具箱™文档。
rng (1);%用于再现性Mdl = fitclinear(X,Ystats);
Mdl
是一个ClassificationLinear
模型。
预测训练样本,或再替换,标签。
label = predict(Mdl,X);
因为有一个正则化的强度Mdl
,标签
是列向量,其长度等于观测值的个数。
构造一个混淆矩阵。
confusitrain = confusichart (Ystats,label);
该模型只错分类了一个“统计数据”
文档页面在“统计和机器学习工具箱”文档之外。
预测测试样本标签
加载NLP数据集并对其进行预处理,如预测训练样本标签.转置预测器数据矩阵。
负载nlpdataYstats = Y ==“统计数据”;X = X';
训练一个二进制线性分类模型,可以识别文档网页中的字数是否来自统计和机器学习工具箱™文档。指定保留30%的观察结果。利用SpaRSA对目标函数进行优化。
rng (1)%用于再现性CVMdl = fitclinear(X,Ystats,“规划求解”,“sparsa”,“坚持”, 0.30,...“ObservationsIn”,“列”);Mdl = cvmdl .训练{1};
CVMdl
是一个ClassificationPartitionedLinear
模型。它包含属性训练有素的
,这是一个1乘1单元格数组,包含一个ClassificationLinear
软件使用训练集训练的模型。
从分区定义中提取训练和测试数据。
trainIdx = training(CVMdl.Partition);testdx = test(CVMdl.Partition);
预测训练样本和测试样本标签。
labelTrain = predict(Mdl,X(:,trainIdx),“ObservationsIn”,“列”);labelTest =预测(Mdl,X(:, testdx),“ObservationsIn”,“列”);
因为有一个正则化的强度Mdl
,labelTrain
而且labelTest
分别为长度等于训练观察数和测试观察数的列向量。
为训练数据构造一个混淆矩阵。
confusitrain = confusichart (Ystats(trainIdx),labelTrain);
该模型只错误地将三个文档页面分类为统计和机器学习工具箱文档之外的页面。
为测试数据构造一个混淆矩阵。
confusitest = confusichart (Ystats(testdx),labelTest);
该模型错误地将三个文档页面分类为统计和机器学习工具箱之外的页面,并将两个页面分类为内部的页面。
估计后验类别概率
估计测试样本,后验类概率,并通过绘制接受者工作特征(ROC)曲线来确定模型的质量。线性分类模型只返回逻辑回归学习者的后验概率。
加载NLP数据集并对其进行预处理,如预测测试样本标签.
负载nlpdataYstats = Y ==“统计数据”;X = X';
通过指定30%的保留样本,将数据随机划分为训练集和测试集。识别测试集索引。
cvp = cvpartition(Ystats,“坚持”, 0.30);idxTest = test(cvp);
训练一个二元线性分类模型。使用SpaRSA拟合逻辑回归学习器。要获得测试集,请指定分区模型。
CVMdl = fitclinear(X,Ystats,“ObservationsIn”,“列”,“CVPartition”、本量利、...“学习者”,“物流”,“规划求解”,“sparsa”);Mdl = cvmdl .训练{1};
Mdl
是一个ClassificationLinear
使用分区中指定的训练集训练的模型本量利
只有。
预测测试样本的后验类概率。
[~,posterior] = predict(Mdl,X(:,idxTest),“ObservationsIn”,“列”);
因为有一个正则化的强度Mdl
,后
是一个矩阵,有2列和2行,等于测试集观测值的数量。列我包含后验概率Mdl.ClassNames(我)
给定一个特定的观察结果。
计算ROC曲线的性能指标(真阳性率和假阳性率),并通过创建的方法找到ROC曲线下的面积(AUC)值rocmetrics
对象。
rocObj = rocmetrics(Ystats(idxTest),后部,Mdl.ClassNames);
绘制第二类的ROC曲线情节
的函数rocmetrics
.
情节(rocObj一会= Mdl.ClassNames (2))
ROC曲线表明,该模型对测试样本观测值进行了近乎完美的分类。
使用AUC找到好的套索惩罚
为了确定使用逻辑回归学习器的线性分类模型的良好套索惩罚强度,比较AUC的测试样本值。
加载NLP数据集。预处理数据,如预测测试样本标签.
负载nlpdataYstats = Y ==“统计数据”;X = X';
创建一个数据分区,指定保留10%的观察结果。提取测试样本指数。
rng (10);%用于再现性分区= cvpartition(Ystats,“坚持”, 0.10);testdx = test(分区);XTest = X(:, testdx);n = sum(testdx)
N = 3157
YTest = Ystats(testdx);
在测试样本中有3157个观察值。
创建一组11个对数间隔的正则化强度 通过 .
Lambda = logspace(-6,-0.5,11);
训练使用每种正则化强度的二元线性分类模型。利用SpaRSA对目标函数进行优化。将目标函数的梯度公差降低到1 e-8
.
CVMdl = fitclinear(X,Ystats,“ObservationsIn”,“列”,...“CVPartition”分区,“学习者”,“物流”,“规划求解”,“sparsa”,...“正规化”,“套索”,“λ”λ,“GradientTolerance”1 e-8)
CVMdl = ClassificationPartitionedLinear CrossValidatedModel: 'Linear' ResponseName: 'Y' NumObservations: 31572 KFold: 1 Partition: [1x1 cvpartition] ClassNames: [0 1] ScoreTransform: 'none'属性,方法
提取训练好的线性分类模型。
Mdl1 = CVMdl。训练有素的{1}
Mdl1 = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'logit' Beta: [34023x11 double]偏差:[-11.9079 -11.9079 -11.9079 -9.3362 -6.4290…[Lambda: [1.0000e-06 3.5481e-06 1.2589e-05 4.4668e-05…]学习者:“逻辑”属性,方法
Mdl
是一个ClassificationLinear
模型对象。因为λ
是一个正则化强度序列,你能想到吗Mdl
作为11个模型,每个模型中的正则化强度为1λ
.
估计测试样本的预测标签和后验类概率。
[label,posterior] = predict(Mdl1,XTest,“ObservationsIn”,“列”);Mdl1.ClassNames;后(3、1、5)
Ans = 1.0000
标签
是一个3157 × 11的预测标签矩阵。每一列对应于使用相应的正则化强度训练的模型的预测标签。后
是一个3157 × 2 × 11的后验类别概率矩阵。列对应类,页对应正则化强度。例如,后(3、1、5)
表示第一类(标签)的后验概率0
)由所使用的模型分配到观测3λ(5)
作为正则化强度是1.0000。
对于每个模型,通过使用计算AUCrocmetrics
.
auc = 1:数字(Lambda);%预先配置为j = 1:数字(Lambda) rocObj = rocmetrics(YTest,后验(:,:,j),Mdl1.ClassNames);auc(j) = rocObj.AUC(1);结束
较高的值λ
导致预测变量稀疏性,这是分类器的一个很好的特性。对于每个正则化强度,使用整个数据集和训练模型时相同的选项训练线性分类模型。确定每个模型的非零系数的数量。
Mdl = fitclinear(X,Ystats,“ObservationsIn”,“列”,...“学习者”,“物流”,“规划求解”,“sparsa”,“正规化”,“套索”,...“λ”λ,“GradientTolerance”1 e-8);numNZCoeff = sum(Mdl.Beta~=0);
在同一图中,绘制每个正则化强度的测试样本错误率和非零系数的频率。在对数尺度上画出所有变量。
图yyaxis左情节(log10(λ)log10 (auc),“啊——”) ylabel (“log_ {10} AUC的) yyaxis正确的plot(log10(Lambda),log10(numNZCoeff + 1),“啊——”) ylabel ('log_{10}非零系数频率')包含(“log_{10}λ的)标题(测试样本统计的)举行从
选择正则化强度指数,以平衡预测变量稀疏性和高AUC。在本例中,为之间的值 来 应该足够了。
idxFinal = 9;
从Mdl
用所选的正则化强度。
MdlFinal = selectModels(Mdl,idxFinal);
MdlFinal
是一个ClassificationLinear
包含一个正则化强度的模型。要估计新观测值的标签,请通过MdlFinal
新的数据预测
.
更多关于
分类分
对于线性分类模型,原始的分类分对观测进行分类x,一个行向量,转化为正类定义为
对于具有正则化强度的模型j,
估计的列向量的系数(模型属性β(:,j)
),
估计的标量偏差(模型属性偏见(j)
).
用于分类的原始分类分数x进入负类的是-f(x).该软件将观察结果分为产生正分的类别。
如果线性分类模型由逻辑回归学习器组成,则该软件应用分对数的
分数转换为原始分类分数(见ScoreTransform
).
扩展功能
高大的数组
使用行数超过内存容量的数组进行计算。
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
您可以为两者生成C/ c++代码
预测
而且更新
通过使用编码器配置器。或者,只生成用于的代码预测
通过使用saveLearnerForCoder
,loadLearnerForCoder
,codegen
.代码生成
预测
而且更新
创建一个编码器配置learnerCoderConfigurer
然后通过使用生成代码generateCode
.然后,您可以在生成的代码中更新模型参数,而不必重新生成代码。代码生成
预测
-通过使用保存一个训练好的模型saveLearnerForCoder
.定义一个入口点函数,该函数通过loadLearnerForCoder
并调用预测
函数。然后使用codegen
(MATLAB编码器)为入口点函数生成代码。
生成单精度C/ c++代码
预测
,指定名称-值参数“数据类型”、“单身”
当你打电话给loadLearnerForCoder
函数。该表包含关于的参数的注释
预测
.完全支持不包括在本表中的参数。金宝app论点 注意事项和限制 Mdl
有关模型对象的使用说明和限制,请参见代码生成的
ClassificationLinear
对象。X
对于一般代码生成,
X
必须是单精度或双精度矩阵或包含数值变量、类别变量或两者的表。在编码器配置工作流程中,
X
必须是单精度或双精度矩阵。的观测数
X
大小可以是变量,但变量的数量呢X
必须修复。如果你想指定
X
作为一个表,那么你的模型必须使用一个表来训练,你的预测入口点函数必须做到以下几点:接受数据作为数组。
根据数据输入参数创建一个表,并在表中指定变量名。
把桌子递给
预测
.
有关此表工作流的示例,请参见生成代码对表中的数据进行分类.有关在代码生成中使用表的详细信息,请参见表的代码生成(MATLAB编码器)而且代码生成的表限制(MATLAB编码器).
名-值对参数 名称-值参数中的名称必须是编译时常量。
的值。
“ObservationsIn”
名称-值对参数必须是编译时常量。例如,使用“ObservationsIn”、“列”
所生成代码中的名称-值对参数,包括{coder.Constant(“ObservationsIn”),coder.Constant(列)}
在arg游戏
的价值codegen
(MATLAB编码器).
有关更多信息,请参见代码生成简介.
版本历史
在R2016a中引入
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。