主要内容

预测

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

    描述

    例子

    标签=预测(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、标签)

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

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

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

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

    fishertable = readtable (“fisheriris.csv”);

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

    rng (“默认”c = cvpartition(fishtable .)物种,“坚持”, 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,“子集预测”

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

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

    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)标题(“预测”

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

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

    图包含一个类型为confusimatrixchart的对象。类型为ConfusionMatrixChart的图表标题为“预测器子集”。

    使用所有预测因子训练的模型错误分类了四个测试集的观察值。使用预测器子集训练的模型只对测试集观察结果中的一个进行了错误分类。

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

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

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

    fishertable = readtable (“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 . layerbias {1};reluStep = max (firstFCStep, 0);finalFCStep = (mll . layerweights {end})*reluStep + mll . layerbias {end};finalSoftmaxStep = softmax (finalFCStep);[~, classIdx] = max (finalSoftmaxStep);newPointLabel = Mdl。一会{classIdx}
    newPointLabel = ' setosa '
    newPointScores = finalSoftmaxStep '
    newPointScores =1×31.0000 0.0000 0.0000

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

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

    输入参数

    全部折叠

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

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

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

    • 对于数字矩阵:

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

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

    • 一个表:

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

      • 如果你训练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观察的数量在吗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

    选择功能

    仿真软件块

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

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

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

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

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

    扩展功能

    版本历史

    介绍了R2021a

    Baidu
    map