美文网首页
第十九天 One-Hot编码

第十九天 One-Hot编码

作者: 未不明不知不觉 | 来源:发表于2019-01-07 10:37 被阅读15次

到目前为止,我们一直假设数据是由浮点数组成的二维数组,其中每一列是描述数据点的连续特征(continuous feature)。对于许多应用而言,数据的收集方式并不是这样。一种特别常见的特征类型就是分类特征(categorical feature),也叫离散特征(discrete feature)。这种特征通常并不是数值。分类特征与连续特征之间的区别类似于分类和回归之间的区别,只是前者在输入端而不是输出端。我们已经见过的连续特征的例子包括像素明暗程度和花的尺寸测量。分类特征的例子包括产品的品牌、产品的颜色或产品的销售部门

分类变量

作为例子,我们将使用美国成年人收入的数据集,该数据集是从 1994 年的普查数据库中导出的。 adult 数据集的任务是预测一名工人的收入是高于 50 000 美元还是低于 50 000 美元。这个数据集的特征包括工人的年龄、雇用方式(独立经营、私营企业员工、政府职员等)、教育水平、性别、每周工作时长、职业,等等。表 4-1 给出了该数据集中的前几个条目。

age wrokclass education gender hours-per-week occupation icome
39 State-gov Bachelors Male 40 Adm-clerical <=50K
50 Self-emp-not-inc Bachelors Male 13 Exec-managerial <=50K
38 Private Hs-grade Male 40 Handler-cleaners <=50K
53 Private 11th Male 40 Handler-cleaners <=50K
28 Private Bachelors Female 40 Prof-specialty <=50K
37 Private Master Female 40 Exec-managerial <=50K
49 Private 9th Female 16 Other-service <=50K
52 self-emp-not0ic HS-grad Male 45 Exec-managerial >50K
31 Private Master Female 50 Prof-specialty >50
42 Private Bachelors Male 40 Exec-managerial >50
37 Private Some-college Male 80 Exec-managerial >50K

在这个数据集中,age和hour-per-week是连续特征,我们知道怎样处理这样的特征,但是 workclass 和 education 以及gender、occupation 都是分类特征,他们都取一系列固定的可能的值,下面我们来学习如何在机器学习中来使用分类特征

One-Hot 编码(虚拟变量)

表示分类变量最常用的办法是使用ont-hot编码,也叫做虚拟变量(dummy variable)。虚拟变量背后的思想是将一个分类变量替换为一个或者多个新特征,新特征取值为0和1。比如说workclass特征的可能取值包括 Government Private ,Employee, Self EmployedSelf Employed Incorporated,为了编码这4个可能的取值,我们创建了4个新特征,分别叫做 Government Private ,Employee, Self EmployedSelf Employed Incorporated,如果一个人的workclass取某个值,那么对应的特征值为1

workclass Government Employee Pirvate Employee Self Employed Self Employed Incorporated
Government Employee 1 0 0 0
Pirvate Employee 0 1 0 0
Self Employed 0 0 1 0
Self Employed Incorporated 0 0 0 1

我们使用的 one-hot 编码与统计学中使用的虚拟编码(dummy encoding)非
常相似,但并不完全相同。为简单起见,我们将每个类别编码为不同的二元
特征。在统计学中,通常将具有 k 个可能取值的分类特征编码为 k-1 个特征
(都等于零表示最后一个可能取值)。这么做是为了简化分析(更专业的说法
是,这可以避免使数据矩阵秩亏)

使用pandas进行One-Hot编码

这里我们使用pandas进行one-hot编码,sklearn的one-hot编码前面已经提到过

import pandas as pd
from IPython.display import display
# 文件中没有包含列名称的表头,因此我们传入header=None
# 然后在"names"中显式地提供列名称
data = pd.read_csv(
"dataset/housing.csv", index_col=False)
# 为了便于说明,我们只选了其中几列
# IPython.display可以在Jupyter notebook中输出漂亮的格式
display(data.head())

输出如下

longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value ocean_proximity
0 -122.23 37.88 41.0 880.0 129.0 322.0 126.0 8.3252 452600.0 NEAR BAY
1 -122.22 37.86 21.0 7099.0 1106.0 2401.0 1138.0 8.3014 358500.0 NEAR BAY
2 -122.24 37.85 52.0 1467.0 190.0 496.0 177.0 7.2574 352100.0 NEAR BAY
3 -122.25 37.85 52.0 1274.0 235.0 558.0 219.0 5.6431 341300.0 NEAR BAY
4 -122.25 37.85 52.0 1627.0 280.0 565.0 259.0 3.8462 342200.0 NEAR BAY

我们可以看出最后一列为文本类数据,我们来查看该数据的值

<1H OCEAN     9136
INLAND        6551
NEAR OCEAN    2658
NEAR BAY      2290
ISLAND           5
Name: ocean_proximity, dtype: int64

我们看出该属性有5个值,这里我们使用pandas的get_dummies函数自动变换具有分类类型的列

dummy_data = pd.get_dummies(data)
print(dummy_data.columns)

得到的输出为

Index(['longitude', 'latitude', 'housing_median_age', 'total_rooms',
       'total_bedrooms', 'population', 'households', 'median_income',
       'median_house_value', 'ocean_proximity_<1H OCEAN',
       'ocean_proximity_INLAND', 'ocean_proximity_ISLAND',
       'ocean_proximity_NEAR BAY', 'ocean_proximity_NEAR OCEAN'],
      dtype='object')

我们可以看到分类特征ocean_proximity发生了变化,分类特征每个可鞥取值都被扩展为一个新的特征值

相关文章

  • One-hot与Word2Vec

    one-hot是文本向量化最常用的方法之一。 1.1 one-hot编码 什么是one-hot编码?one-hot...

  • 第十九天 One-Hot编码

    到目前为止,我们一直假设数据是由浮点数组成的二维数组,其中每一列是描述数据点的连续特征(continuous fe...

  • One-Hot编码

    对离散型特征进行one-hot编码是为了让距离的计算显得更加合理。 离散特征进行one-hot编码后,编码后的特征...

  • one hot编码

    一、什么是one-hot编码? One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编...

  • 多类分割One-hot 编码实现方式(转)

    原链接:数据预处理 One-hot 编码的两种实现方式 1. 什么是 One-hot 编码 最直观的理解就是,比如...

  • one-hot encoding

    我是搬运工 One-Hot Encoding One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对...

  • one-hot encoding 与dummy encoding

    One-Hot编码和哑变量应该怎么用 考虑一个具有三个类别的离散型特征,采用One-Hot 编码后: 其中 因此有...

  • 特征提取之pd.get_dummies()

    跳转链接 pandas提供对one-hot编码的函数是:pd.get_dummies() one-hot的基本思想...

  • one-hot编码

    原文链接:one-hot编码 微信公众号:机器学习养成记 搜索添加微信公众号:chenchenwings 与上一...

  • one-hot编码

    对于一些没有排序关系的分类变量(例如{香蕉,苹果,草莓,西瓜}),很多参考资料说转化成one-hot编码来训练。我...

网友评论

      本文标题:第十九天 One-Hot编码

      本文链接:https://www.haomeiwen.com/subject/ocwyrqtx.html