【问题标题】:Using OneHotEncoder in making dummy variables使用 OneHotEncoder 制作虚拟变量
【发布时间】:2020-07-07 22:59:31
【问题描述】:

我正在尝试在以下形式的输入集中制作虚拟变量: My Input set

所以我对分类数据进行了编码,所以现在我的数组形式为:Encoded input set

接下来,我想使用 OneHot 编码器制作虚拟变量。我知道它曾经是这样工作的:

onehotencoder = OneHotEncoder(categorical_features = [1])
X = onehotencoder.fit_transform(X).toarray()

但是现在 OneHotEncoder 类的工作方式有点不同,我不知道如何将它调整到我的数据集,所以它完全以这种方式工作。 我的代码:

import numpy as np
import pandas as pd

dataset = pd.DataFrame(
    {'RowNumber': [1, 2, 3, 4, 5],
     'CustomerId': [602, 311, 304, 354, 888],
     'Surname': ['Har', 'Hil', 'Oni', 'Bon', 'Mit'],
     'CreditScore': [619, 608, 502, 699, 850],
     'Geography': ['FR', 'ES', 'FR', 'FR', 'ES'],
     'Gender': ['F', 'F', 'F', 'F', 'F'],
     'Age': [42, 41, 42, 39, 43],
     'Tenure': [2, 1, 8, 0, 2]})

X = dataset.iloc[:, 3 : -1].values
y= dataset.iloc[:, -1].values

# Encoding categorical data
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
X[:, 1] = le.fit_transform(X[:, 1])
X[:, 2] = le.fit_transform(X[:, 2])

# Making dummy variables
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()

提前谢谢你!

【问题讨论】:

  • 您能否在脚本中提供一个示例输入来代替 "Churn_Modelling.csv" 以使您的代码可运行?另外,为什么说“虚拟变量”?看起来您只是想创建这两列的单热编码。
  • 这是我的数据集的前 5 行:RowNumber,CustomerId,Surname,CreditScore,Geography,Gender,Age,Tenure,Balance,NumOfProducts,HasCrCard,IsActiveMember,EstimatedSalary,Exited 1,15634602,Hargrave ,619,法国,女,42,2,0,1,1,1,101348.88,1 2,15647311,希尔,608,西班牙,女,41,1,83807.86,1,0,1,112542.58,0 3 ,15619304,Onio,502,France,Female,42,8,159660.8,3,1,0,113931.57,1 4,15701354,Boni,699,France,Female,39,1,0,2,0,0, 93826.63,0 5,15737888,Mitchell,850,Spain,Female,43,2,125510.82,1,1,1,79084.1,0
  • 如果您可以在帖子的代码中将其定义为dataset = pd.DataFrame(...),那就太好了。
  • 我真的很抱歉,但我完全没有得到您对我的期望。我对 python 和机器学习还很陌生,所以你需要非常具体
  • 我已经更新了你的帖子来说明我的意思。

标签: python machine-learning sklearn-pandas one-hot-encoding


【解决方案1】:

使用pandas.get_dummies() 为 pandas 数据框创建虚拟变量:

df = pd.DataFrame({'Country':['France','Spain','Germany','France','Spain','Germany','Germany'],
                   'Gender':['Male','Female','Male','Female','Male','Male','Female'],
                   'Age':[52,30,38,45,41,55,29]})

df = pd.get_dummies(data = df, columns = ['Country','Gender'])

【讨论】:

  • 我想使用 OneHotEncoder 类。我已经用 pandas 做了这个,效果很好,但还是谢谢!
【解决方案2】:

事实证明OneHotEncoder 的 API 已更改,正如文档中所述。现在您需要传递类别的list 而不仅仅是类别(以便能够在同一个调用中生成多个单热编码,如果需要)。

以下操作是否如您所愿?

import numpy as np
import pandas as pd

dataset = pd.DataFrame(
    {'RowNumber': [1, 2, 3, 4, 5],
     'CustomerId': [602, 311, 304, 354, 888],
     'Surname': ['Har', 'Hil', 'Oni', 'Bon', 'Mit'],
     'CreditScore': [619, 608, 502, 699, 850],
     'Geography': ['FR', 'ES', 'FR', 'FR', 'ES'],
     'Gender': ['F', 'F', 'F', 'F', 'F'],
     'Age': [42, 41, 42, 39, 43],
     'Tenure': [2, 1, 8, 0, 2]})

X = dataset.iloc[:, 3 : -1].values
y= dataset.iloc[:, -1].values

# Making dummy variables
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
X1 = ohe.fit_transform(list(map(lambda x: [x], X[:, 1]))).toarray()
X2 = ohe.fit_transform(list(map(lambda x: [x], X[:, 2]))).toarray()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 2023-01-31
    • 2020-04-16
    • 2020-04-08
    • 1970-01-01
    • 2021-11-30
    • 2018-05-25
    相关资源
    最近更新 更多