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

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

新規登録して質問してみよう
ただいま回答率
85.47%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

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

Python

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

Q&A

解決済

1回答

518閲覧

深層学習を使用した場合の特徴量解析

uer03108

総合スコア194

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

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

Python

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

0グッド

0クリップ

投稿2022/09/22 08:21

こんにちは。

深層学習を使用して、テーブルデータの解析を行っております。
クラス分類の解析になります。
NNのモデルは、簡単な全結合のモデルを使用しております。

お伺いしたいのですが、例えば、2値分類の問題で特徴量の解析を行いたいと思った場合、ラベルAとBのそれぞれで、特徴量の違いなどを見ればよいのでしょうか。
具体的には、それぞれの特徴量の分布、最小値・最大値、平均値、中央値について、有意差があるのかなど。
例えば、「カラム1は、ラベルAとBで分布に差が見られる。」とか?

(pytochでは、特徴量をテンソルに変換する際にラベルは除かれると思うので、特徴量の特定は難しいかもしれませんが、そこは何とか無理やり?)

何か勘違いなどありましたら、ご指摘願います。
宜しくお願い致します。

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

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

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

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

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

TakaiY

2022/09/22 08:43

質問の意味がよくわかりません。 「見ればよい」とはどういうことですか?「有意差があるのかなど」とはどういう意味ですか? AB有意差があることがわかっているのであれば、機械学習にかけるまでもなく判定できるのでは?
uer03108

2022/09/22 08:45

例えば、ランダムフォレストなどの深層学習以外の方法であれば、どの特徴量が効いているのか数値で出力することが出来ます。 ですが、深層学習の場合は出来ないので、どの特徴量が効いているのかを自分で調べる必要があるのかなと思いました。 勘違いでしたら、すみません(汗
TakaiY

2022/09/22 08:54

「どの特徴量が判定に効いているのか知る方法はあるのか」というですよね。自分はくわしくないので回答できそうにありませんが、そういうことであれば質問を編集して、見に来たひとにちゃんと伝わるようにしたほうがいいですよ。
jbpb0

2022/09/22 10:27

> ランダムフォレストなどの深層学習以外の方法であれば、どの特徴量が効いているのか数値で出力することが出来ます。 「Permutation Importance」が類似の手法です https://www.dskomei.com/entry/2019/08/29/234415 kerasなら簡単に使えそう https://qiita.com/Kuroakira/items/374f7e016ca9b6bf4003 ですが、pytorchだと簡単に使える方法を知りません 難しい手法ではないので、自分でコード書いても、たいしたことないような気もします
uer03108

2022/09/22 13:23

kerasはあるんですね。 pytorchでも出来そうですね。 有難うございます。
jbpb0

2022/09/23 01:30 編集

「skorch」を使うとpytorchをscikit-learnのように使うことができるので、 https://zenn.dev/megane_otoko/articles/025_skorch_basic で解説されてるgoogle colabのコード https://colab.research.google.com/drive/1gYfyiVFujpK4OG1TJ3GIrD3vg2QS-PaE?usp=sharing を使って、試してみました コードの先頭に、下記を追加 import pandas as pd from sklearn.inspection import permutation_importance コードの「分類」と書かれてるところのすぐ上(「回帰」の最後)に、下記を追加 pi_net_regr = permutation_importance(net_regr, X_test, y_test, n_repeats=100, random_state=SEED) boston_dataset = load_boston() pi_net_regr_df = pd.DataFrame({"importances_mean":pi_net_regr["importances_mean"], "importances_std":pi_net_regr["importances_std"]}, index=boston_dataset.feature_names) display(pi_net_regr_df) pi_net_regr_df.sort_values("importances_mean").importances_mean.plot.barh() plt.show() コードの末尾に、下記を追加 pi_net = permutation_importance(net, X_test, y_test, n_repeats=100, random_state=SEED) iris_dataset = load_iris() pi_net_df = pd.DataFrame({"importances_mean":pi_net["importances_mean"], "importances_std":pi_net["importances_std"]}, index=iris_dataset.feature_names) display(pi_net_df) pi_net_df.sort_values("importances_mean").importances_mean.plot.barh() plt.show() 上記を全部行った後に、google colabのメニューの「ランタイム」→「すべてのセルを実行」をクリックしたら、「回帰」も「分類」も、それっぽいものが計算されてグラフが表示されました 上記の結果が正しいかどうかは分かりませんので、実際に同様なことをやる時には結果が分かってるデータを使って検証してください
guest

回答1

0

ベストアンサー

ランダムフォレストなどの深層学習以外の方法であれば、どの特徴量が効いているのか数値で出力することが出来ます。

「Permutation Importance」が類似の手法です

参考
AIを脱Black Box! XAI(Explainable Artificial Intelligence)を勉強する〜Permutation Importance〜
Kerasで作ったNNモデルにおける特徴量の重要度を出す(Permutation Importance)

 
skorch
を使うとpytorchをscikit-learnのように使うことができるので、
Pytorch の軽量ラッパー、skorch で回帰・分類を試してみた
で解説されてる
google colabのコード
を使って、「Permutation Importance」を算出できるか、試してみました

 
コードの先頭に、下記を追加

python

1import pandas as pd 2from sklearn.inspection import permutation_importance

 
コードの「分類」と書かれてるところのすぐ上(「回帰」の最後)に、下記を追加

python

1pi_net_regr = permutation_importance(net_regr, X_test, y_test, n_repeats=100, random_state=SEED) 2 3boston_dataset = load_boston() 4pi_net_regr_df = pd.DataFrame({"importances_mean":pi_net_regr["importances_mean"], "importances_std":pi_net_regr["importances_std"]}, index=boston_dataset.feature_names) 5display(pi_net_regr_df) 6 7pi_net_regr_df.sort_values("importances_mean").importances_mean.plot.barh() 8plt.show()

 
コードの末尾に、下記を追加

python

1pi_net = permutation_importance(net, X_test, y_test, n_repeats=100, random_state=SEED) 2 3iris_dataset = load_iris() 4pi_net_df = pd.DataFrame({"importances_mean":pi_net["importances_mean"], "importances_std":pi_net["importances_std"]}, index=iris_dataset.feature_names) 5display(pi_net_df) 6 7pi_net_df.sort_values("importances_mean").importances_mean.plot.barh() 8plt.show()

 
上記を全部行った後に、google colabのメニューの「ランタイム」→「すべてのセルを実行」をクリックしたら、「回帰」も「分類」も、それっぽいものが計算されてグラフが表示されました

 
上記の結果が正しいかどうかは分かりませんので、実際に同様なことをやる時には結果が分かってるデータを使って検証してください

投稿2022/09/23 01:21

編集2022/09/23 01:38
jbpb0

総合スコア7653

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

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

uer03108

2022/09/23 01:46 編集

有難うございますm(_ _)m 普通にsklearnの様な感じで使えそうですね! 試してみます。
uer03108

2022/09/23 01:47

バッチ処理とかは、やっぱり厳しいかな(*_*)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問