人脸识别 交叉验证函数crossvalind 的用法

转自:http://blog.csdn.net/xiao_xia_/article/details/6906641 (K-折交叉验证)

MATLAB包含了一个用于交叉验证特别好用的函数crossvalind(),下面是我的简单实验。

数据库:ORL;

特征提取方法:LPQ;

分类方法:KNN;

交叉验证次数:k == 10;

分类结果:0.823494;

clc,clear;
addpath(genpath(pwd));% 当前路径
load class.mat;% 分类标签 为:列向量
path = './ORL';
folder = dir(fullfile(path,'*.bmp'));
num = length(folder);
hist = [];
for i = 1:num
    imname = folder(i).name;
    im = imread(imname);
    LPQhist = lpq(im,3);
    hist = [hist;LPQhist];
end
% 交叉验证
temp = [];
[M,N] = size(hist);% 数据集为一个M*N的矩阵,其中每一行代表一个样本
indices = crossvalind('Kfold',hist(1:M,N),10);% crossvalind函数,随机分为10部分
for k = 1:10
    test = (indices == k);% 获得test集元素在数据集中对应的单元编号
    train = ~test;% train集元素的编号为非train样本的数据
    train_data = hist(train,:);% 划分出train样本的数据
    train_label = class(train,:);% 获得训练集的分类标签
    test_data = hist(test,:);% 划分出test样本的数据
    test_label = class(test,:);% 获得测试集的分类标签
    rate = KNN(train_data,train_label,test_data,test_label,4,1);% 进行KNN分类
    temp = [temp;rate];% 10次准确率汇总
end
mean_rate = mean(temp);
fprintf('分类平均准确率为:%f\n',mean_rate);


你可能感兴趣的:(人脸识别)