Скрипт XgBoost не выводит двоичный файл правильно

129
11

Я учусь использовать xgboost, и я прочитал документацию! Однако я не понимаю, почему вывод моего скрипта выходит из 0~~2. Во-первых, я думал, что это должно быть либо 0, либо 1, так как его binary классификация, но затем я читаю, что она приходит как вероятность 0 или 1, однако некоторые выходы равны 1.5+ (по крайней мере, в CSV), который не имеет смысла для меня!

Я не уверен, что проблема xgboost параметрами xgboost или в создании csv! Эта строка, np.expm1(preds), im не уверен, что она должна быть 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)

спросил(а) 2021-01-28T00:52:17+03:00 2 месяца, 2 недели назад
1
Решение
63

Когда вы запускаете модель xgb с объективным binary:logistic вы получаете массивы вероятностей для каждого образца. Эти вероятности - вероятность того, что образец будет принадлежать классу i.

Скажем, у вас есть 3 класса [A, B, C]. Выход для образца y подобный [0.2, 0.6, 0.4] указывает на то, что этот образец будет принадлежать классу B.

Если вам нужен только более вероятный класс, возьмите индекс максимального элемента в таком вероятностном массиве, например, используя функцию numpy argmax.

Дополнительную информацию вы можете найти в документации по параметрам пакета xgb.

ответил(а) 2021-01-28T00:52:17+03:00 2 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема