您的位置:首页 > 其它

k-折交叉验证(k-fold CrossValidation)

2012-05-26 16:57 405 查看
k-折交叉验证(k-fold crossValidation):

在机器学习中,将数据集A分为训练集(training set)B和测试集(test set)C,在样本量不充足的情况下,为了充分利用数据集对算法效果进行测试,将数据集A随机分为k个包,每次将其中一个包作为测试集,剩下k-1个包作为训练集进行训练。

在matlab中,可以利用:

indices=crossvalind('Kfold',x,k);

来实现随机分包的操作,其中x为一个N维列向量(N为数据集A的元素个数,与x具体内容无关,只需要能够表示数据集的规模),k为要分成的包的总个数,输出的结果indices是一个N维列向量,每个元素对应的值为该单元所属的包的编号(即该列向量中元素是1~k的整随机数),利用这个向量即可通过循环控制来对数据集进行划分。例:

[M,N]=size(data);//数据集为一个M*N的矩阵,其中每一行代表一个样本

indices=crossvalind('Kfold',data(1:M,N),10);//进行随机分包

for k=1:10//交叉验证k=10,10个包轮流作为测试集

test = (indices == k); //获得test集元素在数据集中对应的单元编号

train = ~test;//train集元素的编号为非test元素的编号

train_data=data(train,:);//从数据集中划分出train样本的数据

train_target=target(:,train);//获得样本集的测试目标,在本例中是实际分类情况

test_data=data(test,:);//test样本集

test_target=target(:,test);

[HammingLoss(1,k),RankingLoss(1,k),OneError(1,k),Coverage(1,k),Average_Precision(1,k),Outputs,Pre_Labels.MLKNN]=MLKNN_algorithm(train_data,train_target,test_data,test_target);//要验证的算法

end

//上述结果为输出算法MLKNN的几个验证指标及最后一轮验证的输出和结果矩阵,每个指标都是一个k元素的行向量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: