ML算法:Python中数据集的一种热编码

2021年5月5日13:36:20 发表评论 951 次浏览

有时在数据集中, 我们会遇到包含没有特定优先顺序的数字的列。列中的数据通常表示类别或类别的值, 并且在列中的数据经过标签编码时也是如此。这会混淆机器学习模型, 为避免这种情况, 列中的数据应进行一次热编码。

一种热编码–

它是指拆分包含数字的列分类数据到许多列, 具体取决于该列中存在的类别数量。每列包含对应于其放置在哪一列的" 0"或" 1"。

例如 :

考虑给出水果及其相应分类价值和价格的数据。

水果 水果的分类价值 价钱
苹果 1 5
芒果 2 10
苹果 1 15
橙子 3 20

对数据进行一次热编码后的输出如下所示:

苹果 芒果 橙子 价钱
1 0 0 5
0 1 0 10
1 0 0 15
0 0 1 20

以下是Python中的实现-

示例1:

下面的示例是区域的数据和客户的信用评分, 区域是一个分类值, 需要进行一次热编码。

# Program for demonstration of one hot encoding
  
# import libraries
import numpy as np
import pandas as pd
  
# import the data required
data = pd.read_csv(r "../../onehotenc_data.csv" )
print (data)

输出如下:

数据示例1

一个热编码区域列–

# importing one hot encoder from sklearn
# There are changes in OneHotEncoder class
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
   
# creating one hot encoder object with categorical feature 0
# indicating the first column
columnTransformer = ColumnTransformer([( 'encoder' , OneHotEncoder(), [ 0 ])], remainder = 'passthrough' )
  
data = np.array(columnTransformer.fit_transform(data), dtype = np. str )

输出如下:

ML | Python中数据集的一种热编码1

输出包含5列, 其中一列表示价格, 其余4列表示4个区域。

示例2:

一个热编码器仅采用数字分类值, 因此任何字符串类型的值都应在"一热"编码之前进行标签编码。

以下示例包含客户的地理位置和性别数据, 必须首先对其进行标签编码。

# importing libraries
import numpy as np
import pandas as pds
  
# After importing the required data
print (data)

输出如下:

ML | Python中数据集的一种热编码2

标签编码数据–

# label encoding the data
from sklearn.preprocessing import LabelEncoder
  
le = LabelEncoder()
  
data[ 'Gender' ] = le.fit_transform(data[ 'Gender' ])
data[ 'Geography' ] = le.fit_transform(data[ 'Geography' ])

输出如下:

ML | Python中数据集的一种热编码3

一本热门的性别和地理编码专栏–

# importing one hot encoder from sklearn
from sklearn.preprocessing import OneHotEncoder
  
# creating one hot encoder object by default
# entire data passed is one hot encoded
onehotencoder = OneHotEncoder()
  
data = np.array(columnTransformer.fit_transform(data), dtype = np. str )

输出如下:

ML | Python中数据集的一种热编码4

输出包含5列, 其中2列分别代表性别, 男性和女性, 其余3列分别代表法国, 德国和西班牙。

注意 :

  1. 一个热编码器不接受一维数组或熊猫序列, 输入应始终为二维。
  2. 传递给编码器的数据不应包含字符串。

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: