注意这个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
果然出现了特殊情况,导致产生了错误提示。我们如何修改代码,让其顺利执行呢?

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