2013-04-24 2 views
0

나는 40X3249 노이즈가 많은 데이터 셋과 40X1 결과 세트를 가지고 있습니다. Matlab에서 간단한 순차적 피쳐 선택을 수행하고 싶습니다. Matlab 예제는 복잡하고 따라 할 수 없습니다. SoF에 대한 몇 가지 예조차도 도움이되지 않았습니다. 기능 선택을 수행하려면 분류 자로 결정 트리을 사용하고 싶습니다. 누군가 간단한 설명을 해줄 수 있습니까?
내 데이터 세트가 피쳐 수와 비교하여 관측치 수가 매우 낮습니다. Sequential feature selection Matlab을 나는 다음과 같은 오류가 점점 오전 :
나는이 예제를 따라하고 교육의Matlab의 단순 순차 피쳐 선택

풀링 된 공분산 행렬이 명확한 양수 여야합니다.

답변

1

이 오류는 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 버전을 굴려서 테스트하지 않았습니다.

3

이전 질문에 대한 답변에서 얻은 오류 메시지에 대해 설명했습니다.

일반적으로 샘플보다 많은 변수가있는 것이 문제입니다. 이렇게하면 판별 분석과 같은 일부 기술을 사용하지 못하게되지만 어쨌든 문제가됩니다. 사실, 샘플에 대한 변수의 비율이 높으면 모든 변수가 임의의 숫자 임에도 데이터 세트를 완벽하게 분류 할 가능성이 큽니다. 단일 의사 결정 트리 모델을 작성하는 경우에도 마찬가지입니다. 또한 기능 선택 방법을 사용하여 변수 조합을 명시 적으로 검색하는 경우 더욱 그렇습니다.

나는 어떤 종류의 차원 감소 방법을 시도해 볼 것을 제안합니다. 모든 변수가 연속적이라면 @ user1207217에서 제안한대로 PCA를 시도 할 수 있습니다. 또는 PLS (MATLAB의 plsregress)와 같이 모형 작성에 잠재적 인 변수 방법을 사용할 수도 있습니다.

이 데이터 세트의 의사 결정 트리에서 순차적 피쳐 선택을 계속 사용하려는 경우 연결 한 질문의 예를 수정하고 분류를 1로 바꾸면 classregtree이됩니다.

+0

Matlab의 설명서에 제공된 예제에서 : http://www.mathworks.in/help/stats/examples/selecting-features-for-classifying-high-dimensional-data.html, 그것들은 그들의 특징의 희미 함을 감소 시켰습니다 세트.그들의 데이터 세트는 216X4000이기 때문에 너무 많습니다. 왜 나는 같은 방법으로 희미한 삭감을 할 수 없습니까? 시도했지만 위와 같은 오류가 발생합니다. – MaxSteel

+0

주어진 예제와 같은 방법으로 치수 축소를 시도 할 수 있습니다. 그러나, 그들의 데이터 세트는 당신보다 많은 샘플을 가지고 있으며, 더 적은 기능을 가지고 있습니다. 그것은 4000이 아니며, 'sequentialfs'를 적용하기 전에 필터를 적용 했으므로 150입니다. 또한 'sequentialfs'의 'nfeatures' 매개 변수를 사용하여 최대 50 개의 기능을 선택하도록 제한합니다.이 기능은 샘플 수보다 작으므로 사용자가보고있는 오류가 발생하지 않습니다. 아마도 곧 40x3249 크기의 데이터 세트에 sequentialfs 및 LDA를 적용하는 것이 좋은 생각이 아닙니다. 귀하에게 제안 된대로 PCA를 시도하십시오. –