K(Class)> 2のmatlabでフィッシャーの線形判別関数を実装しようとしていますが、K>2シナリオのアルゴリズムがよくわかりません。Matlabには関数が組み込まれていることは知っていますが、それらを使用せずにこれを実装したいと思います。
誰かがアルゴリズムをクリアできれば素晴らしいでしょう。
K(Class)> 2のmatlabでフィッシャーの線形判別関数を実装しようとしていますが、K>2シナリオのアルゴリズムがよくわかりません。Matlabには関数が組み込まれていることは知っていますが、それらを使用せずにこれを実装したいと思います。
誰かがアルゴリズムをクリアできれば素晴らしいでしょう。
サンプルの疑似コードを次に示します。
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 判別値を生成します。ケースは、判別値が最大のクラスに割り当てられます。