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

相关推荐

  • 服务器开发选什么好处?企业为什么要做服务器开发

    服务器开发是企业构建数字化核心竞争力的关键战略选择,其核心价值在于提供了无与伦比的数据掌控力、极高的系统稳定性以及深度定制业务逻辑的能力,与单纯依赖第三方SaaS服务或标准化的虚拟主机相比,自主进行服务器开发能够让企业从底层架构上掌握主动权,彻底打破“黑盒”限制,确保数据资产的安全与独立,同时为高并发业务场景提……

    2026年4月7日
    7900
  • 如何在服务器查看HBA卡信息? | HBA卡管理优化指南

    服务器查看HBA卡在服务器上查看主机总线适配器(HBA)卡的信息,是系统管理、故障排查和性能调优的基础操作,核心方法包括操作系统内置工具、服务器厂商专用工具以及物理检查, 理解HBA卡及其查看的重要性主机总线适配器(HBA)是服务器与存储设备(如SAN、磁带库、JBOD)通信的关键硬件桥梁,常见类型有FC HB……

    2026年2月15日
    17300
  • 高级威胁检测系统多少钱?企业级安全防护报价贵吗

    2026年企业级高级威胁检测系统均价在30万至150万元之间,具体价格受部署形态、检测引擎深度、授权节点数及是否集成AI大模型能力四大核心维度决定,价格解构:高级威胁检测系统到底多少钱?部署形态与基线价格根据2026年网络安全市场定价规律,不同交付模式直接决定采购门槛:云端SaaS化订阅:按探针数量与日志量计费……

    2026年4月26日
    6100
  • 个人域名真的能免费注册吗?免费域名注册平台有哪些

    个人域名免费注册通常不可行,主流注册商均收取年费,但可通过特定活动或新注册商促销以极低成本获得首年使用权,长期持有仍需预算,很多人误以为域名像电子邮箱一样可以永久免费使用,这其实是一个常见的认知误区,域名本质上是互联网上的稀缺资源,由国际互联网名称与数字地址分配机构(ICANN)统一管理,注册商需要向管理机构缴……

    2026年6月10日
    4300
  • 个人服务器是干嘛的?个人服务器搭建教程

    个人服务器本质上是属于你自己的私有云端,它让你彻底摆脱对公共云服务的依赖,实现数据完全掌控、隐私绝对安全以及功能无限扩展,是极客和数字生活爱好者的终极硬件玩具,很多人听到“服务器”三个字,第一反应往往是机房里轰鸣作响、插满网线的昂贵机柜,随着硬件成本的降低和云计算技术的普及,个人服务器已经走进了普通家庭,它不再……

    2026年5月29日
    4600
  • 个人域名怎么解析到公司网站?个人域名解析到公司网站教程

    技术上完全可行,但出于品牌统一、SEO权重集中及企业合规性考虑,通常不建议将个人域名直接作为主域名解析至企业官网,最佳实践是将个人域名设置为301重定向至公司主域名,在数字化营销的实战场景中,很多企业主或运营人员会面临这样的困惑:手里有一个注册多年的个人域名,是否可以直接指向公司的服务器IP,让访问者通过个人域……

    2026年6月5日
    3700
  • 负载均衡后端ECS权重设置为0有什么影响?,如何解决?

    负载均衡后端ECS权重设置为0,意味着该ECS实例将不再接收来自负载均衡器的新建连接请求,但已建立的连接仍会继续处理直到会话结束,这是一种用于平滑摘除后端节点的常见运维手段,负载均衡后端ECS权重为0到底是什么意思权重是负载均衡器分配流量的依据,取值范围通常为0到100,当权重设为0时,该ECS在负载均衡的调度……

    2026年7月29日
    1200
  • 服务器怎么分vps?详细步骤与注意事项解析

    服务器分割VPS的核心在于虚拟化技术的应用,通过将物理服务器资源划分为多个独立虚拟环境,实现资源的高效利用,以下是详细操作步骤和注意事项:选择虚拟化技术虚拟化技术是分割VPS的基础,主流方案包括:KVM:性能接近物理机,支持全虚拟化,适合高负载场景,OpenVZ:轻量级容器技术,资源利用率高,但隔离性较弱,Xe……

    2026年3月17日
    10700
  • 移动应用服务器有哪些推荐?,怎么选性价比高?

    移动应用服务器是支撑移动应用后端运行的硬件或虚拟化资源,常见类型包括云服务器、物理服务器、容器实例和边缘节点,具体选型需结合业务规模、响应速度和合规要求,移动应用服务器的常见类型移动应用的后端架构决定了服务器选型的方向,不同阶段的应用对计算、存储和网络的要求差异明显,以下四种类型覆盖了当前主流方案,云服务器云服……

    2026年8月19日
    500
  • 网络服务器配件有哪些

    网络服务器配件是一个完整的硬件生态,从处理器到散热系统,每一个部件都决定了服务器的最终表现,处理器:服务器的计算核心处理器是服务器的心脏,执行所有指令和运算,选择CPU时,关键参数包括核心数、线程数、主频、缓存大小以及功耗,对于数据库、虚拟化等并行任务,多核心多线程优势明显;对于高频交易、实时分析等低延迟场景……

    2026年8月24日
    000

发表回复

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