Multiclass classification with xgboost classifier?

前端 未结 3 812
别跟我提以往
别跟我提以往 2021-02-14 17:55

I am trying out multi-class classification with xgboost and I\'ve built it using this code,

clf = xgb.XGBClassifier(max_depth=7, n_estimators=1000)

clf.fit(byte         


        
3条回答
  •  不知归路
    2021-02-14 18:24

    In fact, even if the default obj parameter of XGBClassifier is binary:logistic, it will internally judge the number of class of label y. When the class number is greater than 2, it will modify the obj parameter to multi:softmax.

    https://github.com/dmlc/xgboost/blob/master/python-package/xgboost/sklearn.py

    class XGBClassifier(XGBModel, XGBClassifierBase):
        # pylint: disable=missing-docstring,invalid-name,too-many-instance-attributes
        def __init__(self, objective="binary:logistic", **kwargs):
            super().__init__(objective=objective, **kwargs)
    
        def fit(self, X, y, sample_weight=None, base_margin=None,
                eval_set=None, eval_metric=None,
                early_stopping_rounds=None, verbose=True, xgb_model=None,
                sample_weight_eval_set=None, callbacks=None):
            # pylint: disable = attribute-defined-outside-init,arguments-differ
    
            evals_result = {}
            self.classes_ = np.unique(y)
            self.n_classes_ = len(self.classes_)
    
            xgb_options = self.get_xgb_params()
    
            if callable(self.objective):
                obj = _objective_decorator(self.objective)
                # Use default value. Is it really not used ?
                xgb_options["objective"] = "binary:logistic"
            else:
                obj = None
    
            if self.n_classes_ > 2:
                # Switch to using a multiclass objective in the underlying
                # XGB instance
                xgb_options['objective'] = 'multi:softprob'
                xgb_options['num_class'] = self.n_classes_
    

提交回复
热议问题