独热编码和标签编码

假设有猫、狗、斑马图片数据集,需要通过神经网络进行分类。输入很好理解————图像(处理成黑白图像)中的每个像素作为一个输入神经元,输出好像有点复杂。猫、狗、斑马属于类别变量,很多机器学习算法不能处理类别变量,因此需要对类别变量进行编码。

类型编码

通常编码方式有:标签编码、二值编码以及独热编码。下面进行分别说明:

标签编码

标签编码——标签被编码为连续的数值。这种方法不太适合我们的场景,猫相比于斑马更像狗吗?因为连续数值容易产生这类问题。标签编码更适合这些场景:国家人口数量、建筑物高度、价格范围(低价、中等价格、高价,编码对应1,2,3).
在这里插入图片描述

在神经网络中,使用标签编码,输出层仅有一个输出神经元。

二值编码

二值编码于标签编码类似————转换为二值形式(数值),在神经网络中,使用二值编码,输出有两个神经元。
在这里插入图片描述

独热编码

独热编码使用的列数与要编码的类的数量相同。注意,我们不再对类有任何内置的假设(标签编码连续数值假设)。
在神经网络中,使用独热编码输出层恰好有3个输出神经元。
在这里插入图片描述

示例

下面示例通过两种方法实现独热编码:

import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder
from keras.utils import to_categorical

target_variable = np.array(['cat', 'dog', 'zebra', 'zebra'])

encoder = OneHotEncoder()
sk_one_hot_encoded = encoder.fit_transform(target_variable.reshape(-1, 1)).toarray()

# 使用Keras包实现独热编码
# 首先编码为整数
categorical = pd.Categorical(target_variable)
categorical_codes = categorical.codes
# [0 1 2 2]

# 基于前一步进行独热编码
one_hot_encoded = to_categorical(categorical_codes)
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]
#  [0. 0. 1.]]

二值编码使用下列方式:

data = np.array([1, 2, 3, 0])
data_binarized = preprocessing. Binarizer(threshold=1.4).transform(data)

标签编码示例:

from sklearn import preprocessing

label_encoder = preprocessing.LabelEncoder()
input_classes = ['audi' , 'ford' , 'audi' , 'toyota' , 'ford' ,'bmw' ]
label_encoder.fit(input_classes)

for i, item in enumerate(label_encoder.classes_):
    print(item, "-->", i)
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值