Python OneHot编码怎么实现?Python中OneHotEncoder用法详解

在 Python 中,One-Hot Encoding(独热编码)是一种将分类变量转换为数值型变量的常用技术,它将每个类别映射为一个二进制向量,其中只有一个元素为 1,其余为 0。

以下是几种常用的实现方法:

【帅器学习/子力】OneHot编码
加载中
【帅器学习/子力】OneHot编码

使用 sklearn.preprocessing.OneHotEncoder(推荐用于机器学习)

这是最常用且功能强大的方法,特别适用于机器学习管道。

import numpy as np
from sklearn.preprocessing import OneHotEncoder
# 示例数据
data = np.array([['男'], ['女'], ['女'], ['男'], ['未知']])
# 初始化 OneHotEncoder
encoder = OneHotEncoder(sparse_output=False)  # sparse_output=False 返回密集数组
# 拟合并转换数据
one_hot_encoded = encoder.fit_transform(data)
print("独热编码结果:")
print(one_hot_encoded)
print("特征名称:", encoder.get_feature_names_out())

输出:

独热编码结果:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 1. 0.]
 [1. 0. 0.]
 [0. 0. 1.]]
特征名称: ['x0_男' 'x0_未知' 'x0_女']

注意:在较新版本的 scikit-learn 中,sparse_output

Python OneHot编码怎么实现?Python中OneHotEncoder用法详解

参数替代了旧的 sparse 参数。


使用 pandas.get_dummies()(推荐用于数据分析)

如果你在使用 Pandas 进行数据处理,get_dummies 是最简洁的方法。

import pandas as pd
# 示例数据
df = pd.DataFrame({
    'gender': ['男', '女', '女', '男', '未知']
})
# 进行独热编码
df_encoded = pd.get_dummies(df, columns=['gender'], prefix='gender')
print(df_encoded)

输出:

  gender_男  gender_女  gender_未知
0       1        0            0
1       0        1            0
2       0        1            0
3       1        0            0
4       0        0            1

使用 numpy.eye 和 np.unique(纯 NumPy 实现)

适用于没有引入 sklearn 或 pandas 的轻量级场景。

import numpy as np
categories = np.array(['男', '女', '女', '男', '未知'])
# 获取所有唯一类别并排序
unique_categories = np.unique(categories)
# 创建独热编码矩阵
# np.eye 创建一个单位矩阵,索引对应类别在 unique_categories 中的位置
one_hot = np.eye(len(unique_categories))[np.searchsorted(unique_categories, categories)]
print(one_hot)

Python OneHot编码怎么实现?Python中OneHotEncoder用法详解

输出:

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

手动实现(理解原理)

def one_hot_encode(labels, classes=None):
    """
    手动实现独热编码
    :param labels: 标签列表或数组
    :param classes: 预定义的类别列表(可选)
    :return: 独热编码矩阵
    """
    if classes is None:
        classes = sorted(set(labels))  # 自动获取所有唯一类别并排序
    class_to_index = {cls: idx for idx, cls in enumerate(classes)}
    n_classes = len(classes)
    one_hot = np.zeros((len(labels), n_classes))
    for i, label in enumerate(labels):
        if label in class_to_index:
            one_hot[i, class_to_index[label]] = 1
        else:
            raise ValueError(f"类别 '{label}' 不在预定义类别中")
    return one_hot, classes
labels = ['男', '女', '女', '男', '未知']
encoded, classes = one_hot_encode(labels)
print("编码结果:n", encoded)
print("类别:", classes)

Python OneHot编码怎么实现?Python中OneHotEncoder用法详解


选择建议

方法 适用场景 优点
OneHotEncoder 机器学习建模、Pipeline 支持稀疏矩阵、可保存模型、处理新类别方便
get_dummies 数据探索、统计分析 代码简洁、与 Pandas 无缝集成
numpy 手动实现 学习原理、无第三方库依赖 轻量、透明度高

注意事项

  1. 类别顺序:确保训练集和测试集的类别顺序一致,否则会导致特征错位。
  2. 新类别处理:在 OneHotEncoder 中,如果测试数据出现训练时未见过的类别,默认会报错,可通过设置 handle_unknown='ignore' 来解决。
  3. 内存使用:独热编码会增加特征维度,对于高基数类别(如用户ID),建议使用目标编码(Target Encoding)或嵌入(Embedding)。

希望这些示例对你有帮助!

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/479568.html

赞 (0)
Excel概率怎么算?Excel概率计算公式及方法
上一篇 2026年7月10日 10:13
H5本地数据库到底存在哪?详解H5本地数据库存储位置
下一篇 2026年7月10日 10:15

相关推荐

  • 服务器异常是什么意思,服务器异常无法访问怎么解决

    服务器异常是指服务器由于硬件故障、软件错误、网络问题或资源耗尽等原因,无法正常响应客户端请求的状态,核心表现为服务中断、响应延迟或数据丢失,直接影响业务连续性和用户体验,服务器异常的常见原因硬件故障:硬盘损坏、内存故障、电源问题等物理设备失效,导致服务器宕机,软件错误:操作系统崩溃、应用程序漏洞或配置错误,引发……

    2026年3月24日
    8000
  • 个人对象存储怎么买?个人对象存储哪个好用

    个人对象存储并非简单的网盘备份,而是将你的数据转化为可被程序调用的API资源,适合开发者、自媒体人及极客用户构建私有化、高可用的数字资产库,很多人对“个人对象存储”存在误解,以为它只是另一个容量更大的网盘,两者的底层逻辑完全不同,网盘侧重“人”的浏览与分享,而对象存储侧重“机器”的读写与调用,对于普通用户,存照……

    2026年6月2日
    7000
  • 服务器控制是什么意思?服务器控制面板哪个好用

    服务器控制的本质在于通过高效的技术手段实现资源的精准调度、安全的全面保障以及运维的自动化执行,其核心目标是确保持续稳定的业务连续性与最优的性能输出,企业构建核心竞争力,必须建立在对服务器资源的完全掌控与智能化管理之上,这不仅是技术层面的操作,更是企业数字化生存的战略基石,服务器控制的核心价值与战略意义在数字化转……

    2026年3月11日
    11000
  • 如何实现服务器本地打开网站?提升访问速度慢的解决方案

    在服务器本地环境中访问网站是开发、测试及部署的核心环节,通过配置本地服务器软件(如Nginx、Apache、IIS)并绑定域名解析(修改hosts文件或使用本地DNS),开发者可在不依赖公网的情况下高效进行功能验证、性能调试和安全测试,这是保障网站质量与稳定性的关键前置步骤,核心原理与必备条件本地访问的本质是让……

    2026年2月14日
    16600
  • 服务器搭建完怎么访问不了?服务器搭建后无法访问的原因排查

    服务器搭建完无法访问,核心原因通常集中在网络连通性阻断、防火墙策略拦截、服务进程未启动或端口配置错误这四大维度,解决问题的关键在于按照“由外而内、由底向上”的排查逻辑,依次检查物理链路、安全策略、服务状态及应用配置,绝大多数访问故障均可通过系统化的排查步骤定位并解决, 网络连通性与端口监听状态排查网络是服务器通……

    2026年3月1日
    13300
  • 服务器有几个管理口,服务器管理口是干嘛用的?

    服务器的管理端口数量并非固定值,主流企业级服务器通常配备1个或2个专用管理接口,部分机型或特定架构下支持共享端口模式,在服务器硬件架构中,管理口(Management Port)是用于带外管理的独立物理接口,其数量和形式直接关系到运维的效率与系统的可靠性,关于服务器有几个管理口这一核心问题,答案取决于服务器的具……

    2026年2月23日
    13100
  • 个人可以注册gov域名吗?gov域名申请条件及流程

    个人无法直接注册.gov.cn后缀的域名,该后缀专属于政府机构,但个人可以通过注册其他后缀或建立个人网站来实现类似的专业形象,很多人一听到“.gov”这个后缀,脑海里立刻浮现出权威、可信、高大上的感觉,毕竟,这是“Government”的缩写,代表着国家权力机构的官方身份,在搜索引擎的算法眼里,这类域名的权重确……

    2026年6月11日
    4100
  • 观远数据真的好用吗?观远数据是做什么的

    观远数据在商业智能领域表现稳健,尤其适合需要快速落地可视化报表和自助式分析的中大型企业,其核心优势在于“轻量化部署”与“移动端体验”,但在超大规模数据底层处理上需结合具体架构评估,观远数据核心能力与产品定位解析为什么选择观远数据而非传统BI工具业内专家指出,传统商业智能工具往往陷入“重建设、轻使用”的困境,而观……

    2026年7月6日
    10500
  • playbooks python怎么用,有哪些技巧

    Playbooks Python 并不是一个独立工具,而是指在自动化脚本(如 Ansible Playbook)中嵌入 Python 代码或使用 Python 语言编写执行逻辑的实践,其核心价值在于利用 Python 的灵活性补足 Playbook 的声明式短板,Playbooks Python 实战:五大核心……

    2026年7月22日
    700
  • 服务器怎么更改绑定的域名解析?域名解析修改步骤详解

    更改服务器绑定的域名解析,本质上是修改DNS解析记录指向新IP地址,并在服务器环境(如Nginx、Apache或IIS)中同步更新站点配置的过程,完成这一操作的核心在于确保DNS解析记录与服务器主机头配置的一致性,任何一方的缺失都会导致网站无法正常访问, 整个流程遵循“先配置服务器,后修改解析”的黄金法则,以确……

    2026年3月15日
    12300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注