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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

機械学習

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

Python

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

Q&A

0回答

2225閲覧

estimator should be an estimator implementing 'fit' method,の対処方法

kouji_39

総合スコア164

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

機械学習

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

Python

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

0グッド

0クリップ

投稿2021/04/07 21:55

1.質問内容
lightGBMの回帰予測をしています。
GSCVをfitさせようとした時に、下記のエラーが出ます。
estimator should be an estimator implementing 'fit' method,<lightgbm.basic.Booster object at 0x7f3c8651d8d0> was passed
上記をgoogle検索した場合、「LightGBMはこのtrain()方法を使用してトレーニングされているfit()ため、このグリッド検索は使用できない。」
とありました。対処方法として、LGBMRegressorを使用するとありました。しかし、LGBMRegressorでの方法は、うまく回帰できない((注)今後に使いたい個人データに対しての話ですが、ある説明変数だけに依存していまいます)ので、pythonAPIのLightGBMを使用したいと考えています。
よって、pythonAPIのLightGBM使用時のGSCVの使い方が知りたいです。

2.参考コード

python

1# ライブラリのインポート 2import pandas as pd # 基本ライブラリ 3import numpy as np # 基本ライブラリ 4import matplotlib.pyplot as plt # グラフ描画用 5import seaborn as sns; sns.set() # グラフ描画用 6import warnings # 実行に関係ない警告を無視 7warnings.filterwarnings('ignore') 8import lightgbm as lgb #LightGBM 9from sklearn import datasets 10from sklearn.model_selection import train_test_split # データセット分割用 11from sklearn.metrics import mean_squared_error # モデル評価用(平均二乗誤差) 12from sklearn.metrics import r2_score # モデル評価用(決定係数) 13 14# データフレームを綺麗に出力する関数 15import IPython 16def display(*dfs, head=True): 17 for df in dfs: 18 IPython.display.display(df.head() if head else df) 19 20# Boston データセットの読み込み 21boston = datasets.load_boston() 22df = pd.DataFrame(boston.data, columns=boston.feature_names) # データフレームへの格納 23 24# データの確認 25print(df.shape) # データサイズの確認(データ数,特徴量数(変数の個数)) 26display(df) # df.head()に同じ(文中に入れるときはdisplay()を使う) 27 28# 説明変数,目的変数 29X = df.drop('CRIM',axis=1).values # 説明変数(CRIM以外の特徴量) 30y = df['CRIM'].values # 目的変数(CRIM) 31 32# トレーニングデータ,テストデータの分割 33X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.20, random_state=2) 34 35# 学習に使用するデータを設定 36lgb_train = lgb.Dataset(X_train, y_train) 37lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train) 38 39# LightGBM parameters 40params = { 41 'task': 'train', 42 'boosting_type': 'gbdt', 43 'objective': 'regression', # 目的 : 回帰 44 'metric': {'rmse'}, # 評価指標 : rsme(平均二乗誤差の平方根) 45 'num_iteration': 1000, #1000回学習 46 'verbose': 0 47} 48 49# モデルの学習 50model = lgb.train(params, # パラメータ 51 train_set=lgb_train, # トレーニングデータの指定 52 valid_sets=lgb_eval, # 検証データの指定 53 early_stopping_rounds=100 # 100回ごとに検証精度の改善を検討 → 精度が改善しないなら学習を終了(過学習に陥るのを防ぐ) 54 ) 55 56#GSCV 57import sklearn 58from sklearn.model_selection import GridSearchCV 59tuned_params = {'max_depth': [5, 10, 30], 'num_leaves':[6,12,23], 'min_data_in_leaf': [1,10,20],'learning_rate':[0.05,0.1,0.2]} 60gscv = GridSearchCV(model, param_grid=tuned_params, 61 cv=3, scoring='neg_mean_squared_error') 62gscv.fit(X_train, y_train)#error発生部分 63#パラメーターチューニング後のスコア 64params = { 65 'task': 'train', 66 'boosting_type': 'gbdt', 67 'objective': 'regression', # 目的 : 回帰 68 'metric': {'rmse'}, # 評価指標 : rsme(平均二乗誤差の平方根) 69 'num_iteration': 1000, #1000回学習 70 'learning_rate':gscv.best_params_['learning_rate'], 71 'num_leaves':gscv.best_params_['num_leaves'], 72 'min_data_in_leaf':gscv.best_params_['min_data_in_leaf'], 73 'max_depth':gscv.best_params_['max_depth'], 74 'verbose': 0 75} 76 77model = lgb.train(params, # パラメータ 78 train_set=lgb_train, # トレーニングデータの指定 79 valid_sets=lgb_eval, # 検証データの指定 80 early_stopping_rounds=100 # 100回ごとに検証精度の改善を検討 → 精度が改善しないなら学習を終了(過学習に陥るのを防ぐ) 81 ) 82# 訓練データ、テストデータの予測 83y_train_pred = model.predict(X_train) 84y_test_pred = model.predict(X_test) 85 86# 正解と予測のMSEを計算 87print('MSE train: %.2f, test: %.2f' % ( 88 mean_squared_error(y_train, y_train_pred), 89 mean_squared_error(y_test, y_test_pred))) 90

3.補足情報(FW/ツールのバージョンなど)
開発環境:Google Colaboratory
プログラム言語:python3
OS:windows10 Home
CPU:Intel(R) Core(TM) i7-7500U CPU@2.70GHz 2.90GHz

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

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

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

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

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

kouji_39

2021/04/08 02:19

optunaの紹介ありがとうございました。 optunaについては、「Kaggleデータ分析入門」(株式会社翔泳社)を持っていたので、そちらでハイパラ調整してみました。一通りは動きましたが、できれば他のXGBoostとCatBoostをグリッドサーチを使ったので、統一したかったのです。参考情報ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問