質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1490閲覧

LinearDiscriminantAnalysis(LDA)の線形写像の行列がどのAttributesであるか

yu__

総合スコア108

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/23 08:29

LinearDiscriminantAnalysis(LDA)の線形写像の行列がどのAttributesであるか。

sklearn.discriminant_analysis.LinearDiscriminantAnalysisのLDAを用いて機械学習を行っていたのですが、LDAはクラス内共分散行列とクラス間共分散行列行列をいい感じな仮定の下で立式し、一般化固有値問題を解くことで写像する行列を算出するものであると考えています。
事実、fit_transformはその変換後の行列を作成します。
しかし、その変換行列がどのAttributesであるかいまいち分かりません。
行列の形からscalings_かなとも思ったのですが、たぶん違います。
もしわかる方がいれば教えていただけると大変助かります。

よろしくお願いいたします!!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

細かい理屈はよくわからないので置いておくとして、

scikit-learn/discriminant_analysis.py at b194674c42d54b26137a456c510c5fdba1ba23e0 · scikit-learn/scikit-learn

transformの実装を見るとscalings_でいいようです。

投稿2020/01/23 15:34

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu__

2020/01/24 02:51

ご返信ありがとうございました。 適当なデータで試してみたのですが、ご意見聞かせていただけると嬉しいです。 import numpy as np from sklearn.datasets import load_digits from sklearn import discriminant_analysis digits = load_digits() lda = discriminant_analysis.LinearDiscriminantAnalysis(n_components=9) digits_lda = lda.fit_transform(digits.data, digits.target) print(np.dot(digits.data,lda.scalings_).shape) print(digits_lda.shape) 出力 (1797, 9) (1797, 9) となり、いいような気がするのですが、写像された一枚目の画像について見てみると、 np.dot(digits.data,lda.scalings_)[0] 出力 array([-0.85981203, -4.65945014, -0.01808578, -2.402779 , -0.7270527 , 0.7643913 , 0.12510745, 0.2206956 , 1.94414747]) digits_lda[0] 出力 array([-2.0146322 , -5.62348616, -0.18659403, -2.80010872, 0.443373 , 0.57975458, -0.10934851, -0.18350667, 0.96549542]) となり、明らかに違うように思われます。 もし解釈におかしい点があれば教えていただけると大変助かります! よろしくお願いいたします。
hayataka2049

2020/01/24 03:41

svdソルバーで解く場合、実装を見ると X_new = np.dot(X - self.xbar_, self.scalings_) という処理になっていますね。eigenソルバー(固有値分解)に設定すればそれでいけるかと。
yu__

2020/01/27 03:13

解決しました。非常に助かりました。 ありがとうございました! ベストアンサーにさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問