私はscikit-learn
次元削減のために機械学習ライブラリ(Python)の線形判別分析(LDA)を使用していましたが、結果に少し興味がありました。私は今、LDAが何をしているのか疑問に思っていscikit-learn
ます。その結果、例えば、手動でのアプローチやRで行われたLDAとは異なった結果になります。
基本的に最も懸念さscikit-plot
れるのは、相関0があるはずの2つの変数間の相関を示すことです。
テストでは、Irisデータセットを使用し、最初の2つの線形判別式は次のようになりました。
IMG-1 scikit-learn経由のLDA
これは、私がscikit-learn ドキュメントで見つけた結果と基本的に一致しています。
今、私はLDAを段階的に通り抜けて、異なる予測を得ました。何が起こっているのかを知るために、さまざまなアプローチを試しました。
IMG-2。生データのLDA(センタリングなし、標準化なし)
そして、最初にデータを標準化(zスコア正規化;単位分散)した場合のステップバイステップのアプローチになります。同じことを平均中心化のみで行いました。これにより、同じ相対投影画像が得られるはずです(実際にそうなりました)。
IMG-3。平均中心化または標準化後の段階的なLDA
IMG-4。RのLDA(デフォルト設定)
IMG-3のLDAは、データを中央に配置したため(推奨されるアプローチ)、RでLDAを実行した誰かが投稿で見つけたものとまったく同じに見えます。
参照用コード
すべてのコードをここに貼り付けたくはありませんでしたが、LDAプロジェクションで使用したいくつかのステップ(以下を参照)に分けてIPythonノートブックとしてアップロードしました。
- ステップ1:d次元平均ベクトルの計算
ステップ2:散布図の計算
2.1クラス内散布行列は、次の方程式によって計算されますS W = C Σ I = 1、S I = C Σ I = 1 N Σのx ∈ D I(X - M I)
2.2クラス間散布行列は、次の方程式によって計算されます ここで、は全体の平均です。
ステップ3.行列の一般化された固有値問題を解く
3.1。固有値を減らして固有ベクトルを並べ替える
3.2。最大の固有値を持つk個の固有ベクトルを選択します。2つの固有ベクトルと最高の固有値を組み合わせて、次元の固有ベクトル行列
ステップ5:サンプルを新しい部分空間変換します