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

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

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

XGBoostは、アンサンブル学習と決定木を組み合わせた手法です。弱学習器の構築時に、以前構築された弱学習器の結果を用いて弱学習器を構築。高度な汎化能力を持ち、勾配ブースティングとも呼ばれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

XGBoostの分類での「name 'gamma' is not defined」エラー対処方法

kouji_39
kouji_39

総合スコア115

XGBoost

XGBoostは、アンサンブル学習と決定木を組み合わせた手法です。弱学習器の構築時に、以前構築された弱学習器の結果を用いて弱学習器を構築。高度な汎化能力を持ち、勾配ブースティングとも呼ばれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

2回答

0評価

0クリップ

205閲覧

投稿2022/05/30 08:10

1.前提・実現したいこと
KaggleチュートリアルTitanicについて、OptunadeXGBoost分類をしています。
なお、titanic号の乗客のデータセットはKaggleからダウンロードしました。
参考ブログ(下記※)は以下です。
https://qiita.com/kuroneko-hornet/items/9e3e8ffba75c1dbf11c6「XGBoostをoptunaでチューニングしてtitanicを解く」
上記のコードを、利用させてもらいましたが、エラーが発生します。対処方法をお願いします。

2.発生している問題・エラーメッセージ
3.のソースコード実行で下記のエラーメッセージが発生

NameError: name 'gamma' is not defined

NameError Traceback (most recent call last)
<ipython-input-41-263240bbee7e> in <module>()
----> 1 main()

6 frames
<ipython-input-39-60f9057c5dc4> in objective(df, df_test, y, trial)
5 round_num = trial.suggest_int('round_num',1,30)
6
----> 7 bst = train(df,max_depth,learning_rate,round_num,gamma,min_childe_weigh,subsample,colsample_bytree,alpha,lamb)
8 answer = predict(bst,df_test).round().astype(int)
9 score = accuracy_score(answer.round(),y)

NameError: name 'gamma' is not defined

3.該当のソースコード

python3

import pandas as pd import xgboost as xgb # optuna ! pip install optuna import optuna from functools import partial from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score def train(df,max_depth,learning_rate,num_round): train_x = df.drop('Survived',axis=1) train_y = df.Survived dtrain = xgb.DMatrix(train_x,label=train_y) param = { 'max_depth':max_depth,'learning_rate':learning_rate,'objective':'reg:logistic' } bst = xgb.train(param,dtrain,num_round) return bst def preprocess(df): df['Fare'] = df ['Fare'].fillna(df['Fare'].mean()) df['Age'] = df['Age'].fillna(df['Age'].mean()) df['Embarked'] = df['Embarked'].fillna('Unknown') df['Sex'] = df['Sex'].apply(lambda x: 1 if x == 'male' else 0) df['Embarked'] = df['Embarked'].map( {'S':0,'C':1,'Q':2,'Unknown':3} ).astype(int) df = df.drop(['Cabin','Name','PassengerId','Ticket'],axis=1) return df def predict(bst,df): return bst.predict(xgb.DMatrix(df)) def objective(df, df_test, y,trial): #目的関数 max_depth = trial.suggest_int('max_depth',1,30) learning_rate = trial.suggest_uniform('learning_rate',0.0,1) round_num = trial.suggest_int('round_num',1,30) bst = train(df,max_depth,learning_rate,round_num,gamma,min_childe_weigh,subsample,colsample_bytree,alpha,lamb) answer = predict(bst,df_test).round().astype(int) score = accuracy_score(answer.round(),y) return 1.0 - score def main(): df_original = pd.read_csv("(自分のPCのパス/Titanic/train.csv") df_test = preprocess(df_original.tail(100)) df_train = preprocess(df_original.head(791)) y = df_test['Survived'] df_test = df_test.drop('Survived',axis=1) #optunaの前処理 obj_f = partial(objective, df_train, df_test, y) #セッション作成 study = optuna.create_study() #回数 study.optimize(obj_f, n_trials=100) max_depth = study.best_params['max_depth'] learning_rate = study.best_params['learning_rate'] round_num = study.best_params['round_num'] bst = train(df_train,max_depth,learning_rate,round_num) print('\nparams :',study.best_params) answer = predict(bst,df_train.drop('Survived',axis=1)).round().astype(int) print('train score :',accuracy_score(answer.round(),df_train['Survived'])) answer = predict(bst,df_test).round().astype(int) xgb.plot_importance(bst) print('test score :',accuracy_score(answer.round(),y)) #実行 main()

4.自分で調べたことや試したこと
name 'gamma' is not definedを調べたが有用な情報は無し。
gammaは、「gamma(float)–ツリーのリーフノードにさらにパーティションを作成するために必要な最小の損失削減。」とのこと。

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

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

XGBoost

XGBoostは、アンサンブル学習と決定木を組み合わせた手法です。弱学習器の構築時に、以前構築された弱学習器の結果を用いて弱学習器を構築。高度な汎化能力を持ち、勾配ブースティングとも呼ばれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。