尝试使用 OneHot Encoder Python 的预处理错误

Posted

技术标签:

【中文标题】尝试使用 OneHot Encoder Python 的预处理错误【英文标题】:preprocessing error trying to use OneHot Encoder Python 【发布时间】:2017-10-13 00:00:50 【问题描述】:

我正在尝试在虚拟机中运行以下代码来解决家庭作业问题。我收到下面的错误消息,我正在尝试确定这是否是我的代码或网站的问题。如果有人能指出我的代码是否有错误以及如何修复它,我将不胜感激。如果我的代码看起来没问题,那么我会让课程知道他们有错误。

Code:



import numpy as np
import pandas as pd

# Load the dataset
X = pd.read_csv('titanic_data.csv')
# Limit to categorical data
X = X.select_dtypes(include=[object])

from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder

# TODO: Create a LabelEncoder object, which will turn all labels present in
#       in each feature to numbers.
# HINT: Use LabelEncoder()

df=pd.DataFrame(X)

le = preprocessing.labelEncoder()


# TODO: For each feature in X, apply the LabelEncoder's fit_transform
#       function, which will first learn the labels for the feature (fit)
#       and then change the labels to numbers (transform).

df2=df.apply(le.fit_transform)


#for feature in X:
    # HINT: use fit_transform on X[feature] using the LabelEncoder() object
    #X[feature] = label_encoder.fit_transform(X[feature])

# TODO: Create a OneHotEncoder object, which will create a feature for each
#       label present in the data.
# HINT: Use OneHotEncoder()
ohe = preprocessing.OneHotEncoder()

# TODO: Apply the OneHotEncoder's fit_transform function to all of X, which will
#       first learn of all the (now numerical) labels in the data (fit), and then
#       change the data to one-hot encoded entries (transform).

# HINT: Use fit_transform on X using the OneHotEncoder() object

onehotlabels = enc.fit_transform(df2)


Error:

Traceback (most recent call last):
  File "vm_main.py", line 33, in <module>
    import main
  File "/tmp/vmuser_zrkfroofmi/main.py", line 2, in <module>
    import studentMain
  File "/tmp/vmuser_zrkfroofmi/studentMain.py", line 3, in <module>
    import OneHot
  File "/tmp/vmuser_zrkfroofmi/OneHot.py", line 21, in <module>
    le = preprocessing.labelEncoder()
NameError: name 'preprocessing' is not defined

【问题讨论】:

le = preprocessing.labelEncoder() 应该是 le = labelEncoder(),因为您导入 labelEncoder 而不是预处理。 ohe = preprocessing.OneHotEncoder() 也一样。 【参考方案1】:

在名称前调用 OneHotEncoder 而不进行预处理。所以就做ohe = OneHotEncoder()。问题在于您的导入,如果您执行from sklearn import preprocessing,您的脚本中的内容将起作用。

【讨论】:

【参考方案2】:

从代码中,“从 sklearn.preprocessing 导入 OneHotEncoder”,用户试图从预处理导入 OneHotEncoder,而没有先导入预处理。 Preprocessing 是 sklearn 的一个包,OneHotEncoder 是一个预处理器。这导致了错误。所以导入预处理,然后用 OneHotEncoder 试试

【讨论】:

欢迎来到 SO!上一个答案是说同样的问题。你的新 P.O.V. 是什么? 从代码中,'from sklearn.preprocessing import OneHotEncoder',用户试图从预处理中导入 OneHotEncoder 而没有先导入预处理。因为预处理是 sklearn 的一个包,而 OneHotEncoder 是一个预处理器。这导致了错误。所以导入预处理,然后尝试使用 OneHotEncoder 所以,请用你的评论编辑你的答案,你会得到一个很好的答案。

以上是关于尝试使用 OneHot Encoder Python 的预处理错误的主要内容,如果未能解决你的问题,请参考以下文章

具有特征名称的 OneHot 向量

onehot的好处,还是可以看看的

如何将pytorch中的标签转换为onehot

图片验证码识别,标签中onehot编码对应多个1怎么做?

pytorch中onehot编码转为普通label标签

onehot从零开始还是从1