이 오류는 LDA를 수행하는 해당 질문에 classify
함수를 사용했기 때문에 발생합니다. 이 오류는 데이터의 순위가 불충분하거나 (즉, 일부 기능이 거의 정확하게 상관 된 경우) 발생합니다. 이를 극복하기 위해 데이터를 더 낮은 차원의 부분 공간으로 투영해야합니다. 주성분 분석을 통해이를 수행 할 수 있습니다. pca
기능을 Matlab의 통계 도구 상자에서 사용하는 방법에 대한 자세한 내용은 here을 참조하십시오.
[basis, scores, ~] = pca(X); % Find the basis functions and their weighting, X is row vectors
indices = find(scores > eps(2*max(scores))); % This is to find irrelevant components up to machine precision of the biggest component .. with a litte extra tolerance (2x)
new_basis = basis(:, indices); % This gets us the relevant components, which are stored in variable "basis" as column vectors
X_new = X*new_basis; % inner products between the new basis functions spanning some subspace of the original, and the original feature vectors
자동 투영을 관련 하위 공간으로 가져와야합니다. 이전 기능과 가중치를 적용한 기능이므로 이전과 동일한 의미는 아닙니다.
추가 참고 사항 : 기능 표현을 변경하지 않으려면 분류 대신 순위가 부족한 데이터와 함께 작동하는 것을 사용해야합니다. LDA가 (공분산 추정치의 행렬 반전을 필요로하므로) 상관 관계가있는 특징을 깨지 않는 자신의 버전의 페널티 판별 분석 (매우 간단 함), 지원 벡터 머신 또는 다른 분류 기능을 사용할 수 있습니다.
EDIT : P.S Matlab에서 내 PCA 버전을 굴려서 테스트하지 않았습니다.
Matlab의 설명서에 제공된 예제에서 : http://www.mathworks.in/help/stats/examples/selecting-features-for-classifying-high-dimensional-data.html, 그것들은 그들의 특징의 희미 함을 감소 시켰습니다 세트.그들의 데이터 세트는 216X4000이기 때문에 너무 많습니다. 왜 나는 같은 방법으로 희미한 삭감을 할 수 없습니까? 시도했지만 위와 같은 오류가 발생합니다. – MaxSteel
주어진 예제와 같은 방법으로 치수 축소를 시도 할 수 있습니다. 그러나, 그들의 데이터 세트는 당신보다 많은 샘플을 가지고 있으며, 더 적은 기능을 가지고 있습니다. 그것은 4000이 아니며, 'sequentialfs'를 적용하기 전에 필터를 적용 했으므로 150입니다. 또한 'sequentialfs'의 'nfeatures' 매개 변수를 사용하여 최대 50 개의 기능을 선택하도록 제한합니다.이 기능은 샘플 수보다 작으므로 사용자가보고있는 오류가 발생하지 않습니다. 아마도 곧 40x3249 크기의 데이터 세트에 sequentialfs 및 LDA를 적용하는 것이 좋은 생각이 아닙니다. 귀하에게 제안 된대로 PCA를 시도하십시오. –