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

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

ただいまの
回答率

91.24%

  • Python

    4258questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 65

asoaso

score 40

forest = RandomForestClassifier(min_samples_leaf=3, random_state=0)
forest.fit(train_features, train_labels)

print('f1 score: {:.3f}'.format(f1_score(test_labels, forest.predict(test_features), average = 'micro')))

# ハイパーパラメータ
forest_grid_param = {
    'n_estimators': [100],
    'max_features': [1, 'auto', None],
    'max_depth': [1, 5, 10, None],
    'min_samples_leaf': [1, 2, 4,]
}

# スコア方法をF1に設定
f1_scoring = make_scorer(f1_score,  pos_label=1)

# グリッドサーチで学習
forest_grid_search = GridSearchCV(RandomForestClassifier(random_state=0, n_jobs=-1), forest_grid_param, scoring=f1_scoring, cv=4)
forest_grid_search.fit(train_features, train_labels)

# 結果
print('Best parameters: {}'.format(forest_grid_search.best_params_))
print('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]

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/07 12:01

    申し訳ございません。
    エラー全文追加させていただきました。

    よろしくお願い致します。

    キャンセル

  • 2018/01/07 12:25

    http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html
    関数を引数にとります。

    キャンセル

  • 2018/01/08 02: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')では不十分なのでしょうか。

    よろしくお願い致します。

    キャンセル

  • 2018/01/08 10:50

    初めてf1_scoringが使用された時にエラーが出ています。

    不十分というより、それは関数が実行されて実数が返ってきています。
    関数ではありません。

    キャンセル

  • 2018/01/12 15: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をどこで指定したらよいかわかりません。
    何度も申し訳ないのですが、よろしくお願い致します。

    キャンセル

  • 2018/01/12 22: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')

    とすればよいことがわかります。

    キャンセル

  • 2018/01/13 16:03

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

    本当にありがとうございました。

    キャンセル

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

ただいまの回答率

91.24%

関連した質問

同じタグがついた質問を見る

  • Python

    4258questions

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