Xgboostについての質問です(プログラミング関連の質問でないことご容赦ください)
Xgboostは欠損値があっても、内部で自動的に補完してくれるそうですが、どのようなアルゴリズムで欠損値を補完しているのでしょうか?
下記のプログラムはPythonでirisデータセットに対して、意図的に欠損値を代入しXgboostでmodelを作成したものです
Python
1# 学習関連 2import xgboost as xgb 3from sklearn import model_selection 4import pandas as pd 5import numpy as np 6 7# データセット 8from sklearn import datasets 9iris = datasets.load_iris() 10iris_df = pd.DataFrame(iris.data) 11iris_df = iris_df.rename(columns={ 12 0: 'sepal_length', 13 1: 'sepal_width', 14 2: 'petal_length', 15 3: 'petal_width'}) 16iris_df['target'] = iris.target 17 18# 訓練データとテストデータに分割 19train_df, test_df = model_selection.train_test_split(iris_df, test_size=0.3) # 30%をテスト 20train_df_y = train_df[['target']] 21train_df_x = train_df.copy().drop('target', axis=1) 22test_df_y = test_df[['target']] 23test_df_x = test_df.copy().drop('target', axis=1) 24 25# 意図的に欠損値を挿入 26import random 27for i in range(0,len(train_df_x)): 28 a = int(random.uniform(0, 4)) 29 train_df_x.values[i][a]=None 30 a = int(random.uniform(0, 4)) 31 train_df_x.values[i][a]=None 32 33# XGBClassifierの基本モデル 34clf = xgb.XGBClassifier() 35# ハイパーパラメータ探索 36clf_cv = model_selection.GridSearchCV(clf, {'max_depth': [2,4,6], 'n_estimators': [50,100,200]}, verbose=1) 37clf_cv.fit(train_df_x, train_df_y) 38# 良さげなパラメータで学習しなおす 39clf = xgb.XGBClassifier(**clf_cv.best_params_) 40clf.fit(train_df_x, train_df_y) 41 42# 予測 43prediction = clf.predict(test_df_x) 44print("正答率は") 45print(np.sum(np.array(test_df_y["target"])==prediction)/len(np.array(test_df_y["target"])))
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。