qidao123.com技术社区-IT企服评测·应用市场
标题:
MATLAB的cvpartition函数用法
[打印本页]
作者:
十念
时间:
2025-5-8 18:25
标题:
MATLAB的cvpartition函数用法
1. 函数作用
cvpartition 将数据集划分为训练集和测试集,支持多种交叉验证方法,包括:
Hold-Out验证
:单次划分(如70%训练,30%测试)
K折交叉验证
:数据分为K个子集,依次用其中一个作为测试集
留一法(Leave-One-Out)
:每次留一个样本作为测试集
分层交叉验证
:保持差异类别的样本比例同等
2. 基本语法
c = cvpartition(n, 'Method', value, ...)
c = cvpartition(group, 'Method', value, ...) % 分层选项
复制代码
3. 参数说明
参数说明n样本数量group类别标签向量(用于分层交叉验证)'Method'验证方法:'HoldOut', 'KFold', 'LeaveOut''HoldOut'参数测试集比例 p(默认0.1)'KFold'参数折数 k(默认10)
4. 常用方法示例
Hold-Out 验证
data = rand(100, 5); % 100个样本,5个特征
c = cvpartition(100, 'HoldOut', 0.3); % 30%作为测试集
trainIdx = training(c); % 逻辑索引(训练集)
testIdx = test(c); % 逻辑索引(测试集)
trainData = data(trainIdx, :);
testData = data(testIdx, :);
复制代码
K折交叉验证(5折)
c = cvpartition(100, 'KFold', 5);
for i = 1:c.NumTestSets
trainIdx = training(c, i); % 第i折的训练索引
testIdx = test(c, i); % 第i折的测试索引
% 在此训练和验证模型
end
复制代码
分层K折交叉验证
labels = [ones(50,1); zeros(50,1)]; % 类别标签(二分类)
c = cvpartition(labels, 'KFold', 5); % 保持各类比例
% 查看每折的类别分布
disp(c.TestSize); % 每折测试集样本数
复制代码
留一法(LOO)
c = cvpartition(100, 'LeaveOut');
for i = 1:c.NumTestSets
trainIdx = training(c, i);
testIdx = test(c, i); % 每次仅1个测试样本
end
复制代码
5. 对象属性与方法
属性
:
c.NumTestSets:测试集数量(K折时为K)
c.TrainSize:各训练集大小
c.TestSize:各测试集大小
方法
:
training(c, i):获取第i折的训练索引
test(c, i):获取第i折的测试索引
repartition(c):重新随机化分区(仅Hold-Out和KFold)
6. 留意事项
随机种子
:使用 rng(seed) 确保结果可重复。
分层须要性
:分类问题发起使用分层选项,制止类别分布不均。
大数据慎用LOO
:留一法计算本钱高,样本量大时改用K折。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4