主要内容

损失

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

    描述

    例子

    L.=损失(MdlTblResponseVarName返回分类损失对于训练好的神经网络分类器Mdl使用表中的预测数据Tbl的类标签ResponseVarName表变量。

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

    L.=损失(MdlTbly返回分类器的分类损失Mdl使用表中的预测数据Tbl和向量中的班级标签y

    L.=损失(MdlXy返回经过训练的神经网络分类器的分类损失Mdl使用预测数据X以及中相应的类标签y

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

    例子

    全部崩溃

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

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

    加载患者TBL =表(舒张,收缩,性别,身高,体重,年龄,吸烟者);

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

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

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

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

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

    测试仪错误=损失(Mdl、tblTest、,“吸烟者”
    testerror = 0.0671.
    testAccuracy = 1  -  TestError
    testAccuracy = 0.9329

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

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

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

    fishertable = readtable (“fisheriris.csv”);

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

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

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

    allMdl=fitcnet(列车),“物种”“标准化”,对);子TMDL=设备网(列车),“种~ SepalLength + SepalWidth + PetalLength”...“标准化”,真正的);

    计算两个模型的测试集分类边距。由于测试集仅包含45个观察值,因此使用条形图显示边距。

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

    平铺布局(2,1)%顶轴ax₁= nexttile;allMargins =利润率(allMdl testTbl);栏(ax₁,allMargins)包含(ax₁“观察”)ylabel(ax1,“利润”)标题(ax₁,“所有预测因素”%底部轴ax2 = nexttile;subsetMargins =利润率(subsetMdl testTbl);栏(ax2 subsetMargins)包含(ax2,“观察”)ylabel(ax2,“利润”)标题(ax2,“预测因子子集”

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

    allEdge=edge(所有MDL、测试TBL)
    allEdge = 0.8198
    子集合= Edge(Subsetmdl,testtbl)
    子集= 0.9556.

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

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

    allError=损失(allMdl,testTbl);allAccuracy=1-allError
    平均精度=0.9111
    subseterror =损失(subsetmdl,testtbl);subsetAccuracy = 1-auberroror
    subsetAccuracy = 0.9778

    同样,仅使用预测因子子集训练的模型似乎比使用所有预测因子训练的模型性能更好。

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

    allLabels=predict(allMdl,testTbl);figure confusionchart(testTbl.Species,allLabels)标题(“所有预测因素”

    subsetLabels=预测(subsetMdl,testTbl);图2:混淆图(测试物种、亚热带)标题(“预测因子子集”

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

    给定两个模型的测试集性能,考虑使用使用所有预测器训练的模型,除了瓣宽

    输入参数

    全部崩溃

    培训的神经网络分类器,指定为aClassificationneuralKetwork.模型对象或CompactClassificationneAuralKetwork.返回的模型对象Fitcnet.契约, 分别。

    样本数据,指定为表。每一行的Tbl对应一个观察值,每列对应一个预测变量。或者,Tbl可以包含响应变量的附加列。Tbl必须包含用于训练的所有预测值Mdl.不允许使用除了字符向量的单元格阵列之外的多色变量和单元阵列。

    • 如果Tbl包含用于训练的响应变量Mdl,则无需指定ResponseVarNamey

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

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

    数据类型:桌子

    响应变量名称,指定为中变量的名称Tbl.如果Tbl包含用于训练的响应变量Mdl,则无需指定ResponseVarName

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

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

    数据类型:烧焦|字符串

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

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

    • 不同的阶级y必须是Mdl.ClassNames

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

    • 长度y必须等于中的观察数XTbl

    数据类型:明确的|烧焦|字符串|逻辑|||单间牢房

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

    笔记

    如果调整预测矩阵的方向,使观测值与列相对应,并指定“ObservationsIn”、“列”,那么您可能会经历计算时间的显著减少。

    长度y以及X必须是平等的。

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

    数据类型:|

    名称 - 值参数

    指定可选的逗号分离对名称,价值论据。的名字是参数名称和价值是对应的值。的名字必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:名称1,值1,…,名称,值

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

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

    • 此表列出了可用的损失函数。请使用相应的字符向量或字符串标量指定一个损失函数。

      价值 描述
      'binodeviance' 二项式偏差
      “classiferror” 十进制误分类率
      “交叉熵” 交叉熵损失(仅适用于神经网络)
      “指数” 指数损失
      “铰链” 铰链损耗
      'logit' 物流损失
      'Mincost' 最小的预期误分类成本(用于后验概率的分类分数)
      “二次” 二次损失

      有关丢失功能的更多详细信息,请参阅分类损失

    • 要指定自定义丢失功能,请使用函数句柄表示法。该函数必须具有此表单:

      损失值=lossfun(C、S、W、成本)

      • 输出参数损失值是一个标量。

      • 您指定函数名称(lossfun)。

      • C是一个N-借-K.逻辑矩阵,其行表示相应的观测所属的类。N是观察人数TblXK.是不同类的数量(numel(Mdl.ClassNames).列顺序对应于类顺序Mdl.ClassNames. 创造C通过设置C(p,q)=1,如果观察到P.是在课堂上问:,用于每行。设置行的所有其他元素P.0.

      • S.是一个N-借-K.分类分数的数字矩阵。列顺序对应于类顺序Mdl.ClassNamesS.是一个分类评分的矩阵,类似于输出预测

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

      • 费用是一个K.-借-K.错误分类成本的数字矩阵。例如,Cost = ones(K) - eye(K)指定成本0.正确分类和1误分类。

    例子:“LossFun”,“交叉熵”

    数据类型:烧焦|字符串|function_handle.

    预测器数据观察维度,指定为'行''列'

    笔记

    如果调整预测矩阵的方向,使观测值与列相对应,并指定“ObservationsIn”、“列”,则可能会显著减少计算时间。无法指定“ObservationsIn”、“列”对于表中的预测数据。

    数据类型:烧焦|字符串

    观察权重,指定为非负数值向量或中变量的名称Tbl.该软件对每个观测值进行加权XTbl具有相应的价值重量.长度重量必须等于观测的次数XTbl

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

    默认情况下,重量那些(n,1),在那里N是观察人数XTbl

    如果你提供权重,那么损失计算加权分类丢失,并将权重归一成,以总和在相应类中的现有概率的值。

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

    更多关于

    全部崩溃

    分类损失

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

    考虑以下场景。

    • L.是加权平均分类损失。

    • N是样本大小。

    • 对于二进制分类:

      • yj是观察到的类标签。软件将其编码为–1或1,表示负类或正类(或中的第一类或第二类)Classnames.财产),分别。

      • FXj)是观察的正类分类分数(row)j预测数据的X

      • mj=yjFXj)是分类观察的分类分数j进入对应的课程yj.正值mj表示正确的分类,对平均损失贡献不大。的负值mj指出错误的分类,并对平均损失有很大的贡献。

    • 对于支持多类分类的算法(即,金宝appK.≥ 3.):

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

      • FXj)为长度K.用于观察的班级分数向量j预测数据的X.分数的顺序与课程的顺序一致Classnames.输入模型的属性。

      • mj=yj*'FXj)。因此,mj是模型对真实的、观察到的类所预测的标量分类分数。

    • 观察的重量jW.j.该软件将观察权重标准化,使得它们总和到相应的先前类概率。该软件还规范化了现有概率,因此它们总和为1.因此,

      j = 1 N W. j = 1.

    在这种情况下,下表描述了支持的损失函数,您可以使用金宝app“LossFun”名称值对参数。

    损失函数 的价值失意 方程式
    二项式偏差 'binodeviance' L. = j = 1 N W. j 日志 { 1 + 经验 [ 2 m j ] }
    十进制误分类率 “classiferror”

    L. = j = 1 N W. j 一世 { y ^ j y j }

    y ^ j 是与具有最大分数的类对应的类标签。一世{·}是指示器功能。

    交叉熵损失 “交叉熵”

    “交叉熵”仅适用于神经网络模型。

    加权交叉熵损失是

    L. = j = 1 N W. ˜ j 日志 m j K. N

    的权重 W. ˜ j 被标准化为总和N而不是1。

    指数损失 “指数” L. = j = 1 N W. j 经验 m j
    铰链损耗 “铰链” L. = j = 1 N W. j 最大值 { 0. 1 m j }
    Logit损失 'logit' L. = j = 1 N W. j 日志 1 + 经验 m j
    最小预期误分类成本 'Mincost'

    'Mincost'只有当分类分数是后验概率时才合适。

    软件使用此程序计算加权最小预期分类成本,用于观察j= 1,…,N

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

      γ j K. = F X j ' C K.

      FXj)为观测的二值和多类分类的类后验概率列向量XjC是存储在的成本矩阵费用模型的属性。

    2. 供观察j,预测对应于最小预期错误分类成本的类标签:

      y ^ j = 阿明 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 m j 2

    该图比较了损耗函数(除“交叉熵”'Mincost'超过分数m对于一个观测值,一些函数被归一化以通过点(0,1)。

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

    在R2021A介绍