【机器学习】xgboost(回归实战xgboost.sklearn import XGBRegressor)

1,409 阅读2分钟

objective参数的取值

XGBoost的`objective`参数用于指定学习任务及相应的学习目标,其取值非常丰富,覆盖了多种不同的机器学习问题。以下是一些常见的`objective`参数取值及其应用场景:
  1. 回归问题

    • reg:linear:线性回归,这是回归问题的默认选项。
    • reg:squarederror:另一种表示线性回归的方式,与reg:linear效果相同,但在某些上下文中可能更直观地表示平方误差作为损失函数。
    • reg:squaredlogerror:对数的平方误差回归,适用于预测值范围变化很大,使用对数变换可以使误差更加稳定的情况。
    • reg:logistic:虽然名字包含“logistic”,但它实际上在XGBoost中通常不用作回归问题的目标函数,而是用于二分类的逻辑回归。
  2. 二分类问题

    • binary:logistic:二分类的逻辑回归问题,输出为预测为正类的概率。
    • binary:logitraw:二分类的逻辑回归问题,但输出的是线性预测值(即未经sigmoid函数转换的原始分数)。
  3. 多分类问题

    • multi:softmax:使用softmax的多分类器,需要设置num_class(类别数目)参数,输出预测的类别标签。
    • multi:softprob:与multi:softmax类似,但输出的是每个数据属于各个类别的概率,形式为ndata * nclass的向量,可以将其reshape成ndata行nclass列的矩阵。
  4. 排序问题

    • rank:pairwise:通过最小化成对损失进行排序。
  5. 计数问题

    • count:poisson:计数问题的Poisson回归,输出结果为Poisson分布。
  6. 其他

    • XGBoost还支持一些其他的objective参数,如自定义的损失函数等,但这些通常需要根据具体的应用场景和需求进行选择和实现。

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

图片.png