主要内容

预测

使用神经网络分类器分类观察

    描述

    例子

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

    标签=预测(MdlX“ObservationsIn”,尺寸指定预测仪数据观察维度,也可以是“行”(默认)或“列”.例如,指定“ObservationsIn”、“列”指示预测器数据中的列与观测值对应。

    例子

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

    例子

    全部折叠

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

    加载耐心数据集。从数据集创建表。每行对应于一个患者,并且每列对应于诊断变量。使用吸烟者变量作为响应变量,其余变量作为预测变量。

    负载耐心台=表(舒张压、收缩压、性别、身高、体重、年龄、吸烟);

    将数据分离到一个训练集tbltrain和一个测试集tblTest通过使用分层的抵抗层分区。该软件为测试数据集保留大约30%的观察值,并将其余的观察值用于训练数据集。

    RNG(“默认”分区的再现性c = cvpartition(资源描述。抽烟,“坚持”, 0.30);trainingIndices =培训(c);testIndices =测试(c);tblTrain =(资源(trainingIndices:);tblTest =(资源(testIndices:);

    使用培训集列车神经网络分类器。指定吸烟者列的tbltrain作为响应变量。指定标准化数字预测器。

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

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

    标签=预测(Mdl tblTest);confusionchart (tblTest.Smoker、标签)

    神经网络模型正确分类所有测试集合观察。

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

    加载示例文件fisheriris.csv,其中包括鸢尾资料,包括萼片长度,萼片宽度,花瓣长度,花瓣宽度和种类型。将文件读入表中。

    fishertable =可读性('fisheriris.csv');

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

    RNG(“默认”) c = cvpartition(钓鱼台。物种,“坚持”, 0.3);trainTbl = fishertable(培训(c):);testTbl = fishertable(测试(c):);

    使用培训集中的所有预测器列车,使用所有预测器使用所有预测器列出一个神经网络分类器PetalWidth.对于这两个模型,指定物种作为响应变量,并标准化预测器。

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

    计算两种型号的测试集分类边距。因为测试集仅包括45个观察,所以使用条形图显示边距。

    对于每个观察,分类边缘是真实类别的分类评分与错误类别的最大评分之间的差值。因为神经网络分类器返回的分类分数是后验概率,接近1的边缘值表示有信心分类,负边缘值表示错误分类。

    tiledlayout (2, 1)%顶轴ax₁= nexttile;allMargins =利润率(allMdl testTbl);栏(ax₁,allMargins)包含(ax₁“观察”) ylabel (ax₁,“保证金”)标题(ax₁,“预测”%底部轴ax2 = nexttile;subsetMargins =利润率(subsetMdl testTbl);栏(ax2 subsetMargins)包含(ax2,“观察”) ylabel (ax2,“保证金”)标题(ax2,“子集预测”

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

    allEdge =边缘(allMdl testTbl)
    allEdge = 0.8198
    subsetEdge =边缘(subsetMdl testTbl)
    subsetEdge = 0.9556

    基于测试设置分类边距和边缘,在预测器子集上培训的模型似乎优于所有预测器上培训的模型。

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

    AllError =损失(ALLMDL,TESTTBL);allaccuracy = 1-AllError
    Allaccuracy = 0.9111.
    subsetError =损失(subsetMdl testTbl);subsetAccuracy = 1-subsetError
    subsetAccuracy = 0.9778

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

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

    allLabels =预测(allMdl testTbl);图confusionchart (testTbl.Species allLabels)标题(“预测”

    subsetLabels =预测(subsetMdl testTbl);图confusionchart (testTbl.Species subsetLabels)标题(“子集预测”

    使用所有预测器训练的模型错误分配了四个测试集观察。使用预测器的子集训练的模型仅错误分类测试集观察中的一个。

    鉴于两种型号的测试集性能,考虑使用除了所有预测器之外的所有预测器训练的模型PetalWidth

    看看神经网络分类器的各层是如何一起工作来预测单个观察的标签和分类分数的。

    加载示例文件fisheriris.csv,其中包括鸢尾资料,包括萼片长度,萼片宽度,花瓣长度,花瓣宽度和种类型。将文件读入表中。

    fishertable =可读性('fisheriris.csv');

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

    Mdl = fitcnet (fishertable,“物种”);

    从数据集中选择第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.layerwights {end})* relustep + mdl.layerbiases {end};FinalSoftmaxstep = Softmax(FinalFcstep);[〜,classidx] = max(finalsoftmaxstep);newpointlabel = mdl.classnames {classidx}
    newPointLabel = ' setosa '
    newpointscores = finalsoftmaxstep'
    newpointscores =1×31.0000 0.0000 0.0000

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

    [predigedlabel,predicteScores] =预测(MDL,NewPoint)
    predictedLabel =1×1个单元阵列{' setosa '}
    predictedScores =1×31.0000 0.0000 0.0000

    输入参数

    全部折叠

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

    预测数据被分类,指定为数字矩阵或表。

    默认情况下,每一行X对应于一个观察,并且每列对应于一个变量。

    • 对于数值矩阵:

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

      • 如果你训练Mdl使用表(例如,TBL.),TBL.那么,只包含数值预测变量X可以是一个数字矩阵。治疗数字预测器TBL.作为分类训练,识别分类预测因子使用分类预测器名称-值参数fitcnet.如果TBL.包含异构预测变量(例如,数字和分类数据类型)和X是一个数值矩阵,那么预测抛出一个错误。

    • 对于表:

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

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

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

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

    请注意

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

    数据类型:||表格

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

    请注意

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

    数据类型:char|字符串

    输出参数

    全部折叠

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

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

    分类的分数,返回一个n-经过-K矩阵,其中n观察的次数在吗XK是唯一类的数量。分类分评分(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

    介绍了R2021a