浅析留出算法

        在机器学习算法学习的研究中,我们通常有数据集D(用于训练模型),但我们还需要评估模型,因此不能把整个D用于训练,因为拿训练过的数据再去评估必然无效。那么最基本的方法就是留出法:

        把D划分为两部分:训练集S和测试集T,其中SUT=D,S∩T=Φ。

       划分时一般不宜随机划分,因为如果T中正好只取到某一种特殊类型数据,从而带来了额外的误差。此时处理方法要视具体情况而定,如当数据明显的分为有限类时,可以采用分层抽样方式选择测试数据,保证数据分布比例的平衡。

       大多情形下,难以得到合适的测试集,此时一般多次重复划分-训练-测试求误差的步骤,取误差的平均值。

       下面是实现代码:

       clear all;

       close all;

       clc;

       S=[]

       T=[]

       data = csvread('irisdata.csv');

       [m,n] = size(data);

       label = data(:,n);

       labels = unique(label);

       for i = 1:length(labels)

            d = sum(ismember(label,labels(i)));

            choose = d*0.7; 

            index = find(label==labels(u));

            ix = randperm(d);

            S = [S:data(ix(1:choose),:)];

            T = [T:data(ix(choose+1:d),:)];

        end

        留出法带来一个无法避免的矛盾:

        我们初始动机是“评估数据集D训练出的模型”但是我们把数据集分开了,导致:

       Ⅰ 若 S较大T较小,那么S训练出的模型与D训练的模型相似,但是T太少,评估结果偶然性大,不准确。

       Ⅱ 若S较小T较大,那么S与D训练出的模型差异较大,T的评估失去意义。

       这种矛盾是无法避免的。常用做法是选择1/5-1/3左右数据用于评估。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值