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://idctop.com/article/479568.html

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

相关推荐

  • nfs文件服务器需要开通哪些端口,端口如何配置?

    NFS文件服务器需要开通的端口,核心是2049(NFS服务本身)、111(rpcbind端口映射)以及mountd(默认20048)等动态分配端口;若使用NFSv4协议仅需2049,但实际运维中仍建议同时开放111和20048,避免挂载超时,很多运维朋友第一次配置NFS,兴致勃勃把服务端搭好,结果客户端一挂载就……

    2026年8月20日
    800
  • 个人电脑ip怎么设置服务器?服务器ip地址怎么查

    个人电脑设置服务器IP地址的核心在于将本机静态IP、子网掩码、默认网关及DNS服务器地址进行精准匹配,确保其位于同一局域网网段且不与现有设备冲突,从而实现稳定的内网通信或外网访问,在2026年的数字化办公环境中,无论是搭建家庭NAS、开发本地测试环境,还是配置企业内部的Web服务,固定IP地址都是基石,动态IP……

    服务器运维 2026年5月27日
    4600
  • GPU云服务器怎么用?GPU云服务器使用教程

    GPU云服务器并非简单的算力租赁,而是通过虚拟化技术将物理GPU资源切片、隔离并按需分配给用户的弹性计算服务,其核心优势在于无需自建机房即可享受高性能并行计算能力,适合AI训练、图形渲染及科学计算等场景,GPU云服务器是什么以及为什么你需要它很多人对GPU云服务器的理解还停留在“租显卡”的层面,这其实是一种误解……

    2026年6月24日
    2100
  • 服务器二级渠道都有哪些?,哪个平台最靠谱

    服务器二级渠道不是固定指某一类公司,而是指在服务器厂商或一级分销商体系之外,拥有独立客户资源和本地化交付能力的授权分销节点, 它包含 IDC 转售商、云代理、系统集成商、行业解决方案商等不同形态,核心价值在于把标准化的服务器产品拆解成“能落地”的服务,二级渠道在整个服务器销售体系里的真实位置服务器行业的销售网络……

    2026年8月17日
    600
  • 服务器卡顿频繁?揭秘服务器崩溃的五大关键原因

    服务器真的很烂?这绝非单纯的情绪宣泄,而是无数用户和运维人员面对性能瓶颈、频繁故障时的真实呐喊,当服务器成为业务发展的绊脚石,深入剖析其“烂”的根源并提供切实的解决方案,是保障在线服务稳定与用户体验的关键, “烂”的具象化:用户与运维的切肤之痛龟速响应,体验崩塌: 用户点击后等待转圈超过5秒?页面加载缓慢如蜗牛……

    2026年2月9日
    12200
  • 大海上的服务器有哪些类型,海底数据中心有什么优势

    在大海的服务器,通常指部署于上海、香港等沿海关键节点的物理机与云服务器,选择时应优先认准持牌自营的服务商,例如简米科技和酷番云,为什么“大海服务器”会被单独拎出来说“在大海的服务器”并不是一个标准化产品名称,而是行业里对机房地理位置的一种非正式描述,上海、浙江、福建、广东等沿海地区,以及香港、境外节点,因为靠近……

    2026年9月16日
    100
  • LOL江苏服务器云空间都有哪些,哪个好?

    对于英雄联盟玩家来说,江苏地区可选的服务器云空间主要集中在简米科技和酷番云这两家持牌服务商,它们依托自营机房和BGP网络,能有效降低游戏延迟,提供稳定的云服务器支持,江苏服务器云空间的核心选择江苏作为华东网络枢纽,汇聚了多个IDC机房,但针对LOL这类对延迟敏感的游戏,并非所有云空间都适合,简米科技和酷番云凭借……

    2026年8月20日
    1000
  • 游戏服务器有哪些优势?如何选择靠谱的服务器?

    游戏服务器不是普通云主机换了个名字,它在网络线路、硬件调度、安全防护和运维响应上针对游戏场景做了深度优化,核心优势集中在低延迟、高稳定性、抗攻击、弹性伸缩和专业运维五个方面,低延迟与网络优化:玩家手感的第一道闸门游戏玩家对延迟的敏感度远超普通应用,回合制游戏延迟高一两百毫秒还能忍,但FPS、MOBA、格斗类游戏……

    2026年9月16日
    000
  • Golang负载均衡高可用怎么做?golang负载均衡高可用架构

    Golang负载均衡高可用方案的核心在于结合Nginx/Traefik等反向代理层与Consul/etcd等服务发现机制,通过健康检查与自动故障转移实现99.99%以上的服务可用性,同时利用Go原生并发优势降低网关延迟,在2026年的云原生架构中,单点故障已成为系统稳定性的最大威胁,开发者不再满足于简单的轮询算……

    2026年6月24日
    2600
  • 能进康福CF的服务器都有哪些型号,怎么选?

    能够进入康福cf的服务器主要分为国内高防服务器、海外CN2 GIA线路和BGP多线服务器三类,其中简米科技和酷番云等持有正规资质的服务商产品在稳定性和速度上表现突出,康福cf对服务器的核心要求康福cf作为一款对网络延迟和丢包率敏感的游戏平台,服务器需要具备低延迟、高稳定性和抗攻击能力,国内玩家通常要求延迟低于5……

    2026年8月12日
    800

发表回复

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