Sklearn 预处理标签编码器为多列抛出错误
Sklearn preprocessing label encoder is throwing error for mutiple columns
我有 pandas 具有以下结构的数据框
item_condition_id category
brand_name category
price float64
shipping category
main_category category
category category
sub_category category
hashing_feature_aa float64
hashing_feature_ab float64
部分数据示例:
brand_name shipping main_category category
Target 1 Women Tops & Blouses
unknown 1 Home Home Décor
unknown 0 Women Jewelry
unknown 0 Women Other
我已使用以下代码将分类(字符串)列转换为数字列。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for i in range(len(X)):
X.iloc[:,i] = le.fit_transform(X.iloc[:,i])
转换后
brand_name shipping main_category category
0 1 1 3
1 1 0 0
1 0 1 1
1 0 1 2
这按预期工作,但在尝试应用 inverse_transform 从数字类别中获取原始类别时抛出错误。
for i in range(len(X)):
X.iloc[:,i] = le.inverse_transform(X.iloc[:,i])
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
在我的案例中如何解决这个错误,我的代码有什么问题?
我的目标是使用标签编码器将分类(字符串)特征转换为数值,以便应用 sklearn.feature_selection.SelectKbest.fit_transform(X,y),无需标签编码,此步骤是失败。
谢谢
根据您的说明:您的问题是在循环中覆盖了 le 的实例,因此它只在最后一列上进行训练。根据您的代码,我建议将它们放在字典中,例如如下:
from sklearn.preprocessing import LabelEncoder
le = {}
for i in range(len(X)):
le[i] = LabelEncoder()
X.iloc[:,i] = le[i].fit_transform(X.iloc[:,i])
# do stuff
for i in range(len(X)):
X.iloc[:,i] = le[i].inverse_transform(X.iloc[:,i])
但是正如上面评论的那样,也请看this.
我有 pandas 具有以下结构的数据框
item_condition_id category
brand_name category
price float64
shipping category
main_category category
category category
sub_category category
hashing_feature_aa float64
hashing_feature_ab float64
部分数据示例:
brand_name shipping main_category category
Target 1 Women Tops & Blouses
unknown 1 Home Home Décor
unknown 0 Women Jewelry
unknown 0 Women Other
我已使用以下代码将分类(字符串)列转换为数字列。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for i in range(len(X)):
X.iloc[:,i] = le.fit_transform(X.iloc[:,i])
转换后
brand_name shipping main_category category
0 1 1 3
1 1 0 0
1 0 1 1
1 0 1 2
这按预期工作,但在尝试应用 inverse_transform 从数字类别中获取原始类别时抛出错误。
for i in range(len(X)):
X.iloc[:,i] = le.inverse_transform(X.iloc[:,i])
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
在我的案例中如何解决这个错误,我的代码有什么问题?
我的目标是使用标签编码器将分类(字符串)特征转换为数值,以便应用 sklearn.feature_selection.SelectKbest.fit_transform(X,y),无需标签编码,此步骤是失败。
谢谢
根据您的说明:您的问题是在循环中覆盖了 le 的实例,因此它只在最后一列上进行训练。根据您的代码,我建议将它们放在字典中,例如如下:
from sklearn.preprocessing import LabelEncoder
le = {}
for i in range(len(X)):
le[i] = LabelEncoder()
X.iloc[:,i] = le[i].fit_transform(X.iloc[:,i])
# do stuff
for i in range(len(X)):
X.iloc[:,i] = le[i].inverse_transform(X.iloc[:,i])
但是正如上面评论的那样,也请看this.