このエラーは、classify
LDA を実行しているその質問の関数の使用に起因します。このエラーは、データがランク落ちしている (つまり、いくつかの特徴がほぼ正確に相関している) 場合に発生します。これを克服するには、データを低次元の部分空間に射影する必要があります。主成分分析はこれを行うことができます。Matlab の統計ツールボックス内で関数を使用する方法の詳細については、こちらを参照してください。pca
[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 のように相関する特徴を壊さない他の分類関数を使用したりできます (共分散推定の逆行列を必要とするため)。
編集: PS Matlab で独自のバージョンの PCA を作成したため、これをテストしていません。