one-hot representations独热编码

数据预处理之独热编码(One-Hot Encoding)


**定义** One-Hot Encoding即 One-Hot 编码,也称独热编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。

**解决问题**:由于分类器往往默认数据数据是连续的,并且是有序的,但是在很多机器学习任务中,存在很多离散(分类)特征,因而将特征值转化成数字时,往往也是不连续的, One-Hot 编码解决了这个问题。

**Case**——Suppose 已知三个feature,三个feature分别取值如下:

feature1=[“male”, “female”]
feature2=[“from Europe”, “from US”, “from Asia”]
feature3=[“uses Firefox”, “uses Chrome”, “uses Safari”, “uses Internet Explorer”]

我们让每一个特征的值都从整数0开始mark,并分别从这三类feature提取一个feature作为的一次abstracting-feature-set。e.g:

[“male”, “from US”, “uses Internet Explorer”] is marked为[0, 1, 3]
[“female”, “from Asia”, “uses Chrome”] is marked为[1, 2, 1]

Q: 求[0, 1, 3]对应的One-Hot 编码?

QA:对于每一个特征,如果它有m个可能值,那么经过独热编码(激活)后,就变成了m个二元特征。
首先将每个特征的每个值的mark转化其对应的二进制数,例如0——00,1——01,2——10,3—11,然后按照特征值在特征类中的位置计算对应的One-Hot 编码,例如对feature3分别得到:0——0001,1——0010,2——0100,3——1000
由于三个特征的值互斥,每次只有一个激活。因此,数据会变成稀疏的。这里未激活的特征值用0000表示。
因此[0, 1, 3]对应的One-Hot 编码为:
[0001,0000,0000,0010,0000,0000,0000,0000,1000]
可以简写为[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]。

转自:http://blog.csdn.net/smile909/article/details/51835194
在sklearn中进行独热编码有几种方式。一种常用的方法是先使用LabelEncoder将分类特征进行数字编码,然后再使用OneHotEncoder将数字编码转化为独热编码。另外一种方法是直接使用LabelBinarizer对文本进行独热编码。还有一种方法是使用DictVectorizer。 首先,我们可以使用LabelEncoder将分类特征进行数字编码。通过以下代码可以实现: from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() category = encoder.fit_transform(data['颜色']) print("颜色编码:",category) print("编码对应的颜色:",encoder.classes_) 其中,data['颜色']表示待编码的分类特征列,category是编码后的结果,encoder.classes_表示编码对应的原始分类特征。 接着,我们可以使用OneHotEncoder将数字编码转化为独热编码。可以使用以下代码实现: from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder() onehot = encoder.fit_transform(category.reshape(-1, 1)).toarray() print("独热编码结果:", onehot) 其中,category.reshape(-1, 1)是将数字编码转化为二维数组,toarray()用于将稀疏矩阵转化为稠密矩阵,onehot独热编码后的结果。 另外一种方法是直接使用LabelBinarizer对文本进行独热编码。可以使用以下代码实现: from sklearn.preprocessing import LabelBinarizer encoder = LabelBinarizer() onehot = encoder.fit_transform(data['颜色']) print("独热编码结果:", onehot) 其中,data['颜色']表示待编码的分类特征列,onehot独热编码后的结果。 最后一种方法是使用DictVectorizer。可以使用以下代码实现: from sklearn.feature_extraction import DictVectorizer encoder = DictVectorizer() onehot = encoder.fit_transform(data[['颜色']].to_dict('records')).toarray() print("独热编码结果:", onehot) 其中,data[['颜色']].to_dict('records')是将指定的特征列转化为字典形式,toarray()用于将稀疏矩阵转化为稠密矩阵,onehot独热编码后的结果。 总结来说,在sklearn中进行独热编码,可以使用LabelEncoder和OneHotEncoder、LabelBinarizer或者DictVectorizer这几种方法。每一种方法都有其适用的情况,具体选择哪种方法取决于数据的特点和需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值