主要内容

损失

神经网络分类器的分类损失

    描述

    例子

    l=损失(Mdl资源描述ResponseVarName返回分类损失对于训练过的神经网络分类器Mdl利用表中的预测数据资源描述类标签在ResponseVarName表变量。

    l默认情况下,作为表示分类错误的标量值返回。

    l=损失(Mdl资源描述Y返回分类器的分类损失Mdl利用表中的预测数据资源描述类标签在向量中Y

    l=损失(MdlXY返回经过训练的神经网络分类器的分类损失Mdl使用预测数据X和相应的类标签Y

    l=损失(___名称,值除前面语法中的任何输入参数组合外,还使用一个或多个名称-值参数指定选项。例如,您可以指定预测器数据中的列对应于观测值,指定损失函数,或提供观测值权重。

    请注意

    如果预测数据在X资源描述包含任何缺失的值和LossFun没有设置为“classifcost”“classiferror”,或“mincost”,损失函数可以返回NaN。有关更多细节,请参见loss可以为缺少值的预测器数据返回NaN

    例子

    全部折叠

    计算神经网络分类器的测试集分类误差。

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

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

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

    rng (“默认”分区的可重复性C = cvpartition(tbl。抽烟,“坚持”, 0.30);训练指数=训练(c);testindexes = test(c);tblTrain = tbl(trainingindexes,:);tblTest = tbl(testindexes,:);

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

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

    计算测试集分类误差。分类错误是神经网络分类器的默认损失类型。

    testError = loss(Mdl,tblTest,“抽烟”
    testError = 0.0671
    testAccuracy = 1 - testError
    testAccuracy = 0.9329

    神经网络模型正确地分类了大约93%的测试集观察结果。

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

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

    fishtable = readtable(“fisheriris.csv”);

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

    rng (“默认”c = cvpartition(fishtable .)物种,“坚持”, 0.3);trainTbl = fishtable (training(c),:);testTbl = fishtable (test(c),:);

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

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

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

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

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

    图中包含2个轴对象。所有Predictors包含一个类型为bar的对象。Axes对象2的标题为子集的Predictors包含一个类型为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 =损失(subsetMdl,testTbl);subsetAccuracy = 1-subsetError
    subsetAccuracy = 0.9778

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

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

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

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

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

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

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

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

    输入参数

    全部折叠

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

    示例数据,指定为表。每一行资源描述对应一个观察结果,每一列对应一个预测变量。可选地,资源描述可以包含用于响应变量的附加列。资源描述必须包含用于训练的所有预测器Mdl.不允许多列变量和字符向量的单元格数组以外的单元格数组。

    • 如果资源描述包含用于训练的响应变量Mdl,则不需要指定ResponseVarNameY

    • 如果你接受过培训Mdl使用表中包含的样例数据,则输入数据为损失也必须在表中。

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

    数据类型:表格

    中指定为变量名的响应变量名资源描述.如果资源描述包含用于训练的响应变量Mdl,则不需要指定ResponseVarName

    如果你指定ResponseVarName,则必须将其指定为字符向量或字符串标量。例如,如果响应变量存储为资源描述。Y,然后指定ResponseVarName作为“Y”.的所有列资源描述,包括资源描述。Y,作为预测指标。

    响应变量必须是一个类别、字符或字符串数组;逻辑向量:逻辑或数字向量;或者字符向量的单元格数组。如果响应变量是字符数组,则每个元素必须对应数组中的一行。

    数据类型:字符|字符串

    类标签,指定为类别、字符或字符串数组;逻辑或数字向量;或者字符向量的单元格数组。

    • 的数据类型Y的数据类型必须相同Mdl。ClassNames(该软件将字符串数组视为字符向量的单元格数组。)

    • 不同的阶级Y的子集Mdl。ClassNames

    • 如果Y是字符数组,则每个元素必须对应于数组的一行。

    • 的长度Y必须等于在X资源描述

    数据类型:分类|字符|字符串|逻辑|||细胞

    预测数据,指定为数值矩阵。默认情况下,损失假设每一行X对应一个观察结果,每一列对应一个预测变量。

    请注意

    如果你定位你的预测矩阵,使观察结果对应列和指定“ObservationsIn”、“列”,那么计算时间可能会显著减少。

    的长度Y观察到的数量X必须是平等的。

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

    数据类型:|

    名称-值参数

    指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

    在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

    例子:损失(Mdl,台“响应”,“LossFun”、“crossentropy”)指定计算模型的交叉熵损失Mdl

    丢失函数,指定为内置丢失函数名或函数句柄。

    • 该表列出了可用的损耗函数。使用对应的字符向量或字符串标量指定一个。

      价值 描述
      “binodeviance” 二项异常
      “classifcost” 观察到的错误分类成本
      “classiferror” 错误的十进制率分类
      “crossentropy” 交叉熵损失(仅适用于神经网络)
      “指数” 指数损失
      “枢纽” 铰链的损失
      分对数的 物流损失
      “mincost” 最小预期误分类代价(对于后验概率分类分数)
      “二次” 二次损失

      有关损失函数的更多详细信息,请参见分类损失

    • 要指定自定义丢失函数,请使用函数句柄表示法。函数必须有这样的形式:

      lossvalue =lossfun(C、S、W、成本)

      • 输出参数lossvalue是一个标量。

      • 指定函数名(lossfun).

      • C是一个n——- - - - - -K逻辑矩阵,用行表示对应的观察结果所属的类别。n观察的数量在吗资源描述X,K是不同类的数量(元素个数(Mdl.ClassNames).列顺序与中的类顺序对应Mdl。ClassNames.创建C通过设置C(p,q) = 1如果观察p在课堂上,为每一行。设置row的所有其他元素p0

      • 年代是一个n——- - - - - -K分类分数的数字矩阵。列顺序与中的类顺序对应Mdl。ClassNames年代是一个分类分数矩阵,类似的输出预测

      • W是一个n-by-1观察权重的数值向量。

      • 成本是一个K——- - - - - -K错误分类成本的数字矩阵。例如,成本=个数(K) -眼数(K)的成本。0正确的分类和1误分类。

    例子:“LossFun”、“crossentropy”

    数据类型:字符|字符串|function_handle

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

    请注意

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

    数据类型:字符|字符串

    中指定为非负数值向量或变量名的观察权值资源描述.该软件对每个观察结果进行加权X资源描述的对应值权重.的长度权重必须等于在X资源描述

    如果将输入数据指定为表资源描述,然后权重变量的名称可以在资源描述它包含一个数字向量。在这种情况下,您必须指定权重作为字符向量或字符串标量。例如,如果权重向量W存储为资源描述。W,然后将其指定为' W '

    默认情况下,权重的(n, 1),在那里n观察的数量在吗X资源描述

    如果你提供重量,那么损失计算加权分类损失,并将权重归一化,使之之和为各自类中的先验概率值。

    数据类型:||字符|字符串

    更多关于

    全部折叠

    分类损失

    分类损失函数度量分类模型的预测不准确性。当你在许多模型中比较同一类型的损失时,较低的损失表示较好的预测模型。

    考虑以下场景。

    • l为加权平均分类损失。

    • n是样本容量。

    • 二元分类:

      • yj是观察到的类标签。软件将其编码为-1或1,表示负数或正类(或中的第一个或第二个类)一会分别属性)。

      • fXj)为观察正级分类分数(行)j预测数据X

      • jyjfXj)为分类观察的分类分数j成对应的类yj.的正数值j指出正确的分类和不贡献太多的平均损失。的负值j指出不正确的分类和对平均损失有显著贡献。

    • 对于支持多类分类的算法(即K≥3):

      • yj是的向量K- 1个0,其中1在对应于真实的观察类的位置yj.例如,如果第二次观测的真类是第三类和K= 4,然后y2= (0 0 1 0]“.类的顺序对应于一会属性。

      • fXj)为长度K班级成绩的观察向量j预测数据X.分数的顺序与课程的顺序相对应一会属性。

      • jyjfXj).因此,j是模型为真实的、观察到的类预测的标量分类分数。

    • 观察权重jwj.软件对观察权重进行归一化处理,使其与存储在之前财产。因此,

      j 1 n w j 1.

    对于这种场景,下表描述了可以使用LossFun名称-值参数。

    损失函数 的价值LossFun 方程
    二项异常 “binodeviance” l j 1 n w j 日志 1 + 经验值 2 j
    观察到的错误分类成本 “classifcost”

    l j 1 n w j c y j y j

    在哪里 y j 类标签是否与分数最大的类对应,和 c y j y j 将观察结果分类的成本是用户指定的吗 y j 当它真正的阶级是yj

    错误的十进制率分类 “classiferror”

    l j 1 n w j y j y j

    在哪里·}为指示函数。

    叉损失 “crossentropy”

    “crossentropy”仅适用于神经网络模型。

    加权交叉熵损失为

    l j 1 n w ˜ j 日志 j K n

    权重在哪里 w ˜ j 和是归一化的吗n而不是1。

    指数损失 “指数” l j 1 n w j 经验值 j
    铰链的损失 “枢纽” l j 1 n w j 马克斯 0 1 j
    分对数损失 分对数的 l j 1 n w j 日志 1 + 经验值 j
    最小的预期错误分类成本 “mincost”

    “mincost”仅当分类分数为后验概率时才适用。

    软件利用此方法计算加权最小期望分类成本j= 1,…,n

    1. 估计分类观察的预期误分类成本Xj进入课堂k

      γ j k f X j C k

      fXj)为观测的类后验概率的列向量XjC成本矩阵是否存储在成本模型的属性。

    2. 为观察j,预测最小期望误分类代价对应的类标签:

      y j argmin k 1 ... K γ j k

    3. 使用C,确定所产生的成本(cj)进行预测。

    最小期望误分类成本损失的加权平均值为

    l j 1 n w j c j

    二次损失 “二次” l j 1 n w j 1 j 2

    如果使用默认代价矩阵(其元素值为0表示正确分类,为1表示错误分类),则损失值为“classifcost”“classiferror”,“mincost”都是相同的。对于具有非默认代价矩阵的模型,“classifcost”损失相当于“mincost”大部分时间都是损失。如果对具有最大后验概率的类的预测不同于对具有最小期望代价的类的预测,则这些损失可能是不同的。请注意,“mincost”仅当分类分数为后验概率时才适用。

    该图比较了损失函数(除“classifcost”“crossentropy”,“mincost”)超过分数有一个观察。一些函数经过点(0,1)被归一化。

    不同损失函数的分类损失比较

    版本历史

    在R2021a中引入

    全部展开

    Baidu
    map