懒人式matlab的交叉检验用法

模型训练经常要采用交叉检验或者蒙特卡罗的训练方法,matlab常用的是crossvalind。其实已经很简单,这里想再偷懒一点,将crossvalind包装一下,将训练数据和测试数据直接放到cell结构,这样,只要告诉下面的函数,训练数据和分组数目,就直接返回分组后的结果

function [XTrainData,YTrainData,XTestData,YTestData,indices] = easyCrossvalidation(X,y,fold)
% 调用matlab的crossvalind,将数据集做交叉检验划分
% X --每行为一个样本,y---列向量,fold----数据等分为几组
%XTrainData cell 类型 XTrainData{i}表示第i个分组的训练数据X,下面的类似
%YTrainData y训练数据
%XTestData  X测试数据
%YTestData  y测试数据
%indices指示了数据划分到那一组里面
[m,n] = size(X);
indices = crossvalind('Kfold', m, fold); 
for i= 1:1:fold
    test = (indices == i);
    train = ~test;
    XTrainData{i} = X(train, :);
    XTestData{i} = X(test, :);
    YTrainData{i} = y(train, :);
    YTestData{i} = y(test, :);
end
end

例子,分组数目为10

X = rand(80,80);
y = rand(80,1);
[XTrainData,YTrainData,XTestData,YTestData,indices] = easyCrossvalidation(X,y,10)
%取第5个分组的数据
%XTrainData{5},YTrainData{5},XTestData{5},YTestData{5}

在内存上会引起一点浪费,因为本质上,crossvalind是通过样本序号,得到每一个分组的样本组成,所以不会占用多少空间。而上面这个函数已经将数据按照分组给划分好,因此占用的空间会比较多,不过操作上,感觉还是方便了一些,直观一些。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值