XgBoost脚本未正确输出二进制文件

时间:2016-03-06 12:42:07

标签: python machine-learning xgboost

我正在学习使用xgboost,我已经阅读了文档! 但是,我不明白为什么我的脚本输出是在0~~2之间出现的。 首先,我认为它应该是0或1,因为它是binary分类,但是,我读到它的概率为0或1,但是,有些输出是1.5+(at至少在CSV上),这对我来说没有意义!

我不确定问题是在xgboost参数还是在csv创建中! 这一行np.expm1(preds),我不确定它应该是np.expm1,但我不知道我可以改变它!

总之,我的问题是:

为什么输出不是0或1,而是0.0xxx和1.xxx?

这是我的剧本:

import numpy as np
import xgboost as xgb
import pandas as pd

train = pd.read_csv('../dataset/train.csv')
train = train.drop('ID', axis=1)

y = train['TARGET']

train = train.drop('TARGET', axis=1)
x = train

dtrain = xgb.DMatrix(x.as_matrix(), label=y.tolist())

test = pd.read_csv('../dataset/test.csv')

test = test.drop('ID', axis=1)
dtest = xgb.DMatrix(test.as_matrix())


# XGBoost params:
def get_params():
    #
    params = {}
    params["objective"] = "binary:logistic"
    params["booster"] = "gbtree"
    params["eval_metric"] = "auc"
    params["eta"] = 0.3  #
    params["subsample"] = 0.50
    params["colsample_bytree"] = 1.0
    params["max_depth"] = 20
    params["nthread"] = 4
    plst = list(params.items())
    #
    return plst


bst = xgb.train(get_params(), dtrain, 1000)

preds = bst.predict(dtest)

print np.max(preds)
print np.min(preds)
print np.average(preds)

# Make Submission
test_aux = pd.read_csv('../dataset/test.csv')
result = pd.DataFrame({"Id": test_aux["ID"], 'TARGET': np.expm1(preds)})

result.to_csv("xgboost_submission.csv", index=False)

2 个答案:

答案 0 :(得分:1)

运行具有目标xgb的{​​{1}}模型时,您会获得每个样本的概率数组。这些概率是样本属于班级binary:logistic的可能性。

假设您有3个班级i。样本[A, B, C]的输出(例如y)表示此样本可能属于 B 类。

如果您只想要更可能的类,请使用此类概率数组中的最大元素的索引,例如使用[0.2, 0.6, 0.4]函数How-To SU

您可以在numpy包参数argmax找到更多信息。

答案 1 :(得分:0)

您只需要这样做:

from xgboost import XGBClassifier

调用 predict ,输出将为0或1,如果调用 predict_proba ,则输出为类的概率。

对不起,我的英语。