主要内容

ClassificationPartitionedGAM

交叉验证广义可加性模型(GAM)用于分类

    描述

    ClassificationPartitionedGAM是一组在交叉验证折叠上训练的广义加性模型。通过使用一个或多个交叉验证的分类来评估其质量kfold功能:kfoldPredictkfoldLosskfoldMarginkfoldEdge,kfoldfun

    每一个kfold目标函数使用在训练折叠(折叠内)观测上训练的模型来预测验证折叠(折叠外)观测的响应。例如,假设使用五次折叠进行交叉验证。软件将每个观察结果随机分为五组,大小大致相同。的培训褶皱包含四组(大约4/5的数据),和验证褶皱包含另一组(大约1/5的数据)。在这种情况下,交叉验证的过程如下:

    1. 软件训练第一个模型(存储在CVMdl。训练有素的{1}),并保留第一组的观测值进行验证。

    2. 软件训练第二个模型(存储在CVMdl。训练有素的{2})利用第一组和后三组的观察结果。软件保留第二组的观察结果以供验证。

    3. 该软件以类似的方式处理第三、第四和第五个模型。

    如果您通过使用验证kfoldPredict,该软件计算组内观测结果的预测通过使用模型。简而言之,该软件通过使用在没有该观察的情况下训练的模型来估计每个观察的响应。

    创建

    您可以创建ClassificationPartitionedGAM建模方法有两种:

    • 从一个GAM对象创建一个交叉验证的模型ClassificationGAM通过使用crossval对象的功能。

    • 方法创建交叉验证的模型fitcgam函数,并指定其中一个名称-值参数“CrossVal”“CVPartition”“坚持”“KFold”,或“Leaveout”

    属性

    全部展开

    交叉验证的属性

    此属性是只读的。

    交叉验证的模型名称,指定为“社交”

    此属性是只读的。

    交叉验证的折叠数,指定为正整数。

    数据类型:

    此属性是只读的。

    交叉验证参数值,指定为对象。参数值对应于用于交叉验证广义可添加模型的名称-值参数的值。ModelParameters不包含估计参数。

    的属性ModelParameters使用点表示法。

    此属性是只读的。

    数据分区,表示软件如何将数据分割为交叉验证折叠,指定为cvpartition模型。

    此属性是只读的。

    的单元格数组上训练的紧凑分类器CompactClassificationGAM模型对象。训练有素的k细胞,k是折叠的数量。

    数据类型:细胞

    其他分类属性

    此属性是只读的。

    分类预测指标,指定为正整数向量。CategoricalPredictors包含指示相应预测符是分类的索引值。索引值在1和之间p,在那里p用于训练模型的预测器的数量。如果没有一个预测符是分类的,则此属性为空([]).

    数据类型:

    此属性是只读的。

    训练中使用的唯一类标签,指定为类别或字符数组、逻辑或数字向量或字符向量的单元格数组。一会与类标签具有相同的数据类型Y(该软件将字符串数组视为字符向量的单元格数组。)一会也决定了类的顺序。

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

    错误分类的代价,指定为2乘2的数字矩阵。

    成本(j将一个点分类的成本是多少j如果它真正的阶级是.的行和列的顺序成本中类的顺序对应一会

    该软件使用成本有预测价值,但没有训练价值。您可以使用点表示法来更改该值。

    例子:Mdl。成本= C;

    数据类型:

    此属性是只读的。

    在训练数据中存储的观察数X而且Y,指定为数值标量。

    数据类型:

    此属性是只读的。

    预测器变量名,指定为字符向量的单元格数组。元素的顺序PredictorNames对应于预测器名称在训练数据中出现的顺序。

    数据类型:细胞

    此属性是只读的。

    先验类概率,指定为具有两个元素的数字向量。元素的顺序对应于中元素的顺序一会

    数据类型:

    此属性是只读的。

    响应变量名,指定为字符向量。

    数据类型:字符

    分数转换,指定为字符向量或函数句柄。ScoreTransform表示用于转换预测分类分数的内置转换函数或函数句柄。

    将分数转换函数更改为函数例如,使用点表示法。

    • 对于内置函数,请输入字符向量。

      Mdl。ScoreTransform = '函数”;

      该表描述了可使用的内置函数。

      价值 描述
      “doublelogit” 1 / (1 +e2x
      “invlogit” 日志(x/ (1 -x))
      “ismax” 将得分最大的类的得分设置为1,并将所有其他类的得分设置为0
      分对数的 1 / (1 +e- - - - - -x
      “没有”“身份” x(转换)
      “标志” 1x< 0
      为0x= 0
      1x> 0
      “对称” 2x- 1
      “symmetricismax” 将得分最大的类的得分设置为1,并将所有其他类的得分设置为-1
      “symmetriclogit” 2 / (1 +e- - - - - -x) - 1

    • 对于MATLAB®函数或您定义的函数,输入其函数句柄。

      Mdl。ScoreTransform = @函数

      函数必须接受一个矩阵(原始分数)并返回一个相同大小的矩阵(转换后的分数)。

    此属性确定对象函数的输出分数计算,例如kfoldPredictkfoldMargin,kfoldEdge.使用分对数的计算后验概率,并使用“没有”计算后验概率的对数。

    数据类型:字符|function_handle

    此属性是只读的。

    用于训练模型的观察权重,指定为n-by-1数值向量。n为观测数(NumObservations).

    方法中指定的观测权值进行归一化“重量”的元素W在一个特定的类别中求和等于该类别的先验概率。

    数据类型:

    此属性是只读的。

    用于交叉验证模型的预测器,指定为数值矩阵或表。

    每行X对应一个观察结果,每一列对应一个变量。

    数据类型:||表格

    此属性是只读的。

    用于交叉验证模型的类标签,指定为类别或字符数组、逻辑或数字向量,或字符向量的单元格数组。Y具有与用于训练模型的响应变量相同的数据类型。(该软件将字符串数组视为字符向量的单元格数组。)

    每行Y的对应行所观察的分类X

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

    对象的功能

    kfoldPredict 在交叉验证的分类模型中对观测数据进行分类
    kfoldLoss 交叉验证分类模型的分类损失
    kfoldMargin 交叉验证分类模型的分类边际
    kfoldEdge 交叉验证分类模型的分类边
    kfoldfun 分类的交叉验证功能

    例子

    全部折叠

    使用10次折叠训练交叉验证的GAM,这是默认的交叉验证选项fitcgam.然后,用kfoldPredict使用在训练折叠观察上训练的模型来预测验证折叠观察的类别标签。

    加载电离层数据集。该数据集有34个预测器和351个雷达返回的二进制响应,要么是坏的(“b”)或好(‘g’).

    负载电离层

    使用默认的交叉验证选项创建一个交叉验证的GAM。指定“CrossVal”名称-值参数为“上”

    rng (“默认”%用于再现性CVMdl = fitcmap (X,Y,“CrossVal”“上”
    CVMdl = ClassificationPartitionedGAM CrossValidatedModel: 'GAM' PredictorNames: {1x34 cell} ResponseName: 'Y' NumObservations: 351 KFold: 10 Partition: [1x1 cvpartition] NumTrainedPerFold: [1x1 struct] ClassNames: {'b' 'g'} ScoreTransform: 'logit'属性,方法

    fitcgam函数创建ClassificationPartitionedGAM模型对象CVMdl10次折叠。在交叉验证期间,软件完成以下步骤:

    1. 将数据随机划分为10组。

    2. 对于每个集合,保留该集合作为验证数据,并使用其他9个集合训练模型。

    3. 将10个紧凑的训练过的模型存储在一个10 × 1的单元格向量中训练有素的交叉验证模型对象的属性ClassificationPartitionedGAM

    属性可以覆盖默认的交叉验证设置“CVPartition”“坚持”“KFold”,或“Leaveout”名称-值参数。

    将观察结果分类为X通过使用kfoldPredict.该函数使用在没有该观察的情况下训练的模型预测每个观察的类别标签。

    label = kfoldPredict(CVMdl);

    创建一个混淆矩阵,将观察到的真实类别与其预测的标签进行比较。

    C =混淆图(Y,标签);

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

    计算分类误差。

    L = kfoldLoss(cvdl)
    L = 0.0712

    10次以上的平均误分类率约为7%。

    通过使用训练一个GAMfitcgam,并创建交叉验证的GAMcrossval还有拒绝期权。然后,用kfoldPredict使用在训练折叠观测上训练的模型来预测验证折叠观测的响应。

    加载中存储的1994年人口普查数据census1994.mat.该数据集由美国人口普查局的人口统计数据组成,用于预测一个人的年收入是否超过5万美元。分类任务是拟合一个模型,该模型可以根据年龄、工人阶级、教育水平、婚姻状况、种族等预测人们的工资类别。

    负载census1994

    census1994包含训练数据集adultdata和测试数据集成人.为了减少本例的运行时间,从adultdata通过使用datasample函数。

    rng (“默认”) NumSamples = 5e2;成人数据= datasample(成人数据,NumSamples,“替换”、假);

    训练一个包含预测器的线性和交互项的GAM。指定以包括所有可用的交互术语p-values不大于0.05。

    Mdl = fitccam(成人数据,“工资”“互动”“所有”“MaxPValue”, 0.05);

    Mdl是一个ClassificationGAM模型对象。

    通过指定30%的保留样本交叉验证模型。

    CVMdl = crossval(Mdl,“坚持”, 0.3)
    CVMdl = ClassificationPartitionedGAM CrossValidatedModel: 'GAM' PredictorNames: {1x14 cell} CategoricalPredictors: [2 4 6 7 8 9 10 14] ResponseName: 'salary' NumObservations: 500 KFold: 1 Partition: [1x1 cvpartition] NumTrainedPerFold: [1x1 struct] ClassNames: [<=50K >50K] ScoreTransform: 'logit' Properties, Methods

    crossval函数创建ClassificationPartitionedGAM模型对象CVMdl有拒绝的选择权。在交叉验证期间,软件完成以下步骤:

    1. 随机选择并保留30%的数据作为验证数据,使用剩余的数据训练模型。

    2. 将紧凑的、训练过的模型存储在训练有素的交叉验证模型对象的属性ClassificationPartitionedGAM

    属性选择不同的交叉验证设置“CrossVal”“CVPartition”“KFold”,或“Leaveout”名称-值参数。

    对验证折叠观测值进行分类kfoldPredict.该函数通过使用在训练折叠观察上训练的模型来预测验证折叠观察的类标签。该函数将最常预测的标签分配给训练折叠观测值。

    [labels,scores] = kfoldPredict(CVMdl);

    找到验证折叠观测值。kfoldPredict返回训练折叠观察的两个类的0分。因此,您可以通过找到分数全为0的观测值来识别验证折叠观测值。

    Idx = find(sum(abs(scores),2)~=0);

    创建一个混淆矩阵,将观测值的真实类别与其预测标签进行比较,并计算验证折叠观测值的分类误差。

    C = confusichart (adultdata.salary(idx),labels(idx));

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

    L = kfoldLoss(cvdl)
    L = 0.1800

    用10次折叠训练交叉验证广义加法模型(GAM)。然后,用kfoldLoss计算累计交叉验证分类误差(误分类率,十进制)。使用误差来确定每个预测器的最佳树数(预测器的线性项)和每个交互项的最佳树数。

    或者,您可以找到的最佳值fitcgam的名称-值参数OptimizeHyperparameters名称-值参数。有关示例,请参见使用OptimizeHyperparameters优化GAM

    加载电离层数据集。该数据集有34个预测器和351个雷达返回的二进制响应,要么是坏的(“b”)或好(‘g’).

    负载电离层

    使用默认的交叉验证选项创建一个交叉验证的GAM。指定“CrossVal”名称-值参数为“上”.指定以包括所有可用的交互术语p-values不大于0.05。

    rng (“默认”%用于再现性CVMdl = fitcmap (X,Y,“CrossVal”“上”“互动”“所有”“MaxPValue”, 0.05);

    如果你指定“模式”作为“累积”kfoldLoss,则该函数返回累积误差,即每次折叠使用相同数量的树获得的所有折叠的平均误差。显示每个折叠的树的数量。

    CVMdl。NumTrainedPerFold
    ans =带字段的结构:PredictorTrees: [65 64 59 61 60 66 65 62 64 61] InteractionTrees: [1 2 2 2 2 2 1 2 2 2 2 2]

    kfoldLoss可以计算累积误差使用多达59预测树和一个交互树。

    绘制累计的、10倍交叉验证的分类错误(误分类率,十进制)。指定“IncludeInteractions”作为从计算中排除交互项。

    L_noInteractions = kfoldLoss(CVMdl,“模式”“累积”“IncludeInteractions”、假);图绘制(0:min (CVMdl.NumTrainedPerFold.PredictorTrees) L_noInteractions)

    图中包含一个轴对象。axis对象包含一个line类型的对象。

    的第一个元素L_noInteractions是仅使用截距(常数)项获得的所有折叠的平均误差。(J + 1的第th元素L_noInteractions平均误差是用截距项和第一项得到的吗J每个线性项的预测树。绘制累计损失图可以让您监视随着GAM中预测树数量的增加,误差是如何变化的。

    找出最小误差和用于实现最小误差的预测树的数量。

    [M,I] = min(L_noInteractions)
    M = 0.0655
    I = 23

    当GAM包含22棵预测树时,误差最小。

    利用线性项和交互项计算累积分类误差。

    L = kfoldLoss(CVMdl,“模式”“累积”
    L =2×10.0712 - 0.0712

    的第一个元素l是使用截距(常数)项和每个线性项的所有预测树获得的所有折叠的平均误差。的第二个要素l是使用截距项、每个线性项的所有预测树和每个交互项的一个交互树获得的平均误差。当添加交互项时,误差不会减少。

    如果您对预测树数量为22时的误差感到满意,则可以通过再次训练单变量GAM并指定来创建预测模型“NumTreesPerPredictor”,22岁没有交叉验证。

    版本历史

    R2021a中引入