我对 MATCONVNET 不太熟悉,所以我可能会误解您的问题,但评估分类器的一般规则是交叉验证(即在不同的子集上训练和测试,并在多个子集配置中重复)。
对于一种配置
要生成一种数据配置,您可以使用
nObservations = size(data,1);
y_act = ... ; % class labels for each observation
ratio = .5;
net = ... %your net definition
[Train,Test] = crossvalind('HoldOut',nObservations,ratio);
[net,...] = train(net,data(Train,:))
y_exp = predict(net,data(Test,:))
rate = length(find(y_exp == y_act(Test)))/...
numel(y_act(Test));
费率是比原来的更好的指标。根据您的模型,您可能希望确保类以均匀的比例分布(或者甚至可能相等的数量,这将需要您折腾一些观察结果,以便您拥有相等的类总数)。为了确保这一点,您可以独立划分每个类crossvalind
,然后合并以形成您的训练/测试集。
您还可以玩弄您的火车:测试比率。.5 是一个很好的起点。如果您无法对测试集进行分类,请逐渐增加。
置换配置
此分析的一个问题是仅评估一种配置。对于泛化不重要的海量数据集或集合,这可能没问题。但是您可以通过将上述分析置换为
一组配置中的所有组合
假设您将数据集分为 A、B、C 和 D。您可以训练 ([A,B,C])-test(D), train(A,B,D)-test(C), ... train(B,C,D)-test(A) 并平均预测率
这通常“足够好”,但您必须承认,在小型数据集中,您的一个集合中可能存在倾斜的表示
一组内所有可能的配置
使用nchoosek(...)
您可以表示所有可能的配置并测试每个配置以进行训练测试。很快变得不可能长。选择任意数量的这些配置也可以。如果您的观察数量非常低,这在低成本下很有用,尤其是在使用bootstrapping进行验证时。可能与您的分析无关。