MATLAB的cvpartition函数用法

打印 上一主题 下一主题

主题 1766|帖子 1766|积分 5298

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1. 函数作用

cvpartition 将数据集划分为训练集和测试集,支持多种交叉验证方法,包括:


  • Hold-Out验证:单次划分(如70%训练,30%测试)
  • K折交叉验证:数据分为K个子集,依次用其中一个作为测试集
  • 留一法(Leave-One-Out):每次留一个样本作为测试集
  • 分层交叉验证:保持差异类别的样本比例同等

2. 基本语法

  1. c = cvpartition(n, 'Method', value, ...)
  2. c = cvpartition(group, 'Method', value, ...)  % 分层选项
复制代码

3. 参数说明

参数说明n样本数量group类别标签向量(用于分层交叉验证)'Method'验证方法:'HoldOut', 'KFold', 'LeaveOut''HoldOut'参数测试集比例 p(默认0.1)'KFold'参数折数 k(默认10)
4. 常用方法示例

Hold-Out 验证

  1. data = rand(100, 5); % 100个样本,5个特征
  2. c = cvpartition(100, 'HoldOut', 0.3); % 30%作为测试集
  3. trainIdx = training(c); % 逻辑索引(训练集)
  4. testIdx = test(c);      % 逻辑索引(测试集)
  5. trainData = data(trainIdx, :);
  6. testData = data(testIdx, :);
复制代码
K折交叉验证(5折)

  1. c = cvpartition(100, 'KFold', 5);
  2. for i = 1:c.NumTestSets
  3.     trainIdx = training(c, i); % 第i折的训练索引
  4.     testIdx = test(c, i);      % 第i折的测试索引
  5.     % 在此训练和验证模型
  6. end
复制代码
分层K折交叉验证

  1. labels = [ones(50,1); zeros(50,1)]; % 类别标签(二分类)
  2. c = cvpartition(labels, 'KFold', 5); % 保持各类比例
  3. % 查看每折的类别分布
  4. disp(c.TestSize); % 每折测试集样本数
复制代码
留一法(LOO)

  1. c = cvpartition(100, 'LeaveOut');
  2. for i = 1:c.NumTestSets
  3.     trainIdx = training(c, i);
  4.     testIdx = test(c, i); % 每次仅1个测试样本
  5. 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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表