主要内容

预测

利用神经网络分类器对观测数据进行分类

    描述

    例子

    标签=预测(MdlX返回表或矩阵中预测器数据的预测类标签X利用训练好的神经网络分类模型Mdl

    标签=预测(MdlX“ObservationsIn”,指定预测器数据观测维度“行”(默认)或“列”.例如,指定“ObservationsIn”、“列”表示预测数据中的列与观测值相对应。

    例子

    标签分数预测,预测___也返回的矩阵分类的分数使用前面语法中的任何输入参数组合,指示标签来自特定类的可能性。对于每一个观察X,预测的班级标签对应所有班级中的最高分。

    例子

    全部折叠

    使用神经网络分类器预测测试集观察的标签。

    加载病人数据集。从数据集中创建一个表。每一行对应一个病人,每列对应一个诊断变量。使用吸烟者变量作为响应变量,其余变量作为预测变量。

    负载病人tbl = table(舒张压,收缩压,性别,身高,体重,年龄,吸烟);

    将数据分成一个训练集tblTrain和一个测试集tblTest通过使用分层坚持分区。该软件为测试数据集保留大约30%的观测值,并将其余观测值用于训练数据集。

    rng (“默认”用于分区的再现性C = cvpartition(tbl.)抽烟,“坚持”, 0.30);trainingIndices = training(c);testIndices =测试(c);tblTrain = tbl(trainingIndices,:);tblTest = tbl(testIndices,:);

    使用训练集训练神经网络分类器。指定吸烟者列的tblTrain作为响应变量。指定以标准化数值预测器。

    Mdl = fitcnet(tblTrain,“抽烟”...“标准化”,真正的);

    对测试集观测值进行分类。使用混淆矩阵将结果可视化。

    label = predict(Mdl,tblTest);confusionchart (tblTest.Smoker、标签)

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

    神经网络模型正确地分类了除两个测试集观测值之外的所有测试集观测值。

    通过比较测试集分类边缘、边缘、误差和预测来执行特征选择。将使用所有预测器训练的模型的测试集指标与仅使用预测器子集训练的模型的测试集指标进行比较。

    加载示例文件fisheriris.csv,其中包含虹膜数据,包括萼片长度、萼片宽度、花瓣长度、花瓣宽度和物种类型。将文件读入表。

    渔场=可读表(“fisheriris.csv”);

    将数据分成一个训练集trainTbl和一个测试集testTbl通过使用分层坚持分区。该软件为测试数据集保留大约30%的观测值,并将其余观测值用于训练数据集。

    rng (“默认”c = cvpartition(渔场表。物种,“坚持”, 0.3);trainTbl =渔场(训练(c),:);testTbl = fishtable (test(c),:);

    使用训练集中的所有预测器训练一个神经网络分类器,并使用训练集中的所有预测器训练另一个分类器PetalWidth.对于这两个模型,请指定物种作为响应变量,并对预测函数进行标准化。

    allMdl = fitcnet(trainTbl,“物种”“标准化”,真正的);subsetMdl = fitcnet(trainTbl,“物种~ SepalLength + SepalWidth + PetalLength”...“标准化”,真正的);

    计算两个模型的测试集分类边界。因为测试集只包含45个观察值,所以使用条形图显示边缘。

    对于每个观察,分类裕度是真实类别的分类分数与虚假类别的最大分数之间的差值。因为神经网络分类器返回的分类分数是后验概率,边际值接近1表示正确分类,边际值为负表示错误分类。

    tiledlayout (2, 1)%顶轴Ax1 = nexttile;alledges = margin(allMdl,testTbl);栏(ax₁,allMargins)包含(ax₁“观察”) ylabel (ax₁,“保证金”)标题(ax₁,“预测”%底轴Ax2 = nexttile;subsetmargin = margin(subsetMdl,testTbl);栏(ax2 subsetMargins)包含(ax2,“观察”) ylabel (ax2,“保证金”)标题(ax2,“预测因子子集”

    图中包含2个轴对象。标题为All Predictors的Axes对象1包含一个类型为bar的对象。标题为子集的Axes对象2包含一个类型为bar的对象。

    比较两个模型的测试集分类边缘,或分类边缘的平均值。

    allEdge = edge(allMdl,testTbl)
    allEdge = 0.8198
    subsetEdge = edge(subsetMdl,testTbl)
    subsetEdge = 0.9556

    基于测试集分类边界和边,在一个预测器子集上训练的模型似乎优于在所有预测器上训练的模型。

    比较两种模型的测试集分类误差。

    allError = loss(allMdl,testTbl);allAccuracy = 1-allError
    allAccuracy = 0.9111
    subsetError = loss(subsetMdl,testTbl);subsetAccuracy = 1-subsetError
    subsetAccuracy = 0.9778

    同样,只使用一个预测器子集训练的模型似乎比使用所有预测器训练的模型表现得更好。

    使用混淆矩阵可视化测试集分类结果。

    allLabels = predict(allMdl,testTbl);图(testtable . species,allLabels)“预测”

    图包含一个confusimatrixchart类型的对象。confusimatrixchart类型的图表标题为All Predictors。

    subsetLabels = predict(subsetMdl,testTbl);figure figure (testtable . species,subsetLabels)“预测因子子集”

    图包含一个confusimatrixchart类型的对象。confusimatrixchart类型的图表标题为Predictors的子集。

    使用所有预测器训练的模型错误地分类了四个测试集观测值。使用预测器子集训练的模型只错分类了一个测试集观测值。

    考虑到这两个模型的测试集性能,考虑使用使用所有预测器训练的模型PetalWidth

    了解神经网络分类器的各层如何协同工作,以预测单个观察的标签和分类分数。

    加载示例文件fisheriris.csv,其中包含虹膜数据,包括萼片长度、萼片宽度、花瓣长度、花瓣宽度和物种类型。将文件读入表。

    渔场=可读表(“fisheriris.csv”);

    使用数据集训练神经网络分类器。指定物种列的fishertable作为响应变量。

    Mdl = fitcnet(渔场表,“物种”);

    从数据集中选择第15个观测值。看看神经网络分类器的各层如何获取观察结果并返回预测的类标签newPointLabel分类分数newPointScores

    newPoint = Mdl。X{15日:}
    newPoint =1×45.8000 4.0000 1.2000 0.2000
    firstFCStep = (Mdl.LayerWeights{1})*newPoint' + Mdl.LayerBiases{1};reluStep = max(firstFCStep,0);finalFCStep = (Mdl.LayerWeights{end})*reluStep + Mdl.LayerBiases{end};finalSoftmaxStep = softmax(finalFCStep);[~, classsidx] = max(finalSoftmaxStep);newPointLabel = Mdl。一会{classIdx}
    newPointLabel = 'setosa'
    newPointScores = finalSoftmaxStep'
    newPointScores =1×31.0000 0.0000 0.0000

    方法返回的预测是否匹配预测对象的功能。

    [predictedLabel,predictedScores] = predict(Mdl,newPoint)
    predictedLabel =1x1单元阵列{' setosa '}
    predictedScores =1×31.0000 0.0000 0.0000

    输入参数

    全部折叠

    训练过的神经网络分类器,指定为ClassificationNeuralNetwork模型对象或CompactClassificationNeuralNetwork返回的模型对象fitcnet紧凑的,分别。

    要分类的预测器数据,指定为数字矩阵或表格。

    默认情况下,每一行X对应一个观察结果,每一列对应一个变量。

    • 对于数值矩阵:

      • 列中的变量X必须与训练的预测变量有相同的顺序Mdl

      • 如果你训练Mdl使用表格(例如,资源描述),资源描述那么,只包含数值预测变量X可以是数值矩阵。处理中的数值预测器资源描述作为分类的训练,识别分类预测因子使用CategoricalPredictors的名称-值参数fitcnet.如果资源描述包含异构预测变量(例如,数字和分类数据类型)和X是数字矩阵吗预测抛出错误。

    • 对于表格:

      • 预测不支持多列变量或除金宝app字符向量的单元格数组外的单元格数组。

      • 如果你训练Mdl使用表格(例如,资源描述),然后输入所有预测变量X必须具有与训练的变量相同的变量名和数据类型Mdl(存储在Mdl。PredictorNames).的列序X是否需要对应的列顺序资源描述.同时,资源描述而且X可以包含额外的变量(响应变量、观察权重等),但是预测忽略了它们。

      • 如果你训练Mdl使用一个数字矩阵,然后预测器名称在Mdl。PredictorNames必须与中对应的预测变量名称相同X.若要在训练期间指定预测器名称,请使用PredictorNames的名称-值参数fitcnet.所有预测变量X必须是数值向量。X可以包含额外的变量(响应变量、观察权重等),但是预测忽略了它们。

    如果你设置“标准化”,真的fitcnet当训练Mdl,然后软件用相应的均值和标准差对预测器数据的数值列进行标准化。

    请注意

    如果你定位你的预测矩阵,使观察结果与列相对应,并指定“ObservationsIn”、“列”,那么您可能会经历计算时间的显著减少。你不能指定“ObservationsIn”、“列”用于表中的预测器数据。

    数据类型:||表格

    预测器数据观测维数,指定为“行”“列”

    请注意

    如果你定位你的预测矩阵,使观察结果与列相对应,并指定“ObservationsIn”、“列”,那么您可能会经历计算时间的显著减少。你不能指定“ObservationsIn”、“列”用于表中的预测器数据。

    数据类型:字符|字符串

    输出参数

    全部折叠

    预测类标签,作为数字、分类或逻辑向量返回;字符或字符串数组;或者是字符向量的单元格数组。该软件通过将观察结果分配给产生最大分类分数或后验概率的类别来预测观察结果的分类。

    标签与所观察的训练的类标签具有相同的数据类型Mdl,其长度等于中的观测数X(该软件将字符串数组视为字符向量的单元格数组。)

    分类的分数,作为n——- - - - - -K矩阵,n观察的数量在吗X而且K是唯一类的数量。分类评分评分(i, j)的后验概率这个观察结果属于一流的j

    更多关于

    全部折叠

    分类的分数

    分类的分数对于神经网络分类器使用softmax激活函数计算,该激活函数跟随网络中最后的完全连接层。分数与后验概率相对应。

    后验概率表示观测结果x是一流的k

    P k | x P x | k P k j 1 K P x | j P j 经验值 一个 k x j 1 K 经验值 一个 j x

    在哪里

    • Px|k条件概率是x给定类k

    • Pk是类的先验概率吗k

    • K响应变量中的类数。

    • 一个kxk从最终的全连接层输出观察x

    选择功能

    金宝app仿真软件块

    将神经网络分类模型的预测集成到Simulink中金宝app®,你可以使用ClassificationNeuralNetwork预测块的统计和机器学习工具箱™库或MATLAB®函数块。预测函数。有关示例,请参见使用ClassificationNeuralNetwork预测块预测类标签而且使用MATLAB函数块预测类标签

    在决定使用哪种方法时,请考虑以下因素:

    • 如果使用“统计和机器学习工具箱”库块,则可以使用定点的工具(定点设计师)将浮点模型转换为定点模型。

    • 金宝app控件的MATLAB函数块必须启用对可变大小数组的支持预测函数。

    • 如果使用MATLAB函数块,则可以在同一MATLAB函数块中使用MATLAB函数进行预测前后的预处理或后处理。

    扩展功能

    版本历史

    R2021a中引入