交叉验证crossvalind

例1

Data = rand(9,3);%创建维度为9×3的随机矩阵样本
indices = crossvalind(**'Kfold'**, 9, 3);%将数据样本随机分割为3部分
for i = 1:3 %循环3次,分别取出第i部分作为测试样本,其余两部分作为训练样本
    test = (indices == i);   %这里用==生成的是逻辑类型,(0,1表示的)
    train = ~test; %test中的0变为1,1变为0
    trainData = Data(train, :); %取train逻辑上是1的data的数。
    testData = Data(test, :); %取test逻辑上是1的data的数。
end

例2【官网例子】

load fisheriris %加载matlab自带数据集,有“meas”和“species”。
indices = crossvalind**('Kfold'**,species,10); %10为交叉验证折数
cp = classperf(species); %可以记录分类器的评价指标,初始化一个对象以度量分类器的性能。
for i = 1:10   %实验记进行10次(交叉验证折数),求10次的平均值作为实验结果
    test = (indices == i); train = ~test;  %产生测试集合训练集索引
    class = classify(meas(test,:),meas(train,:),species(train,:));
    classperf(cp,class,test)
end
cp.ErrorRate

ans = 0.0200

解释一下classperf

classperf(species)

                  Label: ''
                  Description: ''
                  ClassLabels: {3×1 cell} %类型标识
                  GroundTruth: [150×1 double]  %各次实验的观察值,即真实值
         NumberOfObservations: 150
               ControlClasses: [2×1 double]
                TargetClasses: 1
            ValidationCounter: 0  %测试次数
           SampleDistribution: [150×1 double] %每个样本作为测试集样本的次数
            ErrorDistribution: [150×1 double] %每个样本作为测试集样本的次数
    SampleDistributionByClass: [3×1 double] %在测试集中各类样本数量
     ErrorDistributionByClass: [3×1 double] %在被误判的样本集中各类样本的数量
               CountingMatrix: [4×3 double] %前2行表示TP,FP;TN,FN;最后一行是inconclusive results.
                  CorrectRate: NaN %(TP+FN)/(P+N)
                    ErrorRate: NaN %1-CorrectRate
              LastCorrectRate: 0
                LastErrorRate: 0
             InconclusiveRate: NaN
               ClassifiedRate: NaN
                  Sensitivity: NaN %TP/(TP+FP)=recall=FDR(Failure detective rate)
                  Specificity: NaN %FN/(TN+FN)=1-FAR(false alarm rate)
      PositivePredictiveValue: NaN %TP/(TP+TN)=precision
      NegativePredictiveValue: NaN %FN/(FP+FN)
           PositiveLikelihood: NaN
           NegativeLikelihood: NaN
                   Prevalence: NaN %TP/(TP+FP+TN+FN)
              DiagnosticTable: [2×2 double] %与CountingMatrix相同

例3

load carbig
x = Displacement; y = Acceleration;
% x为轿车形状的大小,y为轿车轿车速度从0到60公里所用时间
N = length(x); % N为x长度=406
%利用遗漏交叉验证训练二次多项式模型,求出平均交叉验证误差。
sse = 0; %初始化误差平方和
for i = 1:100
    [train,test] = crossvalind('LeaveMOut',N,1);
    yhat = polyval(polyfit(x(train),y(train),2),x(test));
    sse = sse + sum((yhat - y(test)).^2); %看一下实际与拟合的y差距,计算误差平方和。
end
CVerr = sse / 100

polyfit(x(train),y(train),2):返回最高次为 2 的多项式 p(x) 的系数,
小tips:通常,对于 n 个点,可以拟合 n-1 次多项式以便完全通过这些点。】
polyval(polyfit(x(train),y(train),2),x(test));:对x(test))用ployfit的那个函数进行拟合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值