🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

2回答

750閲覧

機械学習:特徴量数を一つずつ加えて精度が上がるときにだけ、その特徴量を採用したい。

SyunSyun

総合スコア24

Python

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

0グッド

0クリップ

投稿2019/11/13 14:55

編集2019/11/13 20:32

機械学習初心者です。
現在取り組んでいる課題に500sampleで63個程度の特徴量の2項分類問題があります。
機械学習においては特徴量の数は多ければ多いほど良いことが多いことは理解していますが、本当にそうなのか確認したいと思いました。
そこで63個の特徴量の内から、「特徴量1、2,3、、、63と一つずつ加えていき、精度(ROC_AUC)が低下か上がらなければprintで『特徴量Xは精度に貢献しません』とアラームを出す。」というプログラミングを書きたいと思っていますが、エラーが出てしまいます。

このダミーデータフレームは、
https://github.com/yamanaka1/dammy2
に置いてあります。

こうするとうまくいくかも、、というアドバイスありましたら大変ありがたいです。

python

1import numpy as np 2import pandas as pd 3from sklearn.linear_model import LogisticRegression 4from sklearn.model_selection import train_test_split, cross_val_score 5from sklearn.metrics import roc_curve 6from sklearn.metrics import roc_auc_score 7 8AUC = [0.5] 9 10for a in np.arange(2,64,1): 11 X = df1.iloc[:, 1:a] 12 y = df1.iloc[:,-1] 13 14 lr = LogisticRegression(C = 0.1, class_weight='balanced', random_state=0) 15 16 X_train, X_test, y_train, y_test = train_test_split( 17 X, y, test_size=0.2, random_state=0) 18 lr.fit(X_train, y_train) 19 cv_scores_train = cross_val_score(lr, X_train, y_train, cv = 3) 20 probs = lr.predict_proba(X_test) 21 probs2 = probs[:, 1] 22 auc = roc_auc_score(y_test, probs2) 23 24 if auc > AUC(-1): 25 print('AUC: {:.2f}'.format(auc)) 26 AUC.append(auc) 27 else: 28 print('特徴量{}は精度に寄与しません'.format(a))

ここでエラーは以下の様にでます。
TypeError Traceback (most recent call last)
<ipython-input-56-8bf996652a36> in <module>()
22 auc = roc_auc_score(y_test, probs2)
23
---> 24 if auc > AUC(-1):
25 print('AUC: {:.2f}'.format(auc))
26 AUC.append(auc)

TypeError: 'list' object is not callable

listではよくないとありますが、アドバイスを頂けると大変ありがたいです。

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

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

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

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

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

hayataka2049

2019/11/13 15:48

コードは<code>ボタンで挿入できるコードブロック内に入れてください。 可能であればコードの全体と、データセットを掲載してください。回答者が手元の環境で実行できるようにしてほしいということです。 また、エラーメッセージは「全文」(tracebackの先頭から)掲載してください。
SyunSyun

2019/11/13 20:34 編集

有難うございます。 まだteratailの仕組み自体にも慣れてないので、hayataka2049さんの丁寧なアドバイスにいつも感謝しております。 ご指摘会った点修正している最中に、自分で間違いに気が付き修正可能であったため、もともと質問したかった内容に変更しました。 またアドバイスありましたら、よろしくお願いいたします。
hayataka2049

2019/11/13 23:29

がらっと内容を変えるのは本来望ましくないので避けてください(回答が無駄になります。まあ今回は私がろくでもない回答をつけているだけなので大して問題ありませんが)。 ()じゃなくて[]でわ。
SyunSyun

2019/11/14 10:35

ありがとうございました。 ご指摘の点で長時間何が良くないのか悩んでいたのですが、()ではなく[]に変更したことで期待する結果が得られました。 回答の件、ご迷惑をお掛けしました。今後もよろしくお願いいたします。
guest

回答2

0

AUC(-1)じゃなくてAUC[-1]ですね。

投稿2019/11/14 01:32

daesaka

総合スコア136

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

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

SyunSyun

2019/11/14 10:38

有難うございます。 ご指摘の箇所を修正し、特に問題なくプログラムを回せました。 長くこの場所で悩んでいたので、「ここだったのか」と納得しました。 今後もよろしくお願いいたします。
guest

0

ベストアンサー

そのまま実行できないコードですが、提示部分だけ見る分には問題なさそうです。

他の部分に問題があるかと思います。

投稿2019/11/13 15:48

hayataka2049

総合スコア30935

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問