将 xgboost 二进制预测保存到提交的 csv 文件

Saving xgboost binary prediction to submission csv file

我有 'train.csv' 和 'test.csv' 个文件。前者包含 'Id'、一个特征列表和一个包含值的 'Status' 列,'test.csv' 文件包含相同的列,但 'Status' 除外。

我的任务是在 'train.csv' 文件上训练 XGboost 模型并预测 'test.csv' 文件的二进制结果 'Status',然后保存 'Id' 和 'Status' 到单独的 csv 文件以供提交。

我可以在 'train' 文件上训练 XGboost,并且 roc_auc 分数非常好(0.8 以上)。我花了几个小时在互联网上搜索如何对 'test' 文件进行预测并将它们保存到 'submission' 文件。令我惊讶的是,尽管这是一项相当常见的任务,但我找不到任何能够可靠地执行上述操作的脚本。

我的 'train.csv' 文件的工作代码以防万一:

predict = pd.read_csv("train.csv")
predictors =['par48','par52','par75','par82','par84','par85','par86','par87','par89','par108','par109','par132','par156','par165','par167','par175','par190','par197']
X, y = predict[predictors], predict['Status']
X_train, X_test, y_train, y_test= train_test_split(X, y, test_size=0.2, random_state=123)
xg_cl=xgb.XGBClassifier(objective='binary:logistic',n_estimators=10,seed=123)
xg_cl.fit(X_train, y_train)
preds=xg_cl.predict(X_test)
accuracy = float(np.sum(preds==y_test))/y_test.shape[0]
print("accuracy: %f" % (accuracy))
print(xg_cl.feature_importances_)
print(roc_auc_score(y_test, xg_cl.predict_proba(X_test)[:,1]))

你有工作代码要分享吗?谢谢!

好吧,model.predict 代码 returns 预测结果采用 array 格式,因此,首先您需要读取单独的 test 文件(如果存在),然后您可以使用从训练数据构建的模型来预测输出。最后,您可以将 array 的预测添加到作为新列读取的 pandas DataFrame,然后将其写入 csv 文件:

#Separate test (evaluation) dataset that doesn't include the output
test_data = pd.read_csv('test.csv')
#Choose the same columns you trained the model with
X = test_data[predictors]  
test_data['predictions'] = xg_cl.predict(X)
test_data.to_csv('submission.csv')