机器学习之One Hot Encoding

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DreamHome_S/article/details/78965209

My existence is not without reason!I know that i could be a quite a different person!

我的存在必定有意义!我知道我会成为一个与众不同的人!

基本概念

One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。

One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。

整数编码和One-Hot编码

假设我们有一个带有’red’和’green’值的标签序列。我们可以将’red’的整数值分配为0,’green’的整数值为1。只要我们总是将这些数字分配给这些标签,这称为整数编码。

我们可以创建一个二进制向量来表示每个整数值。对于2个可能的整数值,向量的长度为2。编码为0的“red”标签将用二进制向量[1,0]表示,其中第0个索引被标记为值1。然后,编码为1的“green”标签将用一个二进制向量[0,1],其中第一个索引被标记为1。

如果我们有序列:

‘red’,‘red’,‘green’

我们可以用整数编码来表示它:

0,0,1

而One-Hot编码就为:

[1,0],[1,0],[0,1]

编码优点

One hot 编码进行数据的分类更准确,许多机器学习算法无法直接用于数据分类。数据的类别必须转换成数字,对于分类的输入和输出变量都是一样的。

整数编码适用于在类别之间存在自然关系的问题,例如温度“冷”(0)和”热“(1)的标签。

当没有关系时,可能会出现问题,一个例子可能是标签的“狗”和“猫”。在这些情况下,我们想让网络更具表现力,为每个可能的标签值提供概率式数字。这有助于进行问题网络建模。当输出变量使用one-hot编码时,它可以提供比单个标签更准确的一组预测。

Python实现

# -*- coding: UTF-8 -*-

"""
Created on 18-1-2

@summary: One Hot 编码

@author: dreamhome
"""

import numpy as np

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

data = ["a", "b", "c", "d", "b", "c"]

test = np.array(data)
print test

# 整数编码
label_encoder = LabelEncoder()
integer_result = label_encoder.fit_transform(test)
# One-Hot编码
one_hot_encoder = OneHotEncoder()
# One-Hot编码将分类值映射到整数值再表示成二进制向量
integer_result1 = integer_result.reshape(len(integer_result), 1)
one_hot_result = one_hot_encoder.fit_transform(integer_result1)

print "整数编码:"
print integer_result
print "One-Hot编码"
print one_hot_result.toarray()

# 逆编码
inverted = label_encoder.inverse_transform([np.argmax(one_hot_result[4, :])])
print inverted

猜你喜欢

转载自blog.csdn.net/DreamHome_S/article/details/78965209