主要内容

损失

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

    描述

    例子

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

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

    l=损失(Mdl资源描述Y返回分类器的分类损失Mdl使用表中的预测数据资源描述以及vector中的类标签Y

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

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

    例子

    全部折叠

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

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

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

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

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

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

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

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

    testError =损失(Mdl tblTest,“抽烟”
    testError = 0.0671
    testAccuracy = 1 - testror
    testAccuracy = 0.9329

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

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

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

    fishertable = readtable (“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

    输入参数

    全部折叠

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

    样本数据,指定为表。每一行的资源描述对应一个观察值,每一列对应一个预测变量。可选地,资源描述可以包含响应变量的附加列。资源描述必须包含所有用于训练的预测因子吗Mdl.除了字符向量的单元格数组之外,不允许使用多列变量和单元格数组。

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

    • 如果你训练Mdl使用表中包含的样例数据,然后输入数据损失也必须在表中。

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

    数据类型:表格

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

    如果您指定ResponseVarName,则必须将其指定为字符向量或字符串标量。例如,如果响应变量存储为资源描述。Y,然后指定ResponseVarName作为“Y”.否则,软件将对所有列进行处理资源描述,包括资源描述。Y预测因子。

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

    数据类型:字符|字符串

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

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

    • 不同的阶级Y一定是?的子集Mdl。ClassNames

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

    • 的长度Y必须等于观测的次数X资源描述

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

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

    请注意

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

    的长度Y观察的次数X必须是相等的。

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

    数据类型:|

    名称-值对的观点

    指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

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

    损失函数,指定为内置的损失函数名称或函数句柄。

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

      价值 描述
      “binodeviance” 二项异常
      “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是在课堂上,每一行。设置行中的所有其他元素p0

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

      • W是一个n-乘1数值向量的观测权值。

      • 成本是一个K——- - - - - -K误分类代价的数值矩阵。例如,Cost = ones(K) - eye(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指出错误的分类,并对平均损失有很大的贡献。

    • 对于支持多类分类的算法(即,万博1manbetxK≥3):

      • yj是向量K- 1个零,1在对应于真实的,观察类的位置yj.例如,如果第二个观察的真正类是第三类和K= 4,然后y2= [0 0 1 0] '.类的顺序对应于一会输入模型的属性。

      • fXj)为长度K用于观察的班级分数向量j预测数据的X.分数的顺序与表中班级的顺序相对应一会输入模型的属性。

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

    • 观测权重jwj.该软件将观测权值归一化,使其和为相应的先验类别概率。软件还将先验概率归一化,使其和为1。因此,

      j 1 n w j 1.

    给定此场景,下表描述了支持的损失函数,可以使用万博1manbetx“LossFun”名称-值对的论点。

    损失函数 的价值LossFun 方程
    二项异常 “binodeviance” l j 1 n w j 日志 1 + 经验值 2 j
    十进制错误分类率 “classiferror”

    l j 1 n w j y 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

    如果使用默认代价矩阵(其元素值为0表示正确分类,1表示不正确分类),则“mincost”失则等于失“classiferror”的损失。

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

    这个数字比较的损失函数(除了“crossentropy”“mincost”超过分数一个观察。一些函数被归一化通过点(0,1)。

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

    介绍了R2021a