• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

OneHotEncoder函数

武飞扬头像
BlackStar_L
帮助1

仅介绍常用功能,详情请看结尾参考链接。

一、函数功能与参数

将分类特征编码为one-hot数字数组。

这个转换器的输入应该是一个类似数组的整数或字符串,表示分类(离散)特征所采用的值。使用 one-hot(又名“one-of-K”或“dummy”)编码方案对特征进行编码。这将为每个类别创建一个二进制列并返回一个稀疏矩阵或密集数组(取决于sparse 参数)。

默认情况下,编码器根据每个特征中的唯一值派生类别。或者,您也可以categories 手动指定。

注意:y 标签的 one-hot 编码应该使用 LabelBinarizer。

使用说明:

from sklearn.preprocessing import OneHotEncoder

OneHotEncoder(categories='auto', sparse='True', dtype='float')

函数参数 参数说明
categories 默认’auto’,根据根据训练数据自动确认类别;默认数组的列表,categories[i]保存第 i 列中预期的类别。传递的类别不应在单个特征中混合字符串和数值,并且应在数值的情况下进行排序。使用的类别可以在categories_属性中找到。
sparse 默认为True,如果设置为 True 将返回稀疏矩阵,否则将返回一个数组。
dtype 默认为float,所需的输出数据类型。
函数属性 属性说明
categories_ 属性名称和类型
函数方法 方法说明
get_feature_names() 查看拟合后的特征名称
fit(X) 使X拟合OneHotEncoder
fit_transform(X) 使X拟合OneHotEncoder,并且转换X



二、函数使用

生成OneHotEncoder类模型。

import pandas as pd
data = {'degree':['master','master','PHD'],'grade':['A', 'B', 'C']}
df = pd.DataFrame(data)
from sklearn.preprocessing import OneHotEncoder
# 拟合模型
enc = OneHotEncoder()
enc.fit(df)
# 展示原始每个特征的不同种类
enc.categories_
# [array(['PHD', 'master'], dtype=object), array(['A', 'B', 'C'], dtype=object)]
# 不同特征的不同属性值列举出来
enc.get_feature_names()
"""
array(['x0_PHD', 'x0_master', 'x1_A', 'x1_B', 'x1_C'], dtype=object)
"""

# 输出稀疏矩阵,指出矩阵中1的坐标位置,其余位置为 0。
print(enc.transform(df))
"""
  (0, 1)	1.0
  (0, 2)	1.0
  (1, 1)	1.0
  (1, 3)	1.0
  (2, 0)	1.0
  (2, 4)	1.0
"""

# 加上toarray()转换为数组形式,直观的结果,类似与 get_dummy()
print(enc.transform(df).toarray())
"""
[[0. 1. 1. 0. 0.]
 [0. 1. 0. 1. 0.]
 [1. 0. 0. 0. 1.]]
"""
学新通

注意: 如果OneHotEncoder模型设置了sparse=False,则直接transform可以得到数组矩阵而不在需要用到toarray()。

from sklearn.preprocessing import OneHotEncoder
# 拟合模型
# 注意这里设置了参数sprase=False,即直接返回数组
enc = OneHotEncoder(sparse=False)
enc.fit(df)

print(enc.transform(df))
"""
[[0. 1. 1. 0. 0.]
 [0. 1. 0. 1. 0.]
 [1. 0. 0. 0. 1.]]
"""

测试:

根据训练好的已有OneHotEncoder模型去OneHot测试样本:

da1 = {'degree':['master'],'grade':['C']}
dd1 = pd.DataFrame(da1)
print(enc.transform(dd1))
"""
[[0. 1. 0. 0. 1.]]
"""

注意:测试样本仅限于训练样本中的特征及其对应的特征值,并且按照顺序给定特征值,如下:

# 新的特征值
da1 = {'degree':['master'],'grade':['D']}
# Found unknown categories ['D'] in column 1 during transform

# 特征值混合
da1 = {'degree':['C'],'grade':['C']}
# Found unknown categories ['C'] in column 0 during transform

# 新的特征
da1 = {'height':['master'],'weather':['C']}
# 正常输出:[[0. 1. 0. 0. 1.]]

# 然而
da1 = {'height':['C'],'weather':['C']}
# Found unknown categories ['C'] in column 0 during transform
# 同前面第二个错误
学新通

说明OneHot与特征标签无关,特征按顺序进行OneHot,且与特征值有关。

参考

sklearn.preprocessing.OneHotEncoder (scikit-learn)

修改时间

2022/1/27

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggahab
系列文章
更多 icon
同类精品
更多 icon
继续加载