designecoc

用于减少纠错输出编码为二进制编码矩阵

描述

中号= designecoc(ķ名称返回编码矩阵中号降低纠错输出编码(ECOC)设计由指定名称ķ类二元问题。中号ķ大号列,与对应于一个类中的每个行和对应于一个二进制学习者的每一列。名称ķ确定的值大号

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

中号= designecoc(ķ名称名称,值返回具有附加的选项的一个或多个指定的编码矩阵名称,值对参数。

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

例子

全部收缩

考虑心律失常数据集。有16个类中的研究,其中13中的数据都表示。第一类表明受试者没有心律失常,以及最后一堂课表明受试者的心律不齐的状态没有记录。假设其他类序平表示心律失常的严重程度。培养使用由类的描述中指定的自定义编码设计的ECOC分类器。

加载心律失常数据集。

加载心律失常K = 13;不同类的%数

构建描述类的性质编码矩阵。

OrdMat = designecoc(11,“序”);NOM =尺寸(OrdMat);class1VSOrd = [1;- 酮(11,1);0];class1VSClass16 = [1;零(11,1);-1];OrdVSClass16 = [0;酮(11,1); -1]; Coding = [class1VSOrd class1VSClass16 OrdVSClass16,...[零(1,NOM(2));OrdMat;零(1,NOM(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-1011111 -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

如果您要求通过指定一个随机编码矩阵sparserandom要么denserandom,那么,在默认情况下,designecoc产生万点随机矩阵。然后,选择具有最大的,最小的,成对行基于海明测量距离的矩阵。您可以指定要产生更多的矩阵,以增加获得一个更好的机会,也可以产生几种编码矩阵,然后看看哪一种最适合。

加载心律失常数据集。保留分类成类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 = numel(唯一的(Y));

生成四个随机编码矩阵设计为使得第一两个是致密和第二两个是稀疏的。指定找到最好了20000个变量。

RNG(1);%用于重现编码=细胞(4,1);%预分配用于编码矩阵CodingTypes = {'denserandom''denserandom''sparserandom''sparserandom'};对于J = 1:4;编码{Ĵ} = designecoc(K,CodingTypes {Ĵ}'的numtrials',2E4);结束

编码是一个4×1单元阵列,其中每个小区是一个编码设计矩阵。该矩阵有ķ行,但列(即,二进制的学习者)的数量可能会有所不同。

列车和使用该15倍交叉验证交叉验证ECOC分类器。指定每个ECOC分类器使用的分类树被训练,并且被存储在随机编码矩阵编码

MDL =细胞(4,1);%预分配的ECOC分类对于J = 1:4;MDL {Ĵ} = fitcecoc(X(isIdx,:),Y,“学习者”'树'...'编码',编码{Ĵ}'KFold',15);结束
警告:一个或多个在组中唯一的类值中不存在一个或多个褶皱。对于分类问题,无论是从数据中删除此类或用了N参数代替GROUP以获得nonstratified分区。对于回归问题连续反应,使用N.
警告:一个或多个在组中唯一的类值中不存在一个或多个褶皱。对于分类问题,无论是从数据中删除此类或用了N参数代替GROUP以获得nonstratified分区。对于回归问题连续反应,使用N.
警告:一个或多个在组中唯一的类值中不存在一个或多个褶皱。对于分类问题,无论是从数据中删除此类或用了N参数代替GROUP以获得nonstratified分区。对于回归问题连续反应,使用N.
警告:一个或多个在组中唯一的类值中不存在一个或多个褶皱。对于分类问题,无论是从数据中删除此类或用了N参数代替GROUP以获得nonstratified分区。对于回归问题连续反应,使用N.

MDL是一个4×1单元阵列ClassificationPartitionedECOC楷模。几类具有在数据低的相对频率,所以存在这样,交叉验证期间,一些样本内的折叠将不使用观测从这些类训练的机会。

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

genErr =南(4,1);对于J = 1:4;genErr(J)= kfoldLoss(MDL {Ĵ});结束genErr
genErr =4×10.2302 0.2209 0.2279 0.2233

虽然泛化误差仍然很高,表现最好的机型,专外的样本分类错误基础,是所使用的编码设计模型编码{3}

您可以尝试通过调整二元学习者的一些参数来提高泛化的错误。例如,您可以指定要使用的两分规则或越轨行为的拆分条件,而不是默认的基尼多样性指数。你也可以指定,因为有数据缺失值使用替代拆分。

输入参数

全部收缩

班级数,指定为正整数。

ķ指定编码矩阵的行数中号

数据类型:|

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

二进制学习者数 描述
'allpairs''onevsone' ķķ- 1)/ 2 对于每个二进制学习者,一类是正的,另一个是负的,而软件忽略其余部分。这种设计耗尽类对作业的所有组合。
'binarycomplete' 2 ķ - 1 - 1 这种设计分区类为所有二元组合,不忽略任何类。对于每个二进制学习者,所有的课堂作业都-11在分配至少一个正面和负面的类。
'denserandom' 随机的,但大约10日志2ķ 对于每个二进制学习者,软件随机分配类转换成正或负的类,与每种类型中的至少一个。有关详细信息,请参阅随机编码设计矩阵
'onevsall' ķ 对于每个二进制学习者,一类为正,其余均为阴性。这种设计耗尽的积极的课堂作业的所有组合。
“序” ķ- 1 对于第一个二进制学习,创一流为负,其余阳性。对于第二个二进制学习,第一两个类是否定的,剩下的正,等等。
'sparserandom' 随机的,但大约15日志2ķ 对于每个二进制学习者,软件随机分配的类为阳性或阴性对每个概率0.25,而忽略与类概率0.5。有关详细信息,请参阅随机编码设计矩阵
'ternarycomplete' 3 ķ - 2 ķ + 1 + 1 / 2 这种设计划分出等级为所有三元组合。所有的课堂作业都0-11至少有一个正和分配一个负类。

名称 - 值对参数

指定可选的用逗号分隔的对名称,值参数。名称是参数的名称和是对应的值。名称必须出现引号内。您可以按照任何顺序指定多个名称和值对参数名1,值1,...,NameN,值N

例:'的numtrials',1000指定生成1000随机矩阵。

随机编码矩阵的数量,以产生,指定为逗号分隔的一对组成的'的numtrials'和一个正整数。

软件:

  • 生成的numtrials矩阵,并选择所述一个具有最大,成对行距离。

  • 忽略的numtrials对于所有值名称'denserandom''sparserandom'

例:'的numtrials',1000

数据类型:|

输出参数

全部收缩

编码矩阵,其缩减ECOC方案为二进制,返回为数字矩阵。中号ķ大号列,其中大号是二进制的学习者的数量。每一行对应于一个类和每列对应于一个二进制学习者。

的元素中号-10, 要么1,和的值对应于二分类别指派。此表描述的含义M(I,J),也就是类学习者Ĵ受让人在课堂观察一世

二分法课堂作业
-1 学习者Ĵ类受让人意见一世到负类。
0 前培训,学习者Ĵ除去在课堂观察一世从所述数据集。
1 学习者Ĵ类受让人意见一世以积极的类。

二进制学习者设计denserandombinarycompleteonevsall不分配0在任何课堂观察。

提示

  • 二进制学习者数量的增长与类的数量。对于许多类的问题时,binarycompleteternarycomplete编码设计效率不高。然而:

    • 如果ķ≤4,然后使用ternarycomplete编码设计,而不是sparserandom

    • 如果ķ≤5,然后使用binarycomplete编码设计,而不是denserandom

    您可以通过输入显示训练有素的ECOC分类编码设计矩阵Mdl.CodingMatrix在命令窗口中。

  • 你应该使用应用程序的深入了解,并考虑到计算约束形成编码矩阵。如果你有足够的计算能力和时间,然后尝试几种编码矩阵,并选择具有最佳性能(例如,使用检查混淆矩阵的每个模型confusionchart)。

  • 留一法交叉验证(忽略)是低效的用于数据集的许多观察。取而代之的是,使用ķ倍交叉验证(KFold)。

算法

全部收缩

自定义编码设计矩阵

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

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

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

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

  • 所有行向量是唯一的。

  • 该基质可以分离任何两个类。也就是说,你可以从任何一行前往任何其他行遵循以下规则:

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

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

    • 您可以使用矩阵的列垂直移动一次。

    如果无法从移动一行一世以行Ĵ使用这些规则,那么类一世Ĵ不能由设计来分离。例如,在编码设计

    [ 1 0 - 1 0 0 1 0 - 1 ]

    类1和2不能从类3和4分离(即,不能水平地从因为在该位置有一个0移动-1行2列2)。因此,软件将拒绝此编码设计。

随机编码设计矩阵

对于一个类的给定数量ķ时,软件产生随机编码设计矩阵如下。

  1. 软件生成这些矩阵中的一个:

    1. 密随机 - 软件将指定为1或-1的概率相等到的每个元素ķ-通过-大号d编码设计矩阵,其中 大号 d 10 日志 2 ķ

    2. 稀疏随机 - 软件将指定为1〜的每个元素ķ-通过-大号小号编码设计矩阵的概率0.25,-1的概率0.25,和0的概率0.5,其中 大号 小号 15 日志 2 ķ

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

  3. 对于不同的列üv如果ü=v要么ü= -v,那么软件中删除v从编码设计矩阵。

该软件随机生成万点矩阵按预设和保留了与最大的,最小的,成对的行基于汉明距离度量的矩阵([4])由下式给出

Δ ķ 1 ķ 2 = 0.5 Σ = 1 大号 | ķ 1 | | ķ 2 | | ķ 1 - ķ 2 |

哪里ķĴ是编码设计矩阵的元素Ĵ

参考

[1]Fürnkranz,约翰。“轮循分类。”J.马赫。学习。RES。卷。2,2002年,第721-747。

[2]埃斯卡利拉,S.,O.普霍尔和P. Radeva。“用于纠错输出编码稀疏设计三元代码可分”。个人识别模式。快报。卷。30,第3期,2009年,第285-297。

也可以看看

|

介绍了在R2014b