[解決済み] sklearnによるPCAにおけるexplounded_variance_ratio_の特徴名の復元
2023-03-24 23:16:04
質問
scikit-learnで行ったPCAから回復しようとしています。 どの として選択された素性は 関連する .
IRISデータセットによる典型的な例です。
import pandas as pd
import pylab as pl
from sklearn import datasets
from sklearn.decomposition import PCA
# load dataset
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# normalize data
df_norm = (df - df.mean()) / df.std()
# PCA
pca = PCA(n_components=2)
pca.fit_transform(df_norm.values)
print pca.explained_variance_ratio_
これは
In [42]: pca.explained_variance_ratio_
Out[42]: array([ 0.72770452, 0.23030523])
データセットの中で、どの特徴が2つの分散を説明できるかを復元するにはどうしたらよいでしょうか? 逆に、iris.feature_namesにあるこの特徴のインデックスを取得するにはどうしたらよいでしょうか?
In [47]: print iris.feature_names
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
よろしくお願いします。
どのように解決するのですか?
この情報は
pca
属性で指定します。
components_
. で説明されているように
のドキュメントで説明されています。
,
pca.components_
の配列を出力します。
[n_components, n_features]
を出力するので、コンポーネントが異なる機能とどのように線形関係にあるかを得るには、そうする必要があります。
注意 各係数は、特定の成分と特徴の組の相関を表す。
import pandas as pd
import pylab as pl
from sklearn import datasets
from sklearn.decomposition import PCA
# load dataset
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# normalize data
from sklearn import preprocessing
data_scaled = pd.DataFrame(preprocessing.scale(df),columns = df.columns)
# PCA
pca = PCA(n_components=2)
pca.fit_transform(data_scaled)
# Dump components relations with features:
print(pd.DataFrame(pca.components_,columns=data_scaled.columns,index = ['PC-1','PC-2']))
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
PC-1 0.522372 -0.263355 0.581254 0.565611
PC-2 -0.372318 -0.925556 -0.021095 -0.065416
重要です。 余談ですが、PCAの符号は、各成分に含まれる分散に影響しないので、その解釈には影響しないことに注意してください。PCA次元を形成する特徴の相対的な符号のみが重要です。実際、PCAコードをもう一度実行すると、符号が反転したPCA次元が得られるかもしれません。これについての直感は、3次元空間におけるベクトルとその負について考えてみてください - 両者は本質的に空間における同じ方向を表しているのです。 確認 この記事 を参照してください。
関連
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] バブルソートの宿題
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Python Empty Generator 関数
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する