例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的那个函数进行拟合