交叉验证多类ECOC模型支持向量机(svm)和其他分类器金宝app
ClassificationPartitionedECOC
是一组在交叉验证折叠上训练的纠错输出码(ECOC)模型。通过使用一个或多个“kfold”函数来评估交叉验证分类的质量:kfoldPredict
,kfoldLoss
,kfoldMargin
,kfoldEdge
,kfoldfun
.
每个“kfold”方法都使用在训练折叠(折叠内)观测上训练的模型来预测验证折叠(折叠外)观测的响应。例如,假设使用五次折叠进行交叉验证。在这种情况下,软件将每个观察结果随机分配到五个大小相等的组(大致)。的培训褶皱包含四组(大约4/5的数据),和验证褶皱包含另一组(大约1/5的数据)。在这种情况下,交叉验证的过程如下:
软件训练第一个模型(存储在CVMdl。训练有素的{1}
),使用后四组的观测值,保留第一组的观测值进行验证。
软件训练第二个模型(存储在CVMdl。训练有素的{2}
)利用第一组和后三组的观察结果。软件保留第二组的观察结果以供验证。
该软件以类似的方式处理第三、第四和第五个模型。
如果您通过使用验证kfoldPredict
,该软件计算组内观测结果的预测我通过使用我模型。简而言之,该软件通过使用在没有该观察的情况下训练的模型来估计每个观察的响应。
您可以创建ClassificationPartitionedECOC
建模方法有两种:
CrossValidatedModel
- - - - - -交叉验证的模型名称交叉验证的模型名称,指定为字符向量。
例如,“ECOC”
指定交叉验证的ECOC模型。
数据类型:字符
KFold
- - - - - -交叉验证的折叠数交叉验证的折叠数,指定为正整数。
数据类型:双
ModelParameters
- - - - - -交叉验证参数值交叉验证参数值,指定为对象。参数值对应于用于交叉验证ECOC分类器的名称-值对参数值。ModelParameters
不包含估计参数。
的属性ModelParameters
使用点表示法。
NumObservations
- - - - - -观察次数训练数据中的观察数,指定为正数值标量。
数据类型:双
分区
- - - - - -数据分区cvpartition
模型数据分区,表示软件如何将数据分割为交叉验证折叠,指定为cvpartition
模型。
训练有素的
- - - - - -交叉验证折叠训练的紧凑分类器CompactClassificationECOC
模型的单元格数组上训练的紧凑分类器CompactClassificationECOC
模型。训练有素的
有k细胞,k是折叠的数量。
数据类型:细胞
W
- - - - - -观察权重用于交叉验证模型的观察权重,指定为数值向量。W
有NumObservations
元素。
该软件将用于训练的权重规范化,以便sum (W, omitnan)
是1
.
数据类型:单
|双
X
- - - - - -非标准化预测数据用于交叉验证分类器的非标准化预测器数据,指定为数值矩阵或表格。
每行X
对应一个观察结果,每一列对应一个变量。
数据类型:单
|双
|表格
Y
- - - - - -观察到的类别标签用于交叉验证模型的观察类标签,指定为类别或字符数组、逻辑或数字向量,或字符向量的单元格数组。Y
有NumObservations
元素,并具有与输入参数相同的数据类型Y
你传递给fitcecoc
交叉验证模型。(该软件将字符串数组视为字符向量的单元格数组。)
每行Y
的对应行所观察的分类X
.
数据类型:分类
|字符
|逻辑
|单
|双
|细胞
BinaryLoss
- - - - - -二元学习器损失函数“binodeviance”
|“指数”
|“汉明”
|“枢纽”
|“线性”
|分对数的
|“二次”
二元学习器损失函数,指定为表示损失函数名称的字符向量。
如果你使用使用不同损失函数的二元学习器进行训练,那么软件就会设置BinaryLoss
来“汉明”
.方法在预测或损失计算过程中指定一个二进制损失函数,以潜在地提高精度“BinaryLoss”
的名称-值对参数kfoldPredict
或kfoldLoss
.
数据类型:字符
BinaryY
- - - - - -二元学习者类标签[]
二进制学习器类标签,指定为数字矩阵或[]
.
如果所有折叠的编码矩阵都相同,则BinaryY
是一个NumObservations
——- - - - - -l矩阵,l是二元学习器的数目(大小(CodingMatrix, 2)
).
的要素BinaryY
是1
,0
,或1
,这些值对应于二分法的课程分配。该表描述了如何学习j
分配的观察k
的值对应于的二分类类BinaryY (k, j)
.
价值 | 二分类分配 |
---|---|
1 |
学习者j 分配的观察k 到一个消极的班级。 |
0 |
培训前,学习者j 删除的观察k 从数据集中。 |
1 |
学习者j 分配的观察k 去上积极向上的课。 |
如果编码矩阵在不同折叠间变化,则BinaryY
为空([]
).
数据类型:双
CodingMatrix
- - - - - -指定类分配的代码[]
为二进制学习器指定类作业的代码,指定为数值矩阵或[]
.
如果所有折叠的编码矩阵都相同,则CodingMatrix
是一个K——- - - - - -l矩阵,K是班级的数量和l是二元学习器的数目。
的要素CodingMatrix
是1
,0
,或1
,这些值对应于二分法的课程分配。该表描述了如何学习j
在课堂上布置观察我
的值对应于的二分类类CodingMatrix (i, j)
.
价值 | 二分类分配 |
---|---|
1 |
学习者j 在课堂上布置观察我 到一个消极的班级。 |
0 |
培训前,学习者j 删除类中的观察值我 从数据集中。 |
1 |
学习者j 在课堂上布置观察我 去上积极向上的课。 |
如果编码矩阵在不同折叠间变化,则CodingMatrix
为空([]
).方法可以获得每个折叠的编码矩阵训练有素的
财产。例如,CVMdl.Trained {1} .CodingMatrix
编码矩阵是否在交叉验证ECOC模型的第一叠CVMdl
.
数据类型:双
|单
|int8
|int16
|int32
|int64
CategoricalPredictors
- - - - - -分类预测指标[]
分类预测指标,指定为正整数向量。CategoricalPredictors
包含指示相应预测符是分类的索引值。索引值在1和之间p
,在那里p
用于训练模型的预测器的数量。如果没有一个预测符是分类的,则此属性为空([]
).
数据类型:单
|双
一会
- - - - - -唯一的类标签训练中使用的唯一类标签,指定为类别或字符数组、逻辑或数字向量或字符向量的单元格数组。一会
与类标签具有相同的数据类型Y
.(该软件将字符串数组视为字符向量的单元格数组。)一会
也决定了类的顺序。
数据类型:分类
|字符
|逻辑
|单
|双
|细胞
成本
- - - - - -误分类代价此属性是只读的。
错误分类代价,指定为方阵数字矩阵。成本
有K行和列,其中K是类的数量。
成本(i, j)
将一个点分类的成本是多少j
如果它真正的阶级是我
.的行和列的顺序成本
中类的顺序对应一会
.
fitcecoc
结合了不同类型二元学习器的错误分类代价。
数据类型:双
PredictorNames
- - - - - -预测的名字预测器名称按其在预测器数据中的出现顺序排列X
,指定为字符向量的单元格数组。的长度PredictorNames
等于里面的列数X
.
数据类型:细胞
之前
- - - - - -先验类概率此属性是只读的。
优先类概率,指定为数值向量。之前
元素的数量和类的数量一样多一会
,元素的顺序对应于类的顺序一会
.
fitcecoc
结合了不同类型二元学习器的错误分类代价。
数据类型:双
ResponseName
- - - - - -响应变量名响应变量名,指定为字符向量。
数据类型:字符
ScoreTransform
- - - - - -分数转换函数应用于预测分数“doublelogit”
|“invlogit”
|“ismax”
|分对数的
|“没有”
|函数处理|……应用于预测分数的分数转换函数,指定为函数名或函数句柄。
将分数转换函数更改为函数
例如,使用点表示法。
对于内置函数,输入此代码并替换函数
使用表中的值。
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 = @函数;
函数
必须接受一个矩阵(原始分数)并返回一个相同大小的矩阵(转换后的分数)。
数据类型:字符
|function_handle
收集 |
收集属性统计和机器学习工具箱来自GPU的对象 |
kfoldEdge |
交叉验证ECOC模型的分类边缘 |
kfoldLoss |
交叉验证ECOC模型的分类损失 |
kfoldMargin |
交叉验证ECOC模型的分类边际 |
kfoldPredict |
在交叉验证的ECOC模型中对观测数据进行分类 |
kfoldfun |
使用交叉验证ECOC模型的交叉验证函数 |
对ECOC分类器与SVM二元学习器进行交叉验证,并估计广义分类误差。
加载费雪的虹膜数据集。指定预测器数据X
以及响应数据Y
.
负载fisheririsX = meas;Y =物种;rng (1);%用于再现性
创建SVM模板,并标准化预测器。
t = templateSVM(“标准化”,真正的)
t =拟合分类支持向量机模板。Alpha: [0x1 double] BoxConstraint: [] CacheSize: [] CachingMethod: " ClipAlphas: [] DeltaGradientTolerance: [] Epsilon: [] GapTolerance: [] kkttolance: [] IterationLimit: [] KernelFunction: " KernelScale: [] KernelOffset: [] kernelpoliialorder: [] NumPrint: [] Nu: [] OutlierFraction: [] removeduplicate: [] ShrinkagePeriod: [] Solver: " StandardizeData: 1 SaveSupportVe金宝appctors: [] VerbosityLevel: [] Version: 2 Method: 'SVM' Type: 'classification'
t
为支持向量机模板。大多数模板对象属性是空的。在训练ECOC分类器时,软件将适用的属性设置为默认值。
训练ECOC分类器,并指定分类顺序。
Mdl = fitcecoc(X,Y,“学习者”t...“类名”, {“setosa”,“多色的”,“virginica”});
Mdl
是一个ClassificationECOC
分类器。您可以使用点表示法访问它的属性。
旨在Mdl
使用10倍交叉验证。
CVMdl = crossval(Mdl);
CVMdl
是一个ClassificationPartitionedECOC
交叉验证ECOC分类器。
估计广义分类误差。
genError = kfoldLoss(cvdl)
genError = 0.0400
广义分类误差为4%,说明ECOC分类器泛化效果较好。
训练一个单一对所有的ECOC分类器GentleBoost
具有代理分割的决策树集合。为了加快训练速度,将数值预测器放入垃圾箱,并使用并行计算。Binning仅在以下情况有效fitcecoc
使用树学习器。训练结束后,使用10倍交叉验证估计分类误差。注意,并行计算需要并行计算工具箱™。
加载样例数据
装载和检查心律失常
数据集。
负载心律失常[n,p] = size(X)
N = 452
P = 279
isLabels =唯一的(Y);nLabels = number (isLabels)
nLabels = 13
汇总(分类(Y))
数值计数百分比1 245 54.20% 2 44 9.73% 3 15 3.32% 4 15 3.32% 5 13 2.88% 6 25 5.53% 73 0.66% 8 2 0.44% 99 1.99% 10 50 11.06% 14 4 0.88% 15 5 1.11% 16 22 4.87%
数据集包含279
的预测因子和样本量452
相对较小。在16个不同的标签中,只有13个在响应中表示(Y
).每个标签描述了不同程度的心律失常,54.20%的观察是在课堂上进行的1
.
训练一对全ECOC分类器
创建集成模板。您必须指定至少三个参数:一个方法、若干个学习器和学习器的类型。对于本例,请指定“GentleBoost”
对于这个方法,One hundred.
对于学习者的数量,以及使用代理分割的决策树模板,因为存在缺失的观察。
树= templateTree(“代孕”,“上”);tEnsemble =模板集成(“GentleBoost”, 100年,tTree);
tEnsemble
模板对象。它的大部分属性都是空的,但在训练期间,软件会用默认值填充它们。
使用决策树集合作为二叉学习器来训练一个单一对所有ECOC分类器。为了加快训练速度,可以使用宾箱和并行计算。
装箱(“NumBins”,50岁
) -当你有一个大的训练数据集,你可以通过使用加速训练(潜在的准确性下降)“NumBins”
名称-值对参数。此论点仅当fitcecoc
使用树学习器。如果您指定“NumBins”
值,然后软件将每个数值预测器放入指定数量的等概率容器中,然后在容器索引上生长树,而不是原始数据。你可以试试“NumBins”,50岁
先改,再改“NumBins”
值取决于准确性和训练速度。
并行计算(“选项”,statset (UseParallel,真的)
-使用并行计算工具箱许可证,您可以通过使用并行计算来加快计算速度,它将每个二进制学习器发送给池中的工作器。worker的数量取决于您的系统配置。当你对二叉学习器使用决策树时,fitcecoc
并行训练使用英特尔®线程构建块(TBB)双核及以上系统。因此,指定“UseParallel”
选项在单台计算机上没有帮助。在集群上使用此选项。
此外,指定先验概率为1/K,在那里K= 13是不同类的数量。
选项= statset(“UseParallel”,真正的);Mdl = fitcecoc(X,Y,“编码”,“onevsall”,“学习者”tEnsemble,...“之前”,“统一”,“NumBins”, 50岁,“选项”、选择);
使用“本地”配置文件启动并行池(parpool)…连接到并行池(工人数:6)。
Mdl
是一个ClassificationECOC
模型。
交叉验证
使用10倍交叉验证交叉验证ECOC分类器。
CVMdl = crossval(Mdl,“选项”、选择);
警告:一个或多个折叠不包含所有组中的点。
CVMdl
是一个ClassificationPartitionedECOC
模型。该警告表明,当软件至少训练一次时,某些类没有被表示。因此,这些折叠不能预测缺失类的标签。可以使用单元格索引和点表示法检查折叠的结果。例如,通过输入访问第一次折叠的结果CVMdl。训练有素的{1}
.
使用交叉验证的ECOC分类器来预测验证折叠标签。计算混淆矩阵的方法为confusionchart
.通过更改内部位置属性来移动图表并调整其大小,以确保百分比显示在行摘要中。
oolabel = kfoldPredict(cvdl,“选项”、选择);ConfMat =混淆表(Y, oolabel,“RowSummary”,“total-normalized”);ConfMat。InnerPosition = [0.10 0.12 0.85 0.85];
复制二进制数据
方法重新生成已分箱的预测器数据BinEdges
属性离散化
函数。
X = Mdl.X;预测数据Xbinned = 0(大小(X));edges = mld . binedges;查找已分类预测符的索引。idxNumeric = find(~cellfun(@isempty,edges));如果iscolumn(idxNumeric) idxNumeric = idxNumeric';结束为j = idxNumeric x = x (:,j);如果x是一个表,则将x转换为数组。如果stable(x) x = table2array(x);结束使用离散化函数将x分组到箱子中。Xbinned =离散化(x,[-inf;边缘{};正]);Xbinned(:,j) = Xbinned;结束
Xbinned
包含数值预测器的容器索引,范围从1到容器数。Xbinned
值是0
对于分类预测器。如果X
包含南
S,然后是对应的Xbinned
值是南
年代。
使用注意事项和限制:
的对象函数ClassificationPartitionedECOC
模型完全支持GPU阵列。金宝app
有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
海脂循环匹配函数对应求解MATLAB:
Esegui il commanmando inserendolo nella finestra di commanmando MATLAB。我的浏览器web不支持和MATLAB金宝app。
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。