使用 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 顺序编码数据时出错的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中使用 scikit-learn 线性回归模型时出错
使用 scikit-learn Pipeline 和 GridSearchCV 时出错