実現したいこと
XGBoostを使ってロジスティック回帰分析を行おうとしています。
学習用データ(train.csv)をtrain dataとtest dataに分けてロジスティック回帰分析を実行しました。
python
1pred = model.predict(dtest).round()
ここで得られたモデルをテストデータ(test.csv)に適用して、予測をすることが目的です。
発生している問題・エラーメッセージ
test.csvもtrain.csvでやったのと同じようなデータに整えてdf_testを作成しました。
モデルを当てはめるために次のコードを実行しました。
python
1pred = model.predict(df_test)
これを実行するとすると、TypeError: ('Expecting data to be a DMatrix object, got: ', <class 'pandas.core.frame.DataFrame'>)
と出てきてしまいます。
試したこと
python
1pred = reg.predict(df_test)
などを試しましたが、エラーが出てしまいます。
XGBoostで回帰分析をやった時も学習用データでモデルを作って、今回と同じようにモデルをテストデータにあてはめて予測できたのですが、今回はどうしてうまく行かないのか原因がわかりません。お助け下さい。
実際のコード
csvを読み込んで、XGBoostでロジスティック回帰分析をして、モデルを得て、モデルをテストデータに適用するところまでのコードは次の通りです。
test.csvには目的変数となる'Outcome'は与えられていません。
python
1 2# Call main libraries 3import numpy as np 4import pandas as pd 5import matplotlib.pyplot as plt 6import seaborn as sns 7 8# Loading train data 9df_train = pd.read_csv('/***/train.csv') 10 11# Install XGBoost 12import xgboost as xgb 13 14# Install other libraries 15import tensorflow as tf 16from tensorflow.keras.models import Sequential 17from tensorflow.keras.layers import Activation, Dense, Dropout, Input, BatchNormalization 18from sklearn.model_selection import train_test_split 19from sklearn.metrics import mean_squared_error 20 21# データ分割 22# df_trainをtrainとtestに分ける 23# stratifyに設定したデータが均一になるように分割 24train, test = train_test_split(df_train, test_size = 0.1, stratify = df_train["target"]) 25 26# 説明変数、目的変数を格納 27X_train = train.drop(['id','target'], axis=1) 28y_train = train['target'] 29 30X_test = test.drop(['id','target'], axis=1) 31y_test = test['target'] 32 33print(X_train.shape, y_train.shape) 34print(X_test.shape, y_test.shape) 35 36# データ形式の変換 37dtrain = xgb.DMatrix(X_train, y_train) 38dtest = xgb.DMatrix(X_test, y_test) 39 40# パラメータ設定 41# binary: 二値分類 42params = { 43 "objective": "binary:logistic", 44 "eval_metric": "logloss", 45 } 46 47# 履歴保存用の変数 48history = {} 49 50# 学習 51model = xgb.train( 52 params = params, 53 dtrain = dtrain, 54 evals = [(dtrain, "train"), (dtest, "test")], 55 evals_result = history, 56 num_boost_round = 100, 57 early_stopping_rounds = 10, 58) 59 60plt.plot(history["train"]["logloss"],label = "train") 61plt.plot(history["test"]["logloss"],label = "test") 62plt.legend() 63plt.xlabel('rounds') 64plt.ylabel('logloss') 65plt.show() 66 67# XGBoostの評価 68pred = model.predict(dtest).round() 69print(pred) #[:5] 70print(y_test) #[:5] 71 72# 正答率 73from sklearn.metrics import accuracy_score 74print(accuracy_score(y_test, pred)) 75 76## テストデータで実行する 77 78# Loading test data 79df_test = pd.read_csv('/***/test.csv') 80 81# drop 'index' and save with another name 82df_test2 = df_test.drop('id', axis=1) 83 84# データ形式の変換して、確認 85df_test3 = xgb.DMatrix(df_test2) 86print(type(df_test3)) 87 88# train dataでの予測モデルをTest dataに適用する 89# 予測 90pred = model.predict(df_test3).round() 91 92# 予測結果をcsvに保存する 93 94sample = pd.read_csv('/****/sample_submission.csv', header=None) 95sample[1] = pred.astype('int') 96sample.to_csv('/***/sample_submission_20230428.csv',index=None, header=None) 97

回答1件
あなたの回答
tips
プレビュー