使用 Scikit-learn 顺序编码数据时出错

Posted

技术标签:

【中文标题】使用 Scikit-learn 顺序编码数据时出错【英文标题】:Errors while encoding data sequentially with Scikit-learn 【发布时间】:2021-07-15 09:29:29 【问题描述】:

我正在循环遍历数据帧的行,并尝试使用我的编码器对每一行数据进行编码。

for index, row in self.data.iterrows():
    data = self._encoder.transform(row)
    try:
        print(row.shape)
        results["classes"].append((self._model.predict(data) > 0.5).astype("int32"))
        results["probability"].append((self._model.predict(data)))
        results["rows"].append(index)
    except Exception as e:
        print(e)
        results["rows"].append(index)
        results["classes"].append("ERROR")
        results["probability"].append("ERROR")

然后使用我的模型进行预测。编码器和模型都是用 Scikit-learn 和 Keras 制作的,使用 keras 的内置保存功能保存模型,并将编码器导出到 joblib 文件。如果我对整个数据帧进行编码,一切都会按预期工作。

我正在尝试按顺序执行此操作,以避免当编码器引发有关数据的错误时我的程序可能发生故障,特别是当新值出现在我是一个热编码的列之一时,编码器的值没见过。

我尝试过使用iterrows(),当我尝试对每一行进行编码时,我收到以下错误。 IndexError: tuple index out of range.

我也尝试将每一行转换为自己的数据框,但是当我尝试编码 ValueError: Number of features of the input must be equal to or greater than that of the fitted transformer. Transformer n_features is 67 and input n_features is 1. 时得到以下信息

循环遍历我的数据并按顺序编码和预测每行数据的最佳方法是什么?

第二个错误的完整跟踪

Traceback (most recent call last):
  File "/home/build/x-predictive-model/main.py", line 18, in <module>
    network.predictSequentially()
  File "/home/build/x-predictive-model/myai.py", line 191, in predictSequentially
    encoded = self._encoded_data = self._encoder.transform(pd.DataFrame(row))
  File "/home/user1/anaconda3/envs/x-model-lib/lib/python3.7/site-packages/sklearn/compose/_column_transformer.py", line 571, in transform
    .format(self._n_features, X.shape[1]))
ValueError: Number of features of the input must be equal to or greater than that of the fitted transformer. Transformer n_features is 67 and input n_features is 1.

【问题讨论】:

请使用反引号或缩进格式化您的代码,但不能同时使用(已编辑)。 您能添加数据的形状和第二个错误的完整回溯吗? @ML_Engine 数据的形状是 (4722, 67),我已经在帖子正文中发布了完整的回溯 【参考方案1】:

可以使用索引进行循环和预测,使用语法self.data[index:index+1] 我可以循环遍历我的数据并进行预测。

【讨论】:

以上是关于使用 Scikit-learn 顺序编码数据时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 scikit-learn 执行 LDA 降维时出错

在 python 中使用 scikit-learn 线性回归模型时出错

使用 scikit-learn Pipeline 和 GridSearchCV 时出错

在 Windows 上使用 AMD64 构建的 Scipy 调用 scikit-learn 时出错

导入 scikit-learn 模块时出错

导入scikit-learn模块时出错