我使用以下方法提取了PCA特征:
function [mn,A1,A2,Eigenfaces] = pca(T,f1,nf1) m=mean(T,2), %T是整个训练集train=size(T,2);A=[];for i=1:train temp=double(T(:,i))-m; A=[A temp];endtrain=size(f1,2); %f1 - 来自训练集'T'的第一类人脸图像A=[];for i=1:train temp=double(f1(:,i))-m; A1=[A1 temp];endtrain=size(nf1,2); %nf1 - 来自训练集'T'的非第一类人脸图像A=[];for i=1:train temp=double(nf1(:,i))-m; A2=[A2 temp];endL=A'*A;[V D]=eig(L);for i=1:size(V,2) if(D(i,i)>1) L_eig=[L_eig V(:,1)]; endend Eigenfaces=A*L_eig;end
然后我仅投影了训练数据中的第一类人脸(类别+1),如下所示:
函数1
for i=1:15 %训练集中第一类人脸图像的数量 temp=Eigenfaces'*A1(:,i); proj_img1=[proj_img1 temp];end
然后我投影了训练数据中其余的人脸(类别-1),如下所示:
函数2
for i=1:221 %训练集中非第一类人脸图像的数量 temp=Eigenfaces'*A2(:,i); proj_img2=[proj_img2 temp]; end
函数3然后使用以下方法获得输入图像向量:
diff=double(inputimg)-mn; %mn是训练数据的均值testfeaturevector=Eigenfaces'*diff;
我将函数1和函数2的结果分别标记为+1和-1,写入CSV文件中。然后我使用LIBSVM来计算准确率,当给出真实标签时,它返回了0%,当我尝试预测标签时,结果是-1而不是+1。
为什么准确率显示为0%?
基本上,我的模型没有正确训练,我无法发现错误所在。
任何建议都将不胜感激。
回答:
使用Eigenfaces
作为训练集,创建一个label
向量,包含1或-1(如果Eigenfaces
的第i列对应于1,则label
的第i个元素为1,否则为-1)。然后在svmtrain
函数中使用Eigenfaces
和label
。