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

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

新規登録して質問してみよう
ただいま回答率
85.50%
機械学習

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

Python

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

Q&A

解決済

2回答

3358閲覧

Lasso回帰で使用される特徴量の確認方法

kouji_39

総合スコア164

機械学習

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

Python

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

0グッド

0クリップ

投稿2020/05/10 13:53

ボストン住宅価格予測データで、lasso回帰をしています。
Lasso回帰で使用される特徴量の確認方法が知りたいです。
下記コードの前に、ボストン住宅価格予測データの読み込みやデータ分割
(trainとtestを、8:2)しています。
下記コードにより、以下のアウトプットが出ます。
alpha=0.001
Train set score: 0.94
Test set score: 0.75
Number of features used:76(←この76が、どの特徴量か知りたい)

#ラッソ回帰とグラフ化 plt.figure(figsize=(10, 5)) for alpha in [0.00001,0.0001,0.001,0.01,0.1, 1, 10]: lasso = Lasso(alpha=alpha).fit(X_train, y_train) print("\n alpha={}".format(str(alpha))) print("Train set score: {:.2f}".format(lasso.score(X_train, y_train))) print("Test set score: {:.2f}".format(lasso.score(X_test, y_test))) print("Number of features used:{}".format(np.sum(lasso.coef_ != 0))) plt.plot(lasso.coef_, label="alpha:{}".format(str(alpha))) plt.legend() plt.xlabel("Coef index") plt.ylabel("Coef magnitude")

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

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

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

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

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

guest

回答2

0

ベストアンサー

np.where(lasso.coef_!=0)とかでインデックスを取って、あとは特徴量の名前にしたければ適当に突き合わせる処理を書けば良いのではないでしょうか。

インデックスに応じて取る処理は色々ありますね。

python

1feature_names = # 特徴量の名前のリスト 2used_features = [feature_names[i] for i in np.where(lasso.coef_!=0)]

みたいなのでもいいですし、numpy-likeなインデキシングをサポートしているデータ構造で表せばfeature_names[np.where(lasso.coef_!=0)]やもっと簡単にfeature_names[lasso.coef_!=0]などが可能です。

投稿2020/05/10 14:06

編集2020/05/10 14:08
hayataka2049

総合スコア30933

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

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

kouji_39

2020/05/10 16:34

’’’ import mglearn X, y = mglearn.datasets.load_extended_boston() ’’’ 追加質問で、ご足労かけます。 上記のように、データを引っ張ってきました。 説明変数のcolumn名は、自分でつけなければいけないのでしょうか。 print(lasso.coef_)で、lasso回帰の係数は見れるので、元データ内容 が把握していれば、0かそれ以外かがわかるわけですね。
hayataka2049

2020/05/10 17:26

mglearnが変数名の機能を提供してくれているかどうか次第ですね。自分で調べてみていただくしかないのですが、望み薄ではないでしょうか。なければインデックスで解釈するしかありません。
kouji_39

2020/05/10 20:32 編集

ボストン住宅価格予測データに関しては、X, y = mglearn.datasets.load_extended_boston()で引っ張った拡張型タイプは特徴量が104個ありますが、「104の特徴量とは,もとの13の特徴量に,13の特徴量から2つの特徴量を選ぶ重複ありの組合せ91を足したものである」というのを見つけました。通常の ボストン住宅価格予測データ(#from sklearn.datasets import load_boston#boston = load_boston())では、boston.feature_namesで特徴量ラベルが取得できます。 結果、重複ありの組合せ91個については、特徴量ラベルにそれぞれ意味を持たないので、 解釈する必要がない(解釈しずらい感じ)ということになります。hayataka2049様、 助言ありがとうございます。
guest

0

np.sum(lasso.coef_
Number of features used:76(←この76が、どの特徴量か知りたい)

76という数字は、76番目という意味ではなく、76個の特徴量が使用された(np.sum)
という意味ですが理解されてますか?

投稿2020/05/10 14:30

technocore

総合スコア7200

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

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

kouji_39

2020/05/10 16:35

もちろんです。(^^)
technocore

2020/05/10 21:38

ご存知でしたか。 ちゃんと本を読んでいればこのような質問は出ないはずなので アドバイスさせていただきました。 解決してよかったですね。(^^)
kouji_39

2020/05/11 04:37

私が調べるかぎり、本やネットでは、Number of features used:76(76は一例)について の説明とかはでていません。実装していて、内容理解や疑問点解消のために質問を行っております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問