Python 如果在xgboost中使用提升度量分数,为什么会抛出[len()(未大小对象)]?
我希望使用提升度量,使用Python 如果在xgboost中使用提升度量分数,为什么会抛出[len()(未大小对象)]?,python,xgboost,Python,Xgboost,我希望使用提升度量,使用LIFT\u score()作为xgboost树模型中的度量,然后设置 .cv( ..., feval = lift_score, ..., ) 但它显示了错误: TypeError:len()未调整大小的对象 可能是这样,因为我的数据集属于int类型,但xgboost树只接受整数数据,不确定如何解决此问题 下面是我的代码: import xgboost as xgb from mlxtend.evaluate import lift_sc
LIFT\u score()
作为xgboost
树模型中的度量,然后设置
.cv( ...,
feval = lift_score,
...,
)
但它显示了错误:
TypeError:len()未调整大小的对象
可能是这样,因为我的数据集属于int
类型,但xgboost
树只接受整数数据,不确定如何解决此问题
下面是我的代码:
import xgboost as xgb
from mlxtend.evaluate import lift_score
t_params = { 'objective': 'binary:logistic',
'eta': 0.1,
'subsample': 0.8,
'colsample_bytree': 0.8,
'max_depth': 4,
'min_child_weight': 6,
'seed': 0,
}
xgdmat = xgb.DMatrix( X_train, y_train ) # my data
cv_xgb = xgb.cv( params = t_params,
dtrain = xgdmat,
feval = lift_score,
maximize = True,
num_boost_round = 600,
nfold = 5,
early_stopping_rounds = 100
)
为什么?那么,API的预期没有达到:
虽然可以自由设置feval
参数,但是xgboost.cv()
方法API中的一些期望应该得到满足
更简单的部分:
#用户定义的求值函数,返回一对度量值\u名称,结果
因此,度量计算器功能必须提供兼容的结果,最好是:
return 'error', <_a_custom_LIFT_score_>
调用接口匹配问题: 上面简单的包装器将完成更简单的部分 如果上面的
xgboost
演练源代码警告,关于实际值偏差的警告也将针对您的提升度量情况实施,那么您的值调整步骤必须在eval_LIFT()
中进行,然后将现在正确调整的值传递到mlxtend.evaluate.LIFT_score()
期望无偏差值。为什么?那么,API的预期没有达到:
虽然可以自由设置feval
参数,但是xgboost.cv()
方法API中的一些期望应该得到满足
更简单的部分:
#用户定义的求值函数,返回一对度量值\u名称,结果
因此,度量计算器功能必须提供兼容的结果,最好是:
return 'error', <_a_custom_LIFT_score_>
调用接口匹配问题: 上面简单的包装器将完成更简单的部分
如果上面的
xgboost
演练源代码警告,关于实际值偏差的警告也将针对您的提升度量情况实施,那么您的值调整步骤必须在eval_LIFT()
中进行,然后将现在正确调整的值传递到mlxtend.evaluate.LIFT_score()
期望无偏差的值。我想这与xgdmat
的设置问题有关。试着调查一下,确保它的尺寸和构造与您期望的完全一样。@dataprincess我可以检查一下什么是构造吗,谢谢,我已经检查了长度,它们是一样的。.我想这与您的xgdmat
设置中的一些问题有关。试着调查一下,确保它的尺寸和构造完全符合您的预期。@dataprincess我可以检查一下什么是构造吗,谢谢,我已经检查了长度,它们是一样的。。
def eval_LIFT( ModelPREDICTIONS, dtrain ):
# a thin wrapper to mediate conversion from
# Xgboost.cv() <feval>-FUN call-signature
# to a target lift_score() call-signature
return 'LIFT', lift_score( dtrain.get_label(),
ModelPREDICTIONS
)
def lift_score( y_target,
y_predicted,
binary = True,
positive_label = 1
):
"""
Lift measures the degree to which the predictions of a
classification model are better than randomly-generated predictions.
The in terms of True Positives (TP), True Negatives (TN),
False Positives (FP), and False Negatives (FN), the lift score is
computed as:
[ TP/(TP+FN) ] / [ (TP+FP) / (TP+TN+FP+FN) ]
...
"""
...