objective参数的取值
XGBoost的`objective`参数用于指定学习任务及相应的学习目标,其取值非常丰富,覆盖了多种不同的机器学习问题。以下是一些常见的`objective`参数取值及其应用场景:
-
回归问题:
reg:linear:线性回归,这是回归问题的默认选项。reg:squarederror:另一种表示线性回归的方式,与reg:linear效果相同,但在某些上下文中可能更直观地表示平方误差作为损失函数。reg:squaredlogerror:对数的平方误差回归,适用于预测值范围变化很大,使用对数变换可以使误差更加稳定的情况。reg:logistic:虽然名字包含“logistic”,但它实际上在XGBoost中通常不用作回归问题的目标函数,而是用于二分类的逻辑回归。
-
二分类问题:
binary:logistic:二分类的逻辑回归问题,输出为预测为正类的概率。binary:logitraw:二分类的逻辑回归问题,但输出的是线性预测值(即未经sigmoid函数转换的原始分数)。
-
多分类问题:
multi:softmax:使用softmax的多分类器,需要设置num_class(类别数目)参数,输出预测的类别标签。multi:softprob:与multi:softmax类似,但输出的是每个数据属于各个类别的概率,形式为ndata * nclass的向量,可以将其reshape成ndata行nclass列的矩阵。
-
排序问题:
rank:pairwise:通过最小化成对损失进行排序。
-
计数问题:
count:poisson:计数问题的Poisson回归,输出结果为Poisson分布。
-
其他:
- XGBoost还支持一些其他的
objective参数,如自定义的损失函数等,但这些通常需要根据具体的应用场景和需求进行选择和实现。
- XGBoost还支持一些其他的
demo
from xgboost.sklearn import XGBRegressor
from xgboost import plot_importance
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.metrics import mean_squared_error
# 导入数据集
boston = load_boston()
X ,y = boston.data,boston.target
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)
# 初始化模型
model = XGBRegressor(max_depth=3,
learning_rate=0.1,
n_estimators=100,
objective='reg:linear',
booster='gbtree',
gamma=0,
min_child_weight=1,
subsample=1,
colsample_bytree=1,
reg_alpha=0,
reg_lambda=1,
random_state=0)
# 训练模型
# 边训练边预测
model.fit(X_train, y_train,
eval_set=[(X_train, y_train), (X_test, y_test)],
eval_metric='rmse',
verbose=50,
early_stopping_rounds=50)
# 对测试集进行预测
ans = model.predict(X_test)
mse = mean_squared_error(y_test, ans) # 先试真实值,再是预测值
print('mse:', mse)
# 显示重要特征
plot_importance(model)
plt.show()
)
输出
[0] validation_0-rmse:21.687 validation_1-rmse:21.3558 [50] validation_0-rmse:1.8122 validation_1-rmse:4.8143 [99] validation_0-rmse:1.3396 validation_1-rmse:4.63377
mse: 21.471843729261288