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

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

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

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

Q&A

解決済

1回答

4173閲覧

Pythonでのグリッドサーチを行ったときのエラー

gymgym

総合スコア97

Python

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

0グッド

0クリップ

投稿2018/01/06 07:32

編集2018/01/12 06:35

Python

1forest = RandomForestClassifier(min_samples_leaf=3, random_state=0) 2forest.fit(train_features, train_labels) 3 4print('f1 score: {:.3f}'.format(f1_score(test_labels, forest.predict(test_features), average = 'micro'))) 5 6# ハイパーパラメータ 7forest_grid_param = { 8 'n_estimators': [100], 9 'max_features': [1, 'auto', None], 10 'max_depth': [1, 5, 10, None], 11 'min_samples_leaf': [1, 2, 4,] 12} 13 14# スコア方法をF1に設定 15f1_scoring = make_scorer(f1_score, pos_label=1) 16 17# グリッドサーチで学習 18forest_grid_search = GridSearchCV(RandomForestClassifier(random_state=0, n_jobs=-1), forest_grid_param, scoring=f1_scoring, cv=4) 19forest_grid_search.fit(train_features, train_labels) 20 21# 結果 22print('Best parameters: {}'.format(forest_grid_search.best_params_)) 23print('Best score: {:.3f}'.format(forest_grid_search.best_score_))

このようなコードを実行したとき、

forest_grid_search.fit(train_features, train_labels)

以上の部分で、エラーがでました。

Traceback (most recent call last): File "zyan05.py", line 120, in <module> forest_grid_search.fit(train_features, train_labels) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/model_selection/_search.py", line 945, in fit return self._fit(X, y, groups, ParameterGrid(self.param_grid)) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/model_selection/_search.py", line 564, in _fit for parameters in parameter_iterable File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 758, in __call__ while self.dispatch_one_batch(iterator): File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 608, in dispatch_one_batch self._dispatch(tasks) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 571, in _dispatch job = self._backend.apply_async(batch, callback=cb) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 109, in apply_async result = ImmediateResult(func) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 326, in __init__ self.results = batch() File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 131, in __call__ return [func(*args, **kwargs) for func, args, kwargs in self.items] File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 131, in <listcomp> return [func(*args, **kwargs) for func, args, kwargs in self.items] File "/Users/anaconda/lib/python3.6/site-packages/sklearn/model_selection/_validation.py", line 260, in _fit_and_score test_score = _score(estimator, X_test, y_test, scorer) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/model_selection/_validation.py", line 288, in _score score = scorer(estimator, X_test, y_test) File "/Users//anaconda/lib/python3.6/site-packages/sklearn/metrics/scorer.py", line 98, in __call__ **self._kwargs) TypeError: 'numpy.float64' object is not callable

原因が不明です。

どのように改善したら良いでしょうか。
よろしくお願い致します。

#train_featureのひとつ [[ 1.29289835e-04 1.17485219e-04 1.19890843e-04 ..., 9.05183214e-05 8.27563718e-05 8.78005056e-05] [ 1.49255279e-04 1.35313449e-04 1.36294066e-04 ..., 8.62639847e-05 9.09304063e-05 7.84873169e-05] [ 1.88674124e-04 1.92549213e-04 1.94561864e-04 ..., 1.27251725e-04 1.32504809e-04 1.19707440e-04] ..., [ 1.16313098e-05 2.90295617e-05 3.99510497e-05 ..., 1.52137304e-05 1.43487523e-05 3.92287642e-05] [ 1.58036700e-05 3.00034379e-05 3.78270972e-05 ..., 1.91663956e-05 2.44618265e-05 2.47100536e-05] [ 5.88701713e-05 3.20351268e-05 1.23424729e-05 ..., 2.63503805e-05 4.25346609e-05 3.44451908e-05]] # test_label test_labels = [2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3]

以上のようなデータで行っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

TypeError: 'numpy.float64' object is not callable
の前のトレースバックが必要ですね。
できれば、エラーの全文を追記してください。


python

1f1_scoring = make_scorer(f1_score, average='micro', pos_label=1)

投稿2018/01/06 16:35

編集2018/01/07 03:24
mkgrei

総合スコア8560

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

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

gymgym

2018/01/07 03:01

申し訳ございません。 エラー全文追加させていただきました。 よろしくお願い致します。
gymgym

2018/01/07 17:16

回答ありがとうございます。 質問させていただきたいのですが、 forest_grid_search.fit(train_features, train_labels) の部分でエラーがでているのですが、 f1_scoring = make_scorer(f1_score(test_labels, forest.predict(test_features), average='micro'), pos_label=1) の部分が原因なのでしょうか。 また、関数はf1_score(test_labels, forest.predict(test_features), average='micro')では不十分なのでしょうか。 よろしくお願い致します。
mkgrei

2018/01/08 01:50

初めてf1_scoringが使用された時にエラーが出ています。 不十分というより、それは関数が実行されて実数が返ってきています。 関数ではありません。
gymgym

2018/01/12 06:34

f1_scoring = make_scorer(f1_score, pos_label=1) 以上のようなことでしょうか。 このようにすると、 Traceback (most recent call last): File "alpha01_2.py", line 103, in <module> forest_grid_search.fit(X_train, y_train) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/model_selection/_search.py", line 945, in fit return self._fit(X, y, groups, ParameterGrid(self.param_grid)) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/model_selection/_search.py", line 564, in _fit for parameters in parameter_iterable File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 758, in __call__ while self.dispatch_one_batch(iterator): File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 608, in dispatch_one_batch self._dispatch(tasks) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 571, in _dispatch job = self._backend.apply_async(batch, callback=cb) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 109, in apply_async result = ImmediateResult(func) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 326, in __init__ self.results = batch() File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 131, in __call__ return [func(*args, **kwargs) for func, args, kwargs in self.items] File "/Users/anaconda/lib/python3.6/site-packages/sklearn/externals/joblib/parallel.py", line 131, in <listcomp> return [func(*args, **kwargs) for func, args, kwargs in self.items] File "/Users/anaconda/lib/python3.6/site-packages/sklearn/model_selection/_validation.py", line 260, in _fit_and_score test_score = _score(estimator, X_test, y_test, scorer) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/model_selection/_validation.py", line 288, in _score score = scorer(estimator, X_test, y_test) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/metrics/scorer.py", line 98, in __call__ **self._kwargs) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/metrics/classification.py", line 692, in f1_score sample_weight=sample_weight) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/metrics/classification.py", line 806, in fbeta_score sample_weight=sample_weight) File "/Users/anaconda/lib/python3.6/site-packages/sklearn/metrics/classification.py", line 1018, in precision_recall_fscore_support "choose another average setting." % y_type) ValueError: Target is multiclass but average='binary'. Please choose another average setting. 以上のようなエラーがでて、averageをどこで指定したらよいかわかりません。 何度も申し訳ないのですが、よろしくお願い致します。
mkgrei

2018/01/12 13:48

sklearn.metrics.make_scorer(score_func, greater_is_better=True, needs_proba=False, needs_threshold=False, **kwargs) Score function (or loss function) with signature score_func(y, y_pred, **kwargs). 公式ドキュメントを読むと以上のことが書いてあるので、 f1_scoring = make_scorer(f1_score, pos_label=1, average='micro') とすればよいことがわかります。
gymgym

2018/01/13 07:03

mkgreiさんのおかげでうまく実行することができました。 初歩的な質問ばかりですみませんでした。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問