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

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

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

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

Python 3.x

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

解決済

ValueError: could not convert string to float: 'Kelly, Mr. James'の対処方法

kouji_39
kouji_39

総合スコア115

XGBoost

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

Python 3.x

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

2回答

0評価

0クリップ

270閲覧

投稿2022/05/30 12:16

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

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

ValueError Traceback (most recent call last)
<ipython-input-178-569fcac6bfa9> in <module>()
6 # ----- Submit dataの作成 -------
7 PassengerId=test_data['PassengerId']
----> 8 predictions = predict(bst,test_x)
9
10

2 frames
/usr/local/lib/python3.7/dist-packages/xgboost/core.py in _init_from_npy2d(self, mat, missing, nthread)
476 # we try to avoid data copies if possible (reshape returns a view when possible
477 # and we explicitly tell np.array to try and avoid copying)
--> 478 data = np.array(mat.reshape(mat.size), copy=False, dtype=np.float32)
479 handle = ctypes.c_void_p()
480 missing = missing if missing is not None else np.nan

ValueError: could not convert string to float: 'Kelly, Mr. James'

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,round_num,gamma,min_childe_weigh,subsample,colsample_bytree,alpha,lamb): 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,round_num) 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) gamma = trial.suggest_int('gamma',0.0,1.0) min_childe_weigh = trial.suggest_int('min_childe_weigh',0.0,1.0) subsample = 1 colsample_bytree = trial.suggest_int('colsample_bytree',0.0,1.0) alpha = trial.suggest_int('alpha',0.0,1.0) lamb = 1 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 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'] gamma = study.best_params['gamma'] min_childe_weigh = study.best_params['min_childe_weigh'] colsample_bytree = study.best_params['colsample_bytree'] alpha = study.best_params['alpha'] subsample = 1 lamb = 1 bst = train(df_train,max_depth,learning_rate,round_num,gamma,min_childe_weigh,subsample,colsample_bytree,alpha,lamb) 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)) print(answer) test_data = pd.read_csv("(自分のPCのディレクトリ)/Titanic/test.csv") print(test_data) # dfの情報 test_data.info() test_x = test_data.values # ----- Submit dataの作成 ------- PassengerId=test_data['PassengerId'] predictions = predict(bst,test_x) submission = pd.DataFrame({"PassengerId": PassengerId, "Survived": predictions.astype(np.int32)}) submission.to_csv("my_submission_kaggle.csv", index=False) コード

4.自分で調べたことや試したこと
predictions = predict(bst,test_x)でエラーが発生、文字列を除いて、test_xを作るのだろうと思うが、スマート
な方法がわかりません。XGBoostは、NaNがあっても使えると聞いたことがあるが、文字は除く必要があるのだろうか?

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日にリリースされました。