我正在尝试将具有指定矢量组(A-K)的矢量分类为训练集,但此错误始终存在:
“使用分类时出错(第277行) 培训中每组的协方差矩阵必须是正定的。“
我使用了所有可用的判别函数类型。 我该怎么办?
我的代码是:
vector = [eccentricity HU_moments]
A = [1.307582846151761 0.002328240818267 0.000000339787418 0.000000000010006 0.000000000013205 0.000000000000000 0.000000000000007 0.000000000000000];
B = [0.852509811942313 0.001274564902091 0.000000019429171 0.000000000000943 0.000000000001518 -0.000000000000000 0.000000000000000 -0.000000000000000];
C = [1.807216375229099 0.001395498724663 0.000000396375718 0.000000000000350 0.000000000000259 -0.000000000000000 -0.000000000000000 -0.000000000000000];
D = [0.509130473161456 0.001982641576184 0.000001125118768 0.000000000001974 0.000000000001711 0.000000000000000 0.000000000000001 0.000000000000000];
E = [1.313285591628449 0.000905989501632 0.000000073375232 0.000000000000303 0.000000000000468 0.000000000000000 -0.000000000000000 0.000000000000000];
F = [1.281052301091977 0.001198833109321 0.000000131250645 0.000000000000905 0.000000000004111 0.000000000000000 -0.000000000000001 0.000000000000000];
G = [1.335248144516864 0.000971636567473 0.000000083156649 0.000000000000682 0.000000000000454 -0.000000000000000 -0.000000000000000 0.000000000000000];
H = [1.376252536144123 0.000965808457692 0.000000072135656 0.000000000000019 0.000000000002546 0.000000000000000 -0.000000000000001 0.000000000000000];
I = [1.349440659700456 0.001293050578171 0.000000087781986 0.000000000001836 0.000000000013089 0.000000000000000 0.000000000000003 0.000000000000000];
J = [0.756966055091135 0.000933970841629 0.000000001067259 0.000000000000639 0.000000000005506 0.000000000000000 0.000000000000000 0.000000000000000];
K = [1.310488452377568 0.001299510364774 0.000000136489347 0.000000000003186 0.000000000002315 0.000000000000000 0.000000000000001 -0.000000000000000];
%Normalize based on the standard deviation
A=A/std(A);
B=B/std(B);
C=C/std(C);
D=D/std(D);
E=E/std(E);
F=F/std(F);
G=G/std(G);
H=H/std(H);
I=I/std(I);
J=J/std(J);
K=K/std(K);
vector=vector/std(vector);
classify(vector,[A;B;C;D;E;F;G;H;I;J;K],[0,0,0,0,1,1,1,1,1,1,1],'quadratic')
答案 0 :(得分:0)
你真的打算拥有那些" -0.000000000000000"项?只是想知道是否有一些错误已经渗透到训练集的早期计算中。
无论如何,由于每个训练集中的最后几个变量在所有情况下都接近于零,因此无论如何它们在分类中可能都不是很有用。例如,如果仅采用A到D的前四个值,则由它们形成的协方差矩阵是正定(有或没有归一化)。您可以尝试使用这四列(或可能是前五列)进行分类,看看它是否能为您提供足够的结果。你可以这样测试它:
n = 4;
Q = [A(1:n); B(1:n); C(1:n); D(1:n)];
Q2 = cov(Q);
chol(Q2); % will error if not positive definite
如果您需要构建正确的程序性检查,请使用其他输出(Mathworks建议使用chol
而不是eig
来执行此操作:
[R,p] = chol(Q2);
这不会返回错误,但如果p大于零,则矩阵不是正定的。