ClassificationPartitionedGAM
交叉验证广义可加性模型(GAM)用于分类
描述
ClassificationPartitionedGAM
是一组在交叉验证折叠上训练的广义加性模型。通过使用一个或多个交叉验证的分类来评估其质量kfold功能:kfoldPredict
,kfoldLoss
,kfoldMargin
,kfoldEdge
,kfoldfun
.
每一个kfold目标函数使用在训练折叠(折叠内)观测上训练的模型来预测验证折叠(折叠外)观测的响应。例如,假设使用五次折叠进行交叉验证。软件将每个观察结果随机分为五组,大小大致相同。的培训褶皱包含四组(大约4/5的数据),和验证褶皱包含另一组(大约1/5的数据)。在这种情况下,交叉验证的过程如下:
软件训练第一个模型(存储在
CVMdl。训练有素的{1}
),并保留第一组的观测值进行验证。软件训练第二个模型(存储在
CVMdl。训练有素的{2}
)利用第一组和后三组的观察结果。软件保留第二组的观察结果以供验证。该软件以类似的方式处理第三、第四和第五个模型。
如果您通过使用验证kfoldPredict
,该软件计算组内观测结果的预测我通过使用我模型。简而言之,该软件通过使用在没有该观察的情况下训练的模型来估计每个观察的响应。
创建
您可以创建ClassificationPartitionedGAM
建模方法有两种:
从一个GAM对象创建一个交叉验证的模型
ClassificationGAM
通过使用crossval
对象的功能。方法创建交叉验证的模型
fitcgam
函数,并指定其中一个名称-值参数“CrossVal”
,“CVPartition”
,“坚持”
,“KFold”
,或“Leaveout”
.
属性
交叉验证的属性
CrossValidatedModel
- - - - - -交叉验证的模型名称
“社交”
此属性是只读的。
交叉验证的模型名称,指定为“社交”
.
KFold
- - - - - -交叉验证的折叠数
正整数
此属性是只读的。
交叉验证的折叠数,指定为正整数。
数据类型:双
ModelParameters
- - - - - -交叉验证参数值
对象
此属性是只读的。
交叉验证参数值,指定为对象。参数值对应于用于交叉验证广义可添加模型的名称-值参数的值。ModelParameters
不包含估计参数。
的属性ModelParameters
使用点表示法。
分区
- - - - - -数据分区
cvpartition
模型
此属性是只读的。
数据分区,表示软件如何将数据分割为交叉验证折叠,指定为cvpartition
模型。
训练有素的
- - - - - -交叉验证折叠训练的紧凑分类器
单元格阵列CompactClassificationGAM
模型
其他分类属性
CategoricalPredictors
- - - - - -分类预测指标
正整数向量|[]
此属性是只读的。
分类预测指标,指定为正整数向量。CategoricalPredictors
包含指示相应预测符是分类的索引值。索引值在1和之间p
,在那里p
用于训练模型的预测器的数量。如果没有一个预测符是分类的,则此属性为空([]
).
数据类型:双
一会
- - - - - -唯一的类标签
分类数组|字符数组|逻辑向量|数值向量|字符向量的单元格数组
此属性是只读的。
训练中使用的唯一类标签,指定为类别或字符数组、逻辑或数字向量或字符向量的单元格数组。一会
与类标签具有相同的数据类型Y
.(该软件将字符串数组视为字符向量的单元格数组。)一会
也决定了类的顺序。
数据类型:单
|双
|逻辑
|字符
|细胞
|分类
成本
- - - - - -误分类代价
2乘2数值矩阵
错误分类的代价,指定为2乘2的数字矩阵。
成本(
将一个点分类的成本是多少我
,j
)j
如果它真正的阶级是我
.的行和列的顺序成本
中类的顺序对应一会
.
该软件使用成本
有预测价值,但没有训练价值。您可以使用点表示法来更改该值。
例子:Mdl。成本= C;
数据类型:双
NumObservations
- - - - - -观察次数
数字标量
此属性是只读的。
在训练数据中存储的观察数X
而且Y
,指定为数值标量。
数据类型:双
PredictorNames
- - - - - -预测变量名称
字符向量的单元格数组
此属性是只读的。
预测器变量名,指定为字符向量的单元格数组。元素的顺序PredictorNames
对应于预测器名称在训练数据中出现的顺序。
数据类型:细胞
之前
- - - - - -先验类概率
数值向量
此属性是只读的。
先验类概率,指定为具有两个元素的数字向量。元素的顺序对应于中元素的顺序一会
.
数据类型:双
ResponseName
- - - - - -响应变量名
特征向量
此属性是只读的。
响应变量名,指定为字符向量。
数据类型:字符
ScoreTransform
- - - - - -分数转换
特征向量|函数处理
分数转换,指定为字符向量或函数句柄。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 = @函数;
函数
必须接受一个矩阵(原始分数)并返回一个相同大小的矩阵(转换后的分数)。
此属性确定对象函数的输出分数计算,例如kfoldPredict
,kfoldMargin
,kfoldEdge
.使用分对数的
计算后验概率,并使用“没有”
计算后验概率的对数。
数据类型:字符
|function_handle
W
- - - - - -观察权重
数值向量
此属性是只读的。
用于训练模型的观察权重,指定为n-by-1数值向量。n为观测数(NumObservations
).
方法中指定的观测权值进行归一化“重量”
的元素W
在一个特定的类别中求和等于该类别的先验概率。
数据类型:双
X
- - - - - -预测
数字矩阵|表格
此属性是只读的。
用于交叉验证模型的预测器,指定为数值矩阵或表。
每行X
对应一个观察结果,每一列对应一个变量。
数据类型:单
|双
|表格
Y
- - - - - -类标签
分类数组|字符数组|逻辑向量|数值向量|字符向量的单元格数组
此属性是只读的。
用于交叉验证模型的类标签,指定为类别或字符数组、逻辑或数字向量,或字符向量的单元格数组。Y
具有与用于训练模型的响应变量相同的数据类型。(该软件将字符串数组视为字符向量的单元格数组。)
每行Y
的对应行所观察的分类X
.
数据类型:单
|双
|逻辑
|字符
|细胞
|分类
对象的功能
kfoldPredict |
在交叉验证的分类模型中对观测数据进行分类 |
kfoldLoss |
交叉验证分类模型的分类损失 |
kfoldMargin |
交叉验证分类模型的分类边际 |
kfoldEdge |
交叉验证分类模型的分类边 |
kfoldfun |
分类的交叉验证功能 |
例子
创建交叉验证的GAM使用fitcgam
使用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
模型对象CVMdl
10次折叠。在交叉验证期间,软件完成以下步骤:
将数据随机划分为10组。
对于每个集合,保留该集合作为验证数据,并使用其他9个集合训练模型。
将10个紧凑的训练过的模型存储在一个10 × 1的单元格向量中
训练有素的
交叉验证模型对象的属性ClassificationPartitionedGAM
.
属性可以覆盖默认的交叉验证设置“CVPartition”
,“坚持”
,“KFold”
,或“Leaveout”
名称-值参数。
将观察结果分类为X
通过使用kfoldPredict
.该函数使用在没有该观察的情况下训练的模型预测每个观察的类别标签。
label = kfoldPredict(CVMdl);
创建一个混淆矩阵,将观察到的真实类别与其预测的标签进行比较。
C =混淆图(Y,标签);
计算分类误差。
L = kfoldLoss(cvdl)
L = 0.0712
10次以上的平均误分类率约为7%。
创建交叉验证的GAM使用crossval
通过使用训练一个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
有拒绝的选择权。在交叉验证期间,软件完成以下步骤:
随机选择并保留30%的数据作为验证数据,使用剩余的数据训练模型。
将紧凑的、训练过的模型存储在
训练有素的
交叉验证模型对象的属性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));
L = kfoldLoss(cvdl)
L = 0.1800
找到GAM使用的最佳树数kfoldLoss
用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)
的第一个元素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岁
没有交叉验证。
版本历史
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。