📌  相关文章
📜  OneHotEncoder(categorical_features= - Python (1)

📅  最后修改于: 2023-12-03 14:44:53.503000             🧑  作者: Mango

OneHotEncoder 在 Python 中的作用和用法

OneHotEncoder 是一个用于将分类数据(或定性数据)进行编码的工具。在机器学习中,分类数据是常见的一种数据类型。但是,机器学习模型通常只能处理数值型数据,因此需要将分类数据进行编码,让机器学习模型能够处理。

OneHotEncoder 是一种无监督的数据转换方法,它可以将分类变量转换为二进制向量。这种方法会为每个分类变量创建一个虚拟变量,然后将每个虚拟变量的值设置为 0 或 1,用以表示该分类变量的取值。

用法

在 Python 中使用 OneHotEncoder,需要先导入 sklearn.preprocessing 模块,然后创建一个实例对象,并调用其 fit_transform() 方法来对分类数据进行编码。fit_transform() 方法需要接收一个二维数组作为输入,每一列代表一个分类变量,每一行代表一个观察值(数据记录)。

from sklearn.preprocessing import OneHotEncoder
import numpy as np

# 创建 OneHotEncoder 对象
encoder = OneHotEncoder()

# 创建一个包含分类数据的二维数组
data = np.array([
    ['男', '青年', '短发'],
    ['女', '少女', '长发'],
    ['女', '儿童', '长发'],
    ['男', '中年', '短发'],
    ['女', '少女', '短发'],
    ['男', '青年', '长发']
])

# 使用 fit_transform() 方法对数据进行编码
encoded_data = encoder.fit_transform(data).toarray()

print(encoded_data)

运行以上代码,可以得到如下输出结果:

[[0. 1. 0. 0. 1. 1. 0. 1. 0.]
 [1. 0. 1. 0. 0. 0. 1. 0. 1.]
 [1. 0. 0. 1. 0. 0. 1. 0. 1.]
 [0. 1. 0. 0. 0. 1. 0. 1. 0.]
 [1. 0. 1. 0. 0. 0. 0. 1. 0.]
 [0. 1. 0. 1. 0. 0. 1. 0. 1.]]

从输出结果可以看出,数据已经被成功地编码成二进制向量了。

参数

OneHotEncoder 可以接收一些参数,用于定制编码过程的具体行为。

categorical_features

这个参数可以用来指定哪些列是分类变量,需要进行编码。如果不指定,那么所有列都会被认为是分类变量,并进行编码。

# 指定第二列和第三列是分类变量
encoder = OneHotEncoder(categorical_features=[1, 2])
n_values

这个参数用于指定每个分类变量所能取的最大值,默认是 'auto',表示根据各列的值来自动调整。但是在某些情况下,比如有的分类变量取值不够多,可能需要手动指定最大值。

# 指定第一列可以取的最大值是 2
encoder = OneHotEncoder(n_values=[3, 'auto', 'auto'])
sparse

编码后的矩阵往往非常稀疏,因为大部分数据都是 0。默认情况下,OneHotEncoder 返回的矩阵是稠密矩阵,非 0 数据和 0 数据都会被存储。如果希望返回一个稀疏矩阵,可以将 sparse 参数设置为 True。

# 返回一个稀疏矩阵
encoder = OneHotEncoder(sparse=True)
总结

OneHotEncoder 是一种将分类数据转换为二进制向量的工具。在机器学习领域,它非常有用,因为大部分机器学习模型都只能处理数值型数据。在 Python 中,可以使用 sklearn.preprocessing 模块中的 OneHotEncoder 类来进行编码。在使用 OneHotEncoder 时,可以通过参数来定制编码的行为。