注意这个diff_num的设定非常重要,你用的代里面,有两个地方涉及到了这个参数的设定,一个是get_kind函数里面有,一个是xgb_fill的类里面有。这个值最好在这两个地方的设定值保持一致,否则可能出现漏洞

#比如类里设定为了8,而get_kind里面设定为了10,那么当判断一个变量是否要处理为object变量的时候

#就可能出现问题,比如这个变量的不重复值有9个,到了get_kind函数那里,将其处理为了object变量,

#在类里就会被处理成float变量

而你这里确实就出现了这个问题。所以你这样的设定导致了如下的错误提示。

我把错误提示贴一下。

File "D:\ProgramData\Anaconda3\lib\site-packages\xgboost\core.py", line 500, in __init__

handle, feature_names, feature_types = dispatch_data_backend(


File "D:\ProgramData\Anaconda3\lib\site-packages\xgboost\data.py", line 539, in dispatch_data_backend

return _from_pandas_df(data, enable_categorical, missing, threads,


File "D:\ProgramData\Anaconda3\lib\site-packages\xgboost\data.py", line 242, in _from_pandas_df

data, feature_names, feature_types = _transform_pandas_df(


File "D:\ProgramData\Anaconda3\lib\site-packages\xgboost\data.py", line 207, in _transform_pandas_df

raise ValueError(msg + ', '.join(bad_fields))


ValueError: DataFrame.dtypes for data must be int, float, bool or categorical. When

categorical type is supplied, DMatrix parameter

`enable_categorical` must be set to `True`.B0008

注意这里的关键点是说B0008变量有问题,我们看下B0008这个变量的不重复取值

In [10]: x1_["B0008"].nunique()

Out[10]: 9

果然出现了特殊情况,导致产生了错误提示。我们如何修改代码,让其顺利执行呢?

8.png

这样我们的程序就可以正确执行了

2.png

0 0 1