在XGBo
os
t中,我们可以使用multi:softmax函数来解决多分类问题。然而,该函数只返回预测的类别标签,而不是概率。如果想要获取概率,我们可以使用multi:softprob函数,并结合使用xgbo
os
t的predict
函数
。
下面是一个示例代码:
import xgboost as xgb
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 将数据转换为DMatrix格式
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
# 设置参数
param = {'max_depth': 2, 'eta': 1, 'objective': 'multi:softmax', 'num_class': 3}
# 训练模型
num_round = 10
model = xgb.train(param, dtrain, num_round)
# 使用测试集进行预测
preds = model.predict(dtest)
# 获取概率
preds_proba = model.predict(dtest, output_margin=True)
# 将概率转换为类别标签
preds_proba_label = np.argmax(preds_proba, axis=1)
print("预测的类别标签:", preds)
print("预测的概率:", preds_proba)
print("预测的类别标签(根据概率转换):", preds_proba_label)
在上述代码中,我们首先将数据集划分为训练集和测试集,并将其转换为DMatrix格式。然后,我们设置参数并训练模型。接下来,我们使用测试集进行预测,并使用model.predict(dtest, output_margin=True)
获取概率。最后,我们使用np.argmax(preds_proba, axis=1)
将概率转换为类别标签。