#python #machine-learning #xgboost #supervised-learning
Вопрос:
Я использую набор данных с шестью столбцами, и я пытаюсь предсказать целевую функцию, которая может быть либо 0,1 с помощью xgboost.
Поскольку я все еще учусь использовать xgboost, я использую в качестве целей как softprob, так и softmax. Когда я печатаю их вместе в конце, результаты softprob и softmax не совпадают (это означает, что xgboost не выбрал функцию с наибольшей вероятностью). Я не понимаю, есть ли в моем коде ошибка или у меня ложные ожидания относительно того, как работает xgboost. Можете ли вы помочь мне разобраться в этом?
import xgboost as xgb
x_train,x_test,y_train,y_test=train_test_split(x, y, test_size=0.33,shuffle=False)
#Прогнозирование с помощью softprob
train = xgb.DMatrix(x_train,label=y_train)
test = xgb.DMatrix(x_test,label=y_test)
params= {
"max_depth":4,
"eta":0.3,
"objective":"multi:softprob",
"num_class":2
}
epochs=10
model=xgb.train(params,train,epochs)
predictions=model.predict(test)
dim1,dim2 = predictions.shape
predictions=np.reshape(predictions,(dim2,dim1))
y_test=y_test.to_numpy()
results = pd.DataFrame(y_test,columns=(["Actual"]))
results["0"] = predictions[0]
results["1"] = predictions[1]
#Прогнозирование с помощью softmax
train = xgb.DMatrix(x_train,label=y_train)
test = xgb.DMatrix(x_test,label=y_test)
params= {
"max_depth":4,
"eta":0.3,
"objective":"multi:softmax",
"num_class":2
}
epochs=10
model=xgb.train(params,train,epochs)
predictions=model.predict(test)
results["Prediction"] = predictions
print(results)
Результат печати:
Actual 0 1 Prediction
0 1.0 0.718783 0.670569 0.0
1 1.0 0.281217 0.685960 1.0
2 1.0 0.389004 0.314040 1.0
3 0.0 0.610996 0.685960 0.0
4 1.0 0.473767 0.314040 1.0
.. ... ... ... ...
456 1.0 0.504193 0.710020 0.0
457 1.0 0.495807 0.580242 0.0
458 1.0 0.253023 0.419758 1.0
459 1.0 0.746977 0.608333 0.0
460 1.0 0.329431 0.391667 0.0
[461 rows x 4 columns]
Комментарии:
1. Вы проходите переподготовку, чтобы получить прогноз softmax? похоже, что это две разные модели с разными целями
2. Я думаю, что мне нужно переучиться, чтобы пройти другую цель. Или есть способ получить результаты как softmax, так и softprob вместе?
3. при повторной тренировке не гарантируется, что модели/веса идентичны, поэтому, имея это в виду, для менее определенных примеров две модели могут иметь разные прогнозы. Вы должны проверить точность каждого из них и выбрать тот, который обладает наилучшей производительностью. Если вам нужно и то, и другое, то, вероятно, используйте softprob, а затем реализуйте softmax на выходе модели на вашей стороне.
Ответ №1:
Более формальный ответ на то, что обсуждается в комментариях, когда вы переучиваете модели, в каждой модели вы получаете разные обучаемые параметры. Даже если вы переучитесь с теми же гиперпараметрами, есть вероятность, что для некоторых образцов, особенно близких к границе принятия решения, вы получите другой результат. Вы можете проверить точность обеих моделей и выбрать наиболее эффективную, если хотите оптимизировать точность (хотя они не должны слишком отличаться). Если вам нужны как выходные данные softprob, так и прогноз класса, вероятно, лучше всего реализовать softmax на выходных данных softprob самостоятельно, например. использование scipy