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

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

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

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

Python

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

Q&A

解決済

2回答

6104閲覧

Alightgbmの種類 pridict_probaを持たないlightgbm

esklia

総合スコア81

Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

Python

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

0グッド

0クリップ

投稿2021/07/14 09:15

編集2021/07/14 10:05

lightgbmについて質問です。サイキットラーンAPIやなんとかAPIなどいろいろな種類がありますが、

conda listで以下のように表示される
lightgbm 3.1.1 py38hd77b12b_0
lightgbmは何のバージョン?だと考えられますか?おそらくインポートするときはimport lightgbm as lgb
というコードからしてサイキットラーンAPIなどではなく、素?のlightgbmをアナコンダでインストールしたと考えています。

補足 おそらくconda.orgのサイトを見て以下のコードのうちどれかでダウンロードしました。

conda install -c conda-forge lightgbm conda install -c conda-forge/label/cf201901 lightgbm conda install -c conda-forge/label/cf202003 lightgbm

補足2

<module 'lightgbm' from 'C:\Users\USER\anaconda3\envs\KASOUKANKYOU\lib\site-packages\lightgbm\__init__.py'>

また、その場合以下のドキュメントにあるように、
https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMClassifier.html#lightgbm.LGBMClassifier.predict_proba

pridict_probaメソッドを持つはずなのですが、これが使えない理由を知りたいです。

error

1 2predpro = gbm.predict_proba(test_x) 3 4Traceback (most recent call last): 5 File "C:\Users\hoge\anaconda3\envs\hoge\lib\site-packages\optuna\_optimize.py", line 216, in _run_trial 6 value_or_values = func(trial) 7 File "c:\Users\hoge\作業ディレクトリ\作業ディレクトリ\作業ディレクトリ\base_lightgbm_optuna_plus_logeer copy.py", line 79, in objective 8 predpro = gbm.predict_proba(test_x) 9AttributeError: 'Booster' object has no attribute 'predict_proba'
import matplotlib.pyplot as plt; import numpy as np ;import pandas as pd ;import seaborn as sns; pd.set_option('display.max_columns',10000);np.set_printoptions(threshold=90000) import os, sys, datetime import logging from logging import StreamHandler, DEBUG, Formatter, FileHandler, getLogger import chainer as ch import optuna import lightgbm as lgb def objective(trial): PATH = './pickle/' data = pd.read_pickle(f'{PATH}prd_tr.pkl') test = pd.read_pickle(f'{PATH}prd_te.pkl') target = pd.read_pickle(f'{PATH}y.pkl') train_x, test_x, train_y, test_y = train_test_split(data, target, test_size=0.25) dtrain = lgb.Dataset(train_x, label=train_y) param = { 'objective': 'binary', 'metric': 'auc', 'lambda_l1': trial.suggest_loguniform('lambda_l1', 1e-8, 10.0), 'lambda_l2': trial.suggest_loguniform('lambda_l2', 1e-8, 10.0), 'num_leaves': trial.suggest_int('num_leaves', 2, 256), 'feature_fraction': trial.suggest_uniform('feature_fraction', 0.4, 1.0), 'bagging_fraction': trial.suggest_uniform('bagging_fraction', 0.4, 1.0), 'bagging_freq': trial.suggest_int('bagging_freq', 1, 7), 'min_child_samples': trial.suggest_int('min_child_samples', 5, 100), } gbm = lgb.train(param, dtrain) predpro = gbm.predict_proba(test_x) preds = gbm.predict(test_x) pred_labels = np.rint(preds) accuracy = sklearn.metrics.accuracy_score(test_y, pred_labels) rocauc = roc_auc_score(test_y.values.tolist(), predpro) pruning_callback = optuna.integration.LightGBMPruningCallback(trial, 'auc') logger.info(' accuracy:{}'.format(accuracy)) return accuracy if __name__ == "__main__": study = optuna.create_study(direction="maximize") study.optimize(objective, n_trials=10) # n_trials=300がPBの最高スコア # study.best_trial #best_valueを出したときの試行内容 trial = study.best_trial PATH = './pickle/' train = pd.read_pickle(f'{PATH}prd_tr.pkl') test = pd.read_pickle(f'{PATH}prd_te.pkl') y = pd.read_pickle(f'{PATH}y.pkl') dtrain = lgb.Dataset(train, label=y) gbm = lgb.train(trial.params, dtrain) preds = gbm.predict(test) pred_labels = np.abs(np.rint(preds)) pred_labels = pred_labels.astype(np.int)

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

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

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

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

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

guest

回答2

0

AttributeError: 'Booster' object has no attribute 'predict_proba'

エラーメッセージの意味は"Boosterオブジェクトは属性predict_probaを持っていない"。


https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.train.html#lightgbm.train

Return type Booster

trainメソッドの返り値はBoosterオブジェクトで間違いない。


https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.Booster.html#lightgbm.Booster

Boosterオブジェクトはpredict_probaメソッドを持っていないということで間違いない。

投稿2021/07/14 10:15

quickquip

総合スコア11202

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

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

esklia

2021/07/14 10:20

前のメソッドの返り血のオブジェクトを代入してそこに紐づくメソッドが使えるというイメージをあまり持っていなかったので大変参考になりました。ありがとうございます。 また、初歩的な質問で恐縮ですが、この場合lightGBMのpythonAPI?というものについて少し詳しく意味をうかがってもよろしいでしょうか。当方、数種のAPIを使用したことがあるのですが、この意味が分かりかねております。特にラッパーと区別して教授いただけないでしょうか(例えばkerasはtensorflowのラッパーだったと記憶しております)。
quickquip

2021/07/14 10:42

Pythonから使うときのインタフェースはこうなってますよ 程度の意味でいいのでは。
esklia

2021/07/14 10:48

承知いたしました。内部構造理解の一助になるかとも思ったのですが、そのように覚えておくことにします。
guest

0

ベストアンサー

以下のコードを実行してみてください。
これで表示される結果で、何者かはわかります。

それでわからない場合は、結果を質問に追加してください。

python

1import lightgbm as lgb 2print(lgb)

投稿2021/07/14 09:59

ppaul

総合スコア24668

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

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

esklia

2021/07/14 10:07 編集

いつもご回答誠にありがとうございます。 <module 'lightgbm' from 'C:\Users\USER\anaconda3\envs\KASOUKANKYOU\lib\site-packages\lightgbm\__init__.py'> と表示されました。オブジェクトがモジュールである?ということを表しているようですが、これはどのような意味なのでしょうか?
esklia

2021/07/14 10:07

また、僭越ながら__init__.pyが出力されたことについての意味を合わせてうかがってもよろしいでしょうか?
esklia

2021/07/14 10:10

__init__.pyは初期化の時のみ実行されるファイルで、今回のようなPRINT文の出力がINIT.PYをさすことの意味が分かりかねております。
esklia

2021/07/14 10:14

lightgbm booster で検索し、おそらくpython APIであると判明しました。以下のサイトより、 https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.Booster.html pridict_probaメソッドは存在せず、おそらくですがデフォルトで確率しか返さない (scikit-learnだと大抵ラベル予測のpredictと確率予測のpredict_probaに分かれています) APIだと考えたのですが、この素人の推測は妥当でしょうか?
ppaul

2021/07/14 11:33

オブジェクトがモジュールである?ということを表しているようですが、これはどのような意味なのでしょうか? lightgbmというパッケージが読み込まれて、Pythonのモジュールオブジェクトとなりました、という意味です。 ファイルシステム的にいうとパッケージはディレクトリで、モジュールは.pyファイルです。パッケージには通常__init__.pyがあり、そのパッケージをimportすると、__init__.pyが読み込まれます。 詳しいことは以下に書いてありますが、あまりわかりやすくないかもしれません。 https://docs.python.org/ja/3/reference/import.html?highlight=%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8#packages
esklia

2021/07/15 03:06

ありがとうございます。モジュールオブジェクトを知らず、import時にinitが読み込まれることもほぼ完全に忘れていたので大変勉強になりました。いただいたドキュメントを読んでもあまり今のレベルでは理解できませんでしたので、地道に都度勉強していこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問