2

K(Class)> 2のmatlabでフィッシャーの線形判別関数を実装しようとしていますが、K>2シナリオのアルゴリズムがよくわかりません。Matlabには関数が組み込まれていることは知っていますが、それらを使用せずにこれを実装したいと思います。

誰かがアルゴリズムをクリアできれば素晴らしいでしょう。

4

1 に答える 1

3

サンプルの疑似コードを次に示します。

N = ケースの数 c= クラスの数 事前確率 = クラスごとの各ケースの事前確率のベクトル ターゲット = クラスごとの各ケースのターゲット ラベル データ = 特徴 x ケース。

各データ ポイントのターゲット ラベルを取得します。

T = Targets(:,Cases);      % Target labels for each case 

クラスごとの平均ベクトルと共通共分散行列を計算します。

classifier.u = [mean(Data(:,(T(1,:)==1)),2),mean_nan(Data(:,(T(2,:)==1)),2),....,mean_nan(Data(:,(T(2,:)==c)),2];   % Matrix of data means
classifier.invCV = cov(Data');

クラス平均ベクトルと共通共分散行列を使用して判別値を取得します。

A1=classifier.u;
B1=classifier.invCV;
D = A1'*B1*Data-0.5*(A1'*B1.*A1')*ones(d,N)+log(Priors(:,Cases));

関数は c 判別値を生成します。ケースは、判別値が最大のクラスに割り当てられます。

于 2012-10-02T12:38:21.520 に答える