【发布时间】:2014-02-23 19:24:56
【问题描述】:
我使用以下方法提取了 PCA 特征:
function [mn,A1,A2,Eigenfaces] = pca(T,f1,nf1)
m=mean(T,2), %T is the whole training set
train=size(T,2);
A=[];
for i=1:train
temp=double(T(:,i))-m;
A=[A temp];
end
train=size(f1,2); %f1 - Face 1 images from training set 'T'
A=[];
for i=1:train
temp=double(f1(:,i))-m;
A1=[A1 temp];
end
train=size(nf1,2); %nf1 - Images other than face 1 from training set 'T'
A=[];
for i=1:train
temp=double(nf1(:,i))-m;
A2=[A2 temp];
end
L=A'*A;
[V D]=eig(L);
for i=1:size(V,2)
if(D(i,i)>1)
L_eig=[L_eig V(:,1)];
end
end
Eigenfaces=A*L_eig;
end
然后我只从训练数据中投影出人脸 1(+1 类):
功能 1
for i=1:15 %number of images of face 1 in training set
temp=Eigenfaces'*A1(:,i);
proj_img1=[proj_img1 temp];
end
然后我从训练数据中预测其余的人脸(-1 类):
功能2
for i=1:221 %number of images of faces other than face 1 in training set
temp=Eigenfaces'*A2(:,i);
proj_img2=[proj_img2 temp];
end
功能 3 然后使用以下方法获得输入图像向量:
diff=double(inputimg)-mn; %mn is the mean of training data
testfeaturevector=Eigenfaces'*diff;
我将函数 1 和 2 的结果分别写在带有标签 +1 和 -1 的 CSV 文件中。 然后我使用 LIBSVM 在给出真实标签时获得准确度,它返回 0%,当我尝试预测标签时它是 -1 而不是 +1。
准确率是 0% 吗?
基本上我的模型没有正确训练,我没有看到错误。
任何建议将不胜感激。
【问题讨论】:
-
请注意:您没有使用 mn(沿第二维的平均值),然后继续减去沿第一维的平均值。不确定意图是什么......
-
@Falimond : 抱歉,函数 3 的平均值必须是“mn”
-
是 [f1 nf1] 组成你的 T(或 T 的某些列排列)?
-
@lennon310: 是的 lennon,[f1 nf1] 组成 T
-
看起来您已经为此工作了一段时间,根据您在此处所说的内容,我不知道问题出在哪里。你的数据有多大?如果您可以将所有东西上传到某个地方(包括对它们的清晰描述),我想尝试一下 libsvm。谢谢
标签: matlab machine-learning libsvm pca