ValueError: DataFrame.dtypes for data must be int, float, bool or category. When categorical type is supplied, The experimental DMatrix parameter`enable_categorical` must be set to `True`. Invalid columns:性别: object
时间: 2024-03-21 20:39:04 浏览: 467
这个错误发生在使用XGBoost库训练机器学习模型时,数据集中包含非数值类型的特征列,例如"性别"列的数据类型为object(即字符串类型)。XGBoost只支持整数、浮点数、布尔和类别类型的特征数据,因此需要将非数值类型的特征列转换为类别类型。同时,需要将XGBoost的参数`enable_categorical`设置为True,以启用类别类型的特征处理。
以下是处理这个问题的代码示例:
```python
import pandas as pd
import xgboost as xgb
# 读取数据集
data = pd.read_csv('data.csv')
# 将非数值类型的特征列转换为类别类型
data['性别'] = data['性别'].astype('category')
# 定义特征列和标签列
X = data.drop('标签', axis=1)
y = data['标签']
# 创建DMatrix对象,并启用类别类型的特征处理
dtrain = xgb.DMatrix(X, label=y, enable_categorical=True)
# 定义模型参数
params = {
'objective': 'binary:logistic',
'max_depth': 3,
'eta': 0.1,
'gamma': 0.1
}
# 训练模型
xgb_model = xgb.train(params, dtrain)
```
在这个示例中,我们使用`astype()`方法将"性别"列转换为类别类型,并创建了一个DMatrix对象`dtrain`,并通过设置`enable_categorical=True`启用了类别类型的特征处理。最后,我们定义了模型参数,并使用`xgb.train()`函数训练了XGBoost模型。
阅读全文