【发布时间】:2022-01-03 04:32:38
【问题描述】:
我有一个运行成功的模型。
当我尝试使用它进行预测时,它失败了,因为在 OneHotEncoding 之后,测试集的列比火车多。
经过一番阅读,我发现我需要先连接两个 df,OneHotEncode,然后将它们分开。
- 在训练数据集中添加了一个“temp”列,值为“train”。
- 向测试数据集添加了一个“temp”列,值为“test”。
- 这样我可以稍后使用布尔索引将 df 分开,如下所示:
X = temp_df[temp_df['temp'] == 'train']
X2 = temp_df[temp_df['temp'] == 'test']
- 垂直连接两个 df。
- 验证新组合 df 的形状。
- 将所有列更改为类型“类别”,除了“临时”,它是对象:
basin category
region category
lga category
extraction_type_class category
management category
quality_group category
quantity category
source category
waterpoint_type category
cluster category
temp object
- 现在我只是像以前一样尝试 OneHotEncode。我只选择分类列:
cat_ix = temp_df.select_dtypes(include=['category']).columns
- 我尝试申请:
ct = ColumnTransformer([('o', OneHotEncoder(), cat_ix)], remainder='passthrough')
temp_df = ct.fit_transform(temp_df)
它在 temp_df = ct.fit_transform(temp_df) 行上失败。
在我添加 temp 列并连接两个 df 之前,这些相同的步骤运行良好。
确切的错误:
Traceback (most recent call last):
File "C:\Users\Mark\AppData\Local\Programs\Python\Python38\lib\site-packages\sklearn\compose\_column_transformer.py", line 778, in _hstack
converted_Xs = [
File "C:\Users\Mark\AppData\Local\Programs\Python\Python38\lib\site-packages\sklearn\compose\_column_transformer.py", line 779, in <listcomp>
check_array(X, accept_sparse=True, force_all_finite=False)
File "C:\Users\Mark\AppData\Local\Programs\Python\Python38\lib\site-packages\sklearn\utils\validation.py", line 738, in check_array
array = np.asarray(array, order=order, dtype=dtype)
File "C:\Users\Mark\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\generic.py", line 1993, in __array__
return np.asarray(self._values, dtype=dtype)
ValueError: could not convert string to float: 'train'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\Mark\AppData\Local\Programs\Python\Python38\lib\site-packages\sklearn\compose\_column_transformer.py", line 783, in _hstack
raise ValueError(
ValueError: For a sparse output, all columns should be a numeric or convertible to a numeric.
为什么抱怨“火车”?那是在被排除的“临时”列中。
【问题讨论】:
标签: python-3.x scikit-learn one-hot-encoding