Matlab使用交叉验证

在做机器学习时,经常要用到交叉验证来分配数据,故在此记录一下。所谓交叉验证,就是将一个数据集分为K份,然后取其中一份作为测试集,剩余K-1份作为训练集。然后,取另一份作为测试集,其余K-1份作为训练集......如此循环,直到每一份都做过测试集为止。用的比较多的是10折交叉验证,代码如下:

clc
clear all
% 导入数据
data = load('F:\work_matlab\Matlab\wdbc.txt');
[data_r, data_c] = size(data);
%将数据样本随机分割为10部分
indices = crossvalind('Kfold', data_r, 10);
for i = 1 : 10
    % 获取第i份测试数据的索引逻辑值
    test = (indices == i);
    % 取反,获取第i份训练数据的索引逻辑值
    train = ~test;
    %1份测试,9份训练
    test_data = data(test, 1 : data_c - 1);
    test_label = data(test, data_c);
    
    train_data = data(train, 1 : data_c - 1);
    train_label = data(train, data_c);
    % 使用数据的代码
end

做交叉验证的函数就是crossvalind,第二个参数是用于做交叉验证的数据个数,第三个参数表示要将这些数据分成几份。另外,有兴趣的同学可以打开test变量看下,你会发现是逻辑值。

注意,此处使用的数据是用于分类的数据,类别标签放在了最后每个样本的最后一位。代码中将特征值与标签分离开来是为了可以对特征值做归一化处理,而避免将类别标签也做归一化。各位可以根据需要使用。数据分配好后,下面就可以添上自己的代码了。

猜你喜欢

转载自blog.csdn.net/TIME_LEAF/article/details/82839004