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.eyenp.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

相关推荐

  • 服务器提供哪些折扣?服务器租用优惠活动有哪些

    服务器折扣本质上是一种基于采购规模、付款周期及市场供需关系的动态定价策略,企业通过精准匹配自身业务需求与厂商促销节点,最高可降低30%至50%的长期运营成本,核心结论在于:获取优惠的关键不在于单一的降价幅度,而在于对计费模式、承诺期限以及增值服务组合的综合谈判能力,企业在选购时,应优先关注长期合约折扣、预留实例……

    2026年3月13日
    10800
  • 如何彻底卸载服务器监控软件?附详细清理步骤教程

    服务器监控卸载是指在服务器环境中安全移除监控软件或工具的过程,旨在优化系统资源、提升性能并降低潜在风险,这包括彻底清除监控代理、配置文件和遗留数据,确保不影响核心业务运行,对于IT管理员来说,掌握正确的卸载方法至关重要,它能避免服务中断、数据丢失或安全漏洞,在云计算或本地数据中心中,过时的监控工具如Nagios……

    2026年2月8日
    12600
  • 服务器硬盘监控总报警?企业级硬盘健康检测方案

    服务器监控硬盘是确保数据中心和IT基础设施稳定运行的核心环节,它能实时检测硬盘健康状况,预防数据丢失、系统崩溃和业务中断,通过专业工具和策略,企业可以提前预警故障,优化性能,并提升整体可靠性,为什么服务器硬盘监控至关重要硬盘是服务器存储数据的物理载体,任何故障都可能导致灾难性后果,未经监控的硬盘问题如坏扇区、读……

    2026年2月9日
    11700
  • web服务器端技术有哪几种类型,哪种技术最常用?

    Web服务器端技术主要分为静态Web服务器、动态Web服务器、应用服务器、反向代理服务器、容器化部署和无服务器架构六大类型,各自适配不同业务场景与性能需求,选型时需结合应用规模、并发量及运维能力综合决定,静态Web服务器技术静态Web服务器是整个Web架构的基石,专门用于处理HTML、CSS、JavaScrip……

    2026年8月5日
    1300
  • 蓝本python怎么用?Python蓝本模式详解

    蓝本(Blueprint)是Flask框架的核心扩展,它通过模块化设计解决大型应用的结构混乱问题,让代码复用和工程化管理变得简单高效,在Python后端开发的早期阶段,开发者往往习惯将所有路由、视图函数和业务逻辑塞进一个巨大的app.py文件中,这种做法在小规模项目中或许能勉强运行,但一旦项目规模扩大,代码耦合……

    2026年7月7日
    12700
  • 服务器属于网络端还终端?服务器是终端设备吗

    服务器在网络架构中扮演着资源提供者的角色,严格意义上属于网络端设备,而非终端设备,这一界定基于其在计算机网络体系中的核心功能与位置,服务器负责数据的存储、处理与分发,是网络服务的核心节点,而终端设备则是用户接入网络、获取服务的交互界面,核心定义与角色定位要厘清服务器属于网络端还终端,必须从网络架构的基本逻辑出发……

    2026年4月11日
    6900
  • 服务器搭建vue网站详细教程,vue项目如何部署到服务器

    在服务器上成功部署Vue网站的核心在于构建稳定高效的Web服务器环境、实现静态资源的正确路由配置以及确保安全性与访问速度的极致优化,这一过程并非简单的文件上传,而是涉及Nginx反向代理配置、构建产物管理及HTTPS安全加固的系统工程,通过标准化的部署流程,可以确保Vue单页应用在生产环境中实现秒级加载与流畅交……

    2026年3月6日
    11700
  • 专业服务器查看服务,24/7实时监控、状态诊断与性能优化解决方案 | 如何快速查看服务器状态?高效服务器监控工具指南

    服务器查看服务是一种专业的IT管理解决方案,通过实时监控服务器硬件、软件、性能和安全性,帮助企业预防故障、优化资源并保障业务连续性,在当今数字化时代,服务器是核心基础设施,任何宕机或漏洞都可能导致数据丢失、收入损失或声誉受损,专业的服务器查看服务不仅能自动化监控关键指标如CPU使用率、内存负载和网络流量,还能提……

    2026年2月14日
    12000
  • 服务器异常文档介绍内容是什么,服务器异常怎么解决

    服务器异常文档是企业IT运维体系中至关重要的知识资产,其核心价值在于将不可预测的技术故障转化为可复用的标准化解决方案,从而最大程度降低业务停机风险,一份高质量的服务器异常文档不仅是故障处理的操作手册,更是团队技术沉淀与经验传承的载体,构建完善的服务器异常文档体系,能够显著提升运维团队的响应速度,确保在突发状况下……

    2026年3月24日
    9100
  • 巴西游戏服务器哪个更稳定,延迟多少算正常?

    巴西本土云服务商、国际公有云厂商的巴西节点,以及中国IDC厂商提供的全球部署方案,选择时需重点考察机房位置、带宽质量和合规资质,像简米科技和酷番云这类持全牌照的厂商,能提供稳定的游戏服务器方案,巴西游戏服务器的主流类型与分布本土云服务商巴西本土服务商在本地合规和延迟上有天然优势,适合中小规模游戏部署,- **巴……

    2026年8月22日
    000

发表回复

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