【发布时间】:2021-12-27 08:30:14
【问题描述】:
我在训练期间使用标签编码器,并希望通过保存并稍后加载来在生产中使用相同的编码器。无论我在网上找到什么解决方案,都只允许 Label Encoder 一次应用于单个列,如下所示:
for col in col_list:
df[col]= df[[col]].apply(LabelEncoder().fit_transform)
在这种情况下,我该如何保存并稍后使用?因为我尝试拟合整个数据帧,但出现以下错误。
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
C:\Users\DA~1\AppData\Local\Temp/ipykernel_3884/730613134.py in <module>
----> 1 l_enc.fit_transform(df_join[le_col].astype(str))
~\anaconda3\envs\ReturnRate\lib\site-packages\sklearn\preprocessing\_label.py in fit_transform(self, y)
113 Encoded labels.
114 """
--> 115 y = column_or_1d(y, warn=True)
116 self.classes_, y = _unique(y, return_inverse=True)
117 return y
~\anaconda3\envs\ReturnRate\lib\site-packages\sklearn\utils\validation.py in column_or_1d(y, warn)
1022 return np.ravel(y)
1023
-> 1024 raise ValueError(
1025 "y should be a 1d array, got an array of shape {} instead.".format(shape)
1026 )
ValueError: y should be a 1d array, got an array of shape (3949037, 14) instead.
我想将标签编码器安装到具有 10 列(所有分类)的数据帧中,保存并稍后在生产中加载。
【问题讨论】:
-
您是否尝试对分类预测变量进行编码?如果是这样,您应该使用 onehot 编码而不是标签编码器。标签编码器适用于您的目标变量
-
我使用的是树分类器,它不需要一个热编码,而且类别数量非常多,因此标签编码。我知道标签编码器可以用于每一列并单独保存,但想知道是否有更简单的方法?
标签: python python-3.x machine-learning scikit-learn