我有两个独立的工作模型。除了一个使用随机森林和一个使用 XGBoost 之外,它们是相同的。
昨天我对数据进行了更改(我添加了两列)并训练了 RF 模型。现在它的得分比我添加两列之前高出大约 4%。
所以今天我注释掉了 RF 模型,并插入了 XGBoost 模型(来自现有的工作模型)。
当我尝试运行 XGBoost 模型时,我现在得到:
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`.
我没有将未编码的分类数据传递给 XGBoost。
数据特点:
construction_year int32 <-- Added yesterday
amount_tsh float64 <-- Added yesterday
basin category
region_code category
lga category
extraction_type category
management category
payment category
quality_group category
quantity category
source category
waterpoint_type category
cluster category
temp object <--- HOLD ON. See below.
dtype: object
'temp' 只是在我训练模型之前将编码后的 df 拆分回单独的训练集和测试集。在我执行拆分后它会被删除。
X = dfx[dfx[temp_df.shape[1]-1] == 'train']
X2 = dfx[dfx[temp_df.shape[1]-1] == 'test']
print(X.head())
print(X2.head())
X = X.iloc[:, :-1]
X2 = X2.iloc[:, :-1]
print(X.head())
print(X2.head())
和证明:
0 1 2 3 4 5 6 7 8 9 10 11 ... 224 225 226 227 228 229 230 231 232 233 234 235
0 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 1999 1200.000 train
1 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 2010 0.000 train
2 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 2009 25.000 train
3 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1986 0.000 train
4 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 2006 0.000 train
0 1 2 3 4 5 6 7 8 9 10 11 ... 224 225 226 227 228 229 230 231 232 233 234 235
59400 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 2012 0.000 test
59401 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 1.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 2000 0.000 test
59402 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 2010 0.000 test
59403 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 1987 0.000 test
59404 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 2000 500.000 test
0 1 2 3 4 5 6 7 8 9 10 11 ... 223 224 225 226 227 228 229 230 231 232 233 234
0 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 1999 1200.000
1 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 2010 0.000
2 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 2009 25.000
3 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1986 0.000
4 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 2006 0.000
0 1 2 3 4 5 6 7 8 9 10 11 ... 223 224 225 226 227 228 229 230 231 232 233 234
59400 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 2012 0.000
59401 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 1.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 2000 0.000
59402 1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 2010 0.000
59403 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 1987 0.000
59404 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 2000 500.000
包含“train”和“test”的最后一列消失了。
我在 PyCharm 中打开了 df。除了两个新的数字列(233 和 234)外,没有什么是未编码的。
此外,组合 df 的形状以及分离的 train 和 test df 的形状也显示了删除的最后一列:
(74250, 236)
(59400, 235)
(14850, 235)
我不知道为什么 XGBoost 认为我正在传递未编码的分类数据。正如我所说,这一切都有效,直到我昨天添加了两个新的数字列。RF 模型适用于两个新列。