主要内容

designecoc

将纠错输出码减少为二进制的编码矩阵

描述

例子

= designecoc (K的名字返回编码矩阵来减少指定的纠错输出码(ECOC)设计的名字K类来解决二进制问题。K行和l列,每一行对应一个类,每一列对应一个二进制学习者。的名字K确定…的价值l

您可以查看或自定义,然后将其指定为编码矩阵,用于训练ECOC多类分类器fitcecoc

例子

= designecoc (K的名字名称,值返回带有由一个或多个指定的附加选项的编码矩阵名称,值对参数。

例如,在生成密集或稀疏的随机编码矩阵时,可以指定试验的次数。

例子

全部折叠

考虑到心律失常数据集。研究中有16个班级,数据中有13个班级。第一堂课表明被试没有心律失常,最后一堂课表明被试没有记录心律失常状态。假设其他类别是指示心律失常严重程度的顺序水平。使用由类描述指定的自定义编码设计训练ECOC分类器。

加载心律失常数据集。

负载心律失常K = 13;%不同类别的数量

构造一个描述类性质的编码矩阵。

OrdMat = designecoc(11日“顺序”);笔名=大小(OrdMat);class1VSOrd = [1;1人(11日);0);class1VSClass16 = [1;1 0(11日);1);OrdVSClass16 = [0;1(11日); -1]; Coding = [class1VSOrd class1VSClass16 OrdVSClass16,...[0 (1) (2));OrdMat;0 (1) (2))))
编码=13×131 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1⋮

使用自定义编码设计训练ECOC分类器编码并指定二元学习器为决策树。

Mdl = fitcecoc (X, Y,“编码”、编码、“学习者”“树”);

估计样本内分类误差。

genErr = resubLoss (Mdl)
genErr = 0.1460

如果您通过指定请求一个随机编码矩阵sparserandomdenserandom,那么默认情况下,designecoc生成10,000个随机矩阵。然后,根据汉明测度选择最大、最小的双行距离矩阵。您可以指定生成更多的矩阵以增加获得更好的矩阵的机会,或者您可以生成多个编码矩阵,然后看看哪个性能最好。

加载心律失常数据集。将第16类(即没有心律失常分类的)观察结果保留为新数据。

负载心律失常oosIdx = Y == 16;isIdx = ~ oosIdx;Y =分类(Y (isIdx));汇总(Y)
值计数百分比1 245 56.98% 2 44 10.23% 3 15 3.49% 4 15 3.49% 5 13 3.02% 6 25 5.81% 7 3 0.70% 8 2 0.47% 9 9 2.09% 10 50 11.63% 14 4 0.93% 15 5 1.16%
K =元素个数(独特(Y));

生成四个随机编码设计矩阵,使前两个是密集的,后两个是稀疏的。指定从20,000个变量中找出最佳变量。

rng (1);%的再现性编码=细胞(4,1);%预分配编码矩阵CodingTypes = {“denserandom”“denserandom”“sparserandom”“sparserandom”};j = 1:4;编码{j} = designecoc (K, CodingTypes {j},“NumTrials”2 e4);结束

编码是一个4 × 1单元阵列,其中每个单元是一个编码设计矩阵。矩阵的K行,但列的数量(即二进制学习器)可能会变化。

使用15倍交叉验证对ECOC分类器进行培训和交叉验证。指定每个ECOC分类器使用分类树进行训练,并存储随机编码矩阵编码

Mdl =细胞(4,1);%预分配ECOC分类器j = 1:4;Mdl {j} = fitcecoc (X (isIdx:), Y,“学习者”“树”...“编码”、编码{j},“KFold”15);结束
警告:GROUP中的一个或多个唯一类值不在一个或多个折叠中。对于分类问题,要么从数据中删除这个类,要么使用N而不是GROUP来获得非分层分区。对于具有连续响应的回归问题,使用N。
警告:GROUP中的一个或多个唯一类值不在一个或多个折叠中。对于分类问题,要么从数据中删除这个类,要么使用N而不是GROUP来获得非分层分区。对于具有连续响应的回归问题,使用N。
警告:GROUP中的一个或多个唯一类值不在一个或多个折叠中。对于分类问题,要么从数据中删除这个类,要么使用N而不是GROUP来获得非分层分区。对于具有连续响应的回归问题,使用N。
警告:GROUP中的一个或多个唯一类值不在一个或多个折叠中。对于分类问题,要么从数据中删除这个类,要么使用N而不是GROUP来获得非分层分区。对于具有连续响应的回归问题,使用N。

Mdl一个4乘1的单元阵列是什么ClassificationPartitionedECOC模型。一些类在数据中的相对频率较低,因此在交叉验证期间,一些样本内折叠可能不会使用来自这些类的观察结果进行训练。

估计每个分类器的15倍分类误差。

genErr =南(4,1);j = 1:4;genErr (j) = kfoldLoss (Mdl {j});结束genErr
genErr =4×10.2233 0.2116 0.2186 0.2209

尽管泛化误差仍然很高,但仅基于样本外分类误差的最佳模型是采用编码设计的模型编码{3}

您可以尝试通过调优二进制学习器的一些参数来改进泛化误差。例如,您可以为分割条件指定使用两个规则或偏差,而不是默认的Gini多样性索引。您还可以指定使用代理分割,因为数据中有缺失的值。

输入参数

全部折叠

类的数目,指定为正整数。

K指定编码矩阵的行数

数据类型:|

编码设计名称,在下表中指定为值。下表总结了编码方案。

价值 二元学习者人数 描述
“allpairs”“onevsone” KK- 1) / 2 对于每个二元学习者,一个类是正的,另一个是负的,软件忽略其余的。这个设计用尽了类对作业的所有组合。
“binarycomplete” 2 K 1 1 这种设计将类划分为所有的二进制组合,并且不忽略任何类。对于每个二元学习者,所有的课堂作业都是-11作业中至少有一节正负课。
“denserandom” 随机的,但大约有10个日志2K 对于每一个二元学习者,该软件随机地将课堂分为积极类和消极类,每种类型至少有一种。有关详细信息,请参见随机编码设计矩阵
“onevsall” K 对于每个二元学习者来说,有一类是正面的,其余的是负面的。这个设计用尽了积极的课堂作业的所有组合。
“顺序” K- 1 对于第一个二元学习者,第一堂课是负的,其余的是正的。对于第二个二元学习者,前两个类是否定的,其余的是肯定的,以此类推。
“sparserandom” 随机的,但大约有15个日志2K 对于每个二元学习者,软件随机分配班级为正或负,每个班级的概率为0.25,忽略概率为0.5的班级。有关详细信息,请参见随机编码设计矩阵
“ternarycomplete” 3. K 2 K + 1 + 1 / 2 这种设计将类划分为所有的三元组合。所有的课堂作业0-1,1作业中至少有一节是积极的,一节是消极的。

名称-值参数

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

例子:“NumTrials”,1000年指定生成1000随机矩阵。

要生成的随机编码矩阵的数目,指定为由逗号分隔的对组成“NumTrials”一个正整数。

软件:

  • 生成NumTrials矩阵,并选择具有最大的成对行距离的矩阵。

  • 忽略了NumTrials对于所有值的名字除了“denserandom”“sparserandom”

例子:“NumTrials”,1000年

数据类型:|

输出参数

全部折叠

将ECOC方案简化为二进制的编码矩阵,以数字矩阵的形式返回。K行和l列,l是二元学习者的数量。每一行对应一个类,每一列对应一个二元学习者。

的元素-10,或1,该值对应于二分类赋值。这个表格描述了M (i, j),也就是课堂上的学习者j指定在课堂上进行观察

价值 两个类的任务
1 学习者j在课堂上分配观察给负类。
0 在培训之前,学习者j删除类中的观察值从数据集。
1 学习者j在课堂上分配观察一个积极的班级。

设计的二进制学习者denserandombinarycomplete,onevsall不分配0任何课堂上的观察。

提示

  • 二元学习者的数量随着班级的增加而增加。对于有很多类的问题,binarycompleteternarycomplete编码设计是低效的。然而:

    • 如果K≤4,则使用ternarycomplete编码设计而不是sparserandom

    • 如果K≤5,则使用binarycomplete编码设计而不是denserandom

    输入,可以显示经过训练的ECOC分类器的编码设计矩阵Mdl。CodingMatrix进入命令窗口。

  • 您应该使用对应用程序的熟悉知识来形成一个编码矩阵,并考虑到计算约束。如果你有足够的计算能力和时间,那么尝试几个编码矩阵,并选择一个性能最好的(例如,检查每个模型使用的混淆矩阵confusionchart).

  • 分析交叉验证(Leaveout)对于具有许多观测值的数据集是低效的。相反,使用k倍交叉验证(KFold).

算法

全部折叠

自定义编码设计矩阵

自定义编码矩阵必须具有一定的形式。该软件验证自定义编码矩阵通过确保:

  • 每个元素都是-1 0或1。

  • 每一列至少包含一个-1和一个1。

  • 对于所有不同的列向量uvuvu≠-v

  • 所有行向量都是唯一的。

  • 矩阵可以分离任意两个类。也就是说,你可以按照以下规则从任意一行移动到另一行:

    • 你可以从1垂直移动到-1或-1垂直移动到1。

    • 你可以从一个非零元素水平移动到另一个非零元素。

    • 您只能使用矩阵的一列进行一次垂直移动。

    如果无法从行中移动j使用这些规则,然后创建类j不能被设计分开。例如,在编码设计中

    1 0 1 0 0 1 0 1

    类1和类2不能与类3和类4分开(也就是说,您不能从第2行中的-1水平移动到第2列,因为在该位置有一个0)。因此,软件拒绝这种编码设计。

随机编码设计矩阵

对于给定数量的类K,该软件生成随机编码设计矩阵如下。

  1. 软件生成这些矩阵之一:

    1. 稠密随机-软件以相等的概率分配1或- 1给每个元素K——- - - - - -ld编码设计矩阵,其中 l d 10 日志 2 K

    2. 稀疏随机-软件为每个元素赋值1K——- - - - - -l年代以0.25概率编码设计矩阵,-1以0.25概率编码设计矩阵,0以0.5概率编码设计矩阵 l 年代 15 日志 2 K

  2. 如果一列不包含至少一个1和至少一个-1,则软件将删除该列。

  3. 对于不同的列uv,如果uvu= -v,则软件会移除v从编码设计矩阵。

软件默认随机生成10,000个矩阵,并保留最大、最小、基于汉明度量的成对行距离矩阵([4])由

Δ k 1 k 2 0.5 l 1 l | k 1 l | | k 2 l | | k 1 l k 2 l |

在哪里kjl是编码设计矩阵的一个元素吗j

参考文献

[1] Furnkranz,约翰。“循环赛分类”。j·马赫。学习。Res。, 2002年第2卷,721-747页。

Pujol, S. Escalera, S. O. Pujol, P. Radeva。用于纠错输出码稀疏设计的三元码的可分性。Recog模式。列托人。, Vol. 30, Issue 3, 2009, pp. 285-297。

介绍了R2014b