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

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

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Google Colaboratory

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

機械学習

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

Python

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

Q&A

解決済

1回答

3780閲覧

lightgbmによる回帰予測ができない

kouji_39

総合スコア164

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Google Colaboratory

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2021/02/26 04:09

lightgbmを使い、回帰予測を行うのが目的です。
Lightgbmプログラムでのエラーメッセージはありません。
しかし、予測データがうまく回帰できません。
ご助言等をお願いいたします。

1.該当コード

python3 # ライブラリのインポート %matplotlib inline import lightgbm as lgb import matplotlib.pyplot as plt import numpy as np #from sklearn.ensemble import lightgbmLGBMRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error from sklearn.metrics import r2_score import pandas as pd #データベース関連等のコードについては(略) #GridSearchのコード import sklearn print(sklearn.__version__) from sklearn.model_selection import GridSearchCV params = {'n_estimators': [10, 50, 100,1000], 'max_depth': [5, 10, 50]} gb = lgb.LGBMRegressor(random_state=0) gscv = GridSearchCV(gb, param_grid=params, verbose=1, cv=3, scoring='neg_mean_squared_error') gscv.fit(X_train, y_train) gb= lgb.LGBMRegressor(n_estimators=gscv.best_params_['n_estimators'], max_depth=gscv.best_params_['max_depth'], random_state=0) gb.fit(X_train, y_train) y_pred2 = gb.predict(X_test) rf_mse = mean_squared_error(y_test, y_pred2) # 勾配ブースティング回帰のモデルを作成 model = lgb.LGBMRegressor(n_estimators=gscv.best_params_['n_estimators'],criterion='mse', max_depth=gscv.best_params_['max_depth'],random_state=0) # モデルの訓練 model.fit(X_train, y_train) y_train_pred = model.predict(X_train) y_test_pred = model.predict(X_test) # 残差プロット plt.figure(figsize=(8,4)) #プロットのサイズ指定 plt.scatter(y_train_pred, y_train_pred - y_train, c='red', marker='o', edgecolor='white', label='Training data') plt.scatter(y_test_pred, y_test_pred - y_test, c='blue', marker='s', edgecolor='white', label='Test data') plt.xlabel('Predicted values') plt.ylabel('Residuals') plt.legend(loc='upper left') plt.hlines(y=0, xmin=-10, xmax=50, color='black', lw=2) plt.xlim([-10, 50]) plt.tight_layout() plt.show()

2.プロットデータの出力結果
イメージ説明

3.プロットデータの出力結果のコメント
プロットデータの出力結果に見られるように、8~9と18くらいの2通りしか予測
されていない、波曲線(sinカーブのようなもの)のデータに対してを予測しており、
連続での予測値が出ないとおかしい。

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

データセットに問題があるか、以前の実行結果が中途半端に残っていませんでしょうか? もしくはデータセットとハイパーパラメータの組合せに問題があるのかもしれません。

質問者様のコードの#データベース関連等のコードについては(略)の部分に以下を挿入してみると、WARNINGはたくさん出るものの、正常そうな出力を得ました。よって、回帰のコードそのものは問題無いように思われます。

なお、グリッドサーチ+回帰という複雑なことは、普通の回帰の動作を確認してから取り組んだ方がよいです。

挿入したコード

Python

1from sklearn.datasets import load_boston 2X, y = load_boston(return_X_y=True) 3X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8)

出力結果

イメージ説明

追伸

環境問題かと思って、ローカル環境だけではなくColabでも実行してみましたが、問題無く同じ結果を得ました。ColabだとWARNINGは出ないです。

投稿2021/02/26 22:13

編集2021/02/27 08:47
toast-uz

総合スコア3266

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

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

kouji_39

2021/02/27 05:16 編集

toast-uzさん、回答ありがとうございます。 X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8,random_state=0)で、 boston住宅価格をやってみました。 MSE train:2.00、test:24.50の結果で、うまく回帰できていました。 他の勾配ブースティングとして、 XGBoostが、MSE train:1.53、test:17.70となり、 CatBoostが、MSE train:0.01、test:22.11となりました。 (CatBoostのtrain誤差が小さくなるようです) 上記の3種類の勾配ブースティングアルゴリズムの比較をしたいのですが、 助言を活かして、シンプルな予測モデルで試行して、ハイパーパラメータ 調整をしていくと今回の不具合の原因がつかめるなと思いました。 今後ともよろしくお願いいたします。
toast-uz

2021/02/27 08:45

確かに、データとハイパラの相性?みたいなものかもですね。続報をお待ちします。
kouji_39

2021/02/28 22:17

引き続き改善方法を探索してみたいです。何か情報があれば、お願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問