Python中的Pandas get_dummies()方法2025 年 1 月 5 日 | 阅读 10 分钟 引言数据科学和机器学习领域经常包含分类数据,例如非数字值,需要进行妥善处理。数据预处理的职责,例如在将分类数据用于模型或分析之前将其转换为数值格式,是日常工作中非常常见的。这是人们经常使用的工具之一,即 Python Pandas 库的 get_dummies() 方法。 本教程旨在说明使用此函数有多么容易。在这里,我们将讨论操作过程、活动区域、设备角色和边界。培训结束后,您将能够清晰且熟练地在所有数据分析和机器学习工作中利用这一令人印象深刻的工具。 什么是分类数据?首先,在使用 get_dummies() 方法之前,最好对分类信息有一个基本的了解。分类表示指定具有离散可能值集的类型特征或属性,这些值通常不受顺序限制。这些示例合并了性别、颜色或产品类型等类别。 分类数据的挑战分类数据与数值数据的比较对数据分析和机器学习有很大影响,因为大多数算法都需要数值格式。因此,有必要将所有分类数据转换为数值集。虽然利用人工智能来对抗种族主义非常有吸引力,但创建不当的机器人可能会引入偏见或扭曲数据。 Pandas 简介Panda 是 Python 中用于数据处理和分析的实现库。它们包含一种数据结构来处理大数据,并且能够最佳地运行。特别是,它具备处理各种数据类型(包括分类数据)的能力。 理解 get_dummies() 方法Pandas 的 get_dummies() 方法正是用于将分类变量转换为虚拟/指示变量。它在每个具有唯一类别的变量旁边放置一个数据类型为 1/0 的新列,并将属于该类别的观测值赋为 1,否则赋为 0。 语法和参数 get_dummies() 方法的语法很简单 - Data: DataFrame 包含所有需要编码的离散变量。
- Prefix: 在列名前加上前缀以识别这些虚拟变量。
- Prefix_sep: 句子太长。缩短此句子以提高可读性。
- Dummy_na: 是否为缺失值 (NaN) 创建虚拟变量。
- Columns: 要编码的列。如果未指定,编码器将为所有分类列执行编码。
- Sparse: 是否需要将虚拟编码应用于稀疏类型的 DataFrame。
- Drop_first: 我应该忘记所有类别来获得最后的等级,以保证没有多重共线性吗?
- Dtype: 我们需要的列格式。
基本用法 输出 blue green red
0 0 0 1
1 1 0 0
2 0 1 0
3 0 0 1
4 0 1 0
说明 - 名为 'data' 的 DataFrame 是唯一一个列 'color' 是分类类型的 DataFrame('red', 'blue', 'green', 'red', 'green')。
- 由于 get_dummies () 函数应用于 DataFrame 的 color 列,因此这些离散变量(一或零),分别精确地表示每个类别的存在与否,是所讨论操作的结果。
- 生成的 DataFrame dummies 包含三列:' 0(null)', ' 1(green)' 和 ' 2(red)', 分别代表虚拟变量 'colour' 的三个不同值。
- 每一行代表原始数据集中的一个观测值,列值表示该类别对于该观测值是否存在,即它们分别具有 1 或 0 的值。
- 这样的例子说明了 get_dummies() 在对分类变量进行特征编码以便进行后续分析或建模时非常方便。
处理缺失值默认情况下,get_dummy() 方法不为持有 ('NaN') 值的缺失值创建虚拟变量。然而,只有通过 dummy_na=True 选项激活它,上述行为才可能实现。 1. 自定义列名 通过设置 prefix 参数,您可以将这些虚拟变量的列名转换为输出名称。使用此方法可以更轻松地区分它们,尤其是在存在多个分类变量的情况下。 2. 删除第一个级别 设置 drop_first=True 会删除每个分类变量的第一个级别,这样变量就不会显示多重共线性。这仅对某些模型(如线性回归)有效。 3. 稀疏编码 为了节省内存,您可以对包含大量类别的数据集进行稀疏化(sparse=True),用稀疏矩阵替换虚拟变量。 4. 机器学习预处理 在将离散标签变量提供给机器学习模型进行处理之前,必须将其转换为数值格式。例如,encoder() 函数通过离散化分类值并将其转换为机器学习模型可以轻松利用的二进制常数来执行此任务。 用例- 特征工程:在分类变量中,它们经常包含不易察觉的信息,如果表示得当,可以极大地影响模型性能。通过生成虚拟变量,get_dummies() 函数允许进行特征工程方法,例如多项式特征、交互项等。因此,模型参数和准确性得到提高。
- 统计分析:分类变量是数据分析中最常用的变量之一,特别是在研究不同组别或类别的影响时。get_dummies() 是表示分类数据的绝佳工具,统计测试、回归分析和设计可视化可以理解这些数据,使研究人员能够揭示数据中的隐藏模式并发现见解。
- 处理多类分类:在多类分类中,有各种策略可以封装分类目标并让模型继续进行训练和评估过程。get_dummies() 通过将分类特征转换为每个类别的二进制变量来处理此过程,以确保它们适用于多类分类方法,并为更好的模型可解释性提供空间。
- 市场细分:营销和业务分析根据年龄、性别、偏好和购物行为等分类属性对客户进行细分。这使得他们能够从基于细分的营销决策中获益。get_dummies() 作为创建分类数据类别(在限制因素内)的独立变量的手段,进而帮助营销人员区分和响应特定的客户群体。
最佳实践- 了解你的数据:在对分类数据进行编码之前,期望你了解数据的形状和类型。对于你的研究,请考虑你需要多少个唯一类别、它们的频率以及它们与其他变量之间的关系。获取这些知识将有助于制定有效的策略,并防止发生任何不希望的偏见或扭曲。
- 处理高基数变量:当涉及具有许多唯一类别的分类变量时(这些变量基数很高),请尝试使用特征哈希或频率编码,而不是使用独热编码。这些方法有助于控制独热编码的巨大开销,同时保持信息的质量。
- 使用前缀以提高清晰度:为了使包含多个列类别的虚拟列更清晰,建议使用前缀以方便区分。这提高了 DataFrame 的有效性,并有助于避免混淆,尤其是在分类变量可能包含相同或相关类别的名称时。
- 删除第一个级别:再次,在某些情况下,drop_first=True 参数可能更可取,尤其是在回归等线性模型中。这主要确保减少多重共线性问题,并导致低维数据的解码。
- 评估模型性能:在对分类变量进行编码并使用机器学习模型进行训练后,必须持续验证和审查其性能。评估编码策略如何影响模型的精度、整体泛化能力和效率。尝试不同的编码机制和模型相关的参数以获得最佳性能。
- 处理缺失值:第一个问题是在进行任何编码之前,弄清楚应该使用哪种编码来处理缺失值。通常,get_dummies() 在默认模式下(data NaN)不会为缺失(NaN)值添加虚拟变量,但是,您可以通过简单地设置 dummy_na=True 来修改它以使用此模式。如果缺失特征是由于人为或机器错误造成的,或者未知指标在数据集中需要特殊考虑,则利用插补方法或将其编码为新类别。
- 记录你的过程:记录你的编码过程,包括选择特定参数组合和抽象数据转换的原因,是另一个理想的数据工程实践。通过这种文档,整个过程变得简化和可重复,这有助于团队成员和利益相关者之间的协作。
优点Pandas 的 'get_dummies()' 方法宣告了它是一个很好的 Python 虚拟编码工具。因此,这些优势导致该编程语言在全球数据预处理和分析任务中得到普及。以下是一些关键优势: - 易用性: Pandas 的 'get_dummies()' 方法直观且简单,它通过更少的代码减少了对分类变量进行编码的繁琐任务。只需调用该函数,而不是复杂的编码或预处理,分类变量就会被转换为虚拟或指示(非交互)变量。简单的界面结构甚至可以提高初学者(如专家数据科学家)的理解和体验。
- 灵活性:通过 'get_dummies()' 方法,内置了包括超调谐在内的多种参数,使用户能够根据自己的需求定制编码。在通过 API 创建新的增强数据时,用户可以定义列名的后缀,控制缺失值的处理,选择是否删除每个分类变量的第一层,甚至定义结果列的数据类型。这种固有的灵活性允许研究人员根据自己的数据集和分析或模型需求来微调编码过程。
- 与 Pandas DataFrames 集成: 'get_dummies()' 提供了一种与 Pandas 的 'DataFrames' 数据结构一致的有效特征工程工具;这样,它就可以作为单个参数在现有数据结构上进行操作。这种集成是值得称赞的,因为它避免了数据转换或操作(一种熟悉的协议),而这些是在编码之前进行的。该方法既可以用于单个列,也可以用于整个 DataFrame,这使其在处理用户可能期望的平台能够处理的大多数数据预处理情况时具有高度的通用性和便利性。
局限性和注意事项- 内存使用:如果我们使用 get_dummies() 方法,内存使用量会显着增加,尤其是当有许多唯一类别或观测值时。每个额外的变量都会在 DF 中生成一个新列,在这种情况下,数据可能会耗尽内存,例如,在内存受限的环境中工作或处理大数据时。
- 维度灾难:维度灾难可能是由独热编码引起的,因为它极大地增加了连续变量的数量。这可能导致模型性能下降,尤其是在设计为对特征敏感的模型中,其中特征的数量是训练它们所用数据量的许多倍。可以通过降维方法来处理高维数据集,这些方法有助于分析人员克服这个问题。
- 高基数变量:对于具有高基数的分类变量(唯一类别数量非常多或每个类别的可能值数量非常多),get_dummies 函数可能不适用。对离散变量的离散值分布信息丢失,甚至在独热编码中可能丢失推断信息,可能导致数据集维度急剧增加,并可能导致稀疏性问题、内存效率低下和计算挑战。在考虑特征哈希或频率编码等编码工具时,后者对于高基数变量可能更为相关。
- 序数变量:get_dummies() 函数将所有分类变量重新编码为名义变量,这些变量不区分是否存在某种顺序或类别之间的层次结构。为了表示自然的顺序类别,序数独热编码方法可能无法精确描述序数关系。事实上,在这些情况下,用户应该考虑使用保留序数数据但同时可以稍后解码的相关技术。例如,可以使用标签编码或自定义映射。
- 处理缺失值:get_dummies() 函数会自动仅为缺失 (NaN) 的情况开始创建虚拟变量。这样做时,人们很可能正在研究最适合问题的内部流程。然而,应该考虑处理缺失值的适当方法,因为它可能会改变机器学习模型的预测准确性。这要求他们在开始使用数据之前,决定如何处理在特定上下文中可能遇到的许多缺失值。他们可以将缺失值归类为单独的类别,使用适当的技术进行插补,甚至完全排除它们。
- 可解释性:尽管独热编码通过将分类变量转换为“二进制”代码有助于模型的可解释性,但此类功能有时会使解释其他变量变得困难。大量的虚拟变量可能会令人困惑,并使得很难找到实际变量之间的关系。结果,可以安全地说,数据中的主要模式或关联将被模糊。用户需要权衡使用类别变量所固有的折衷以及由此产生的含义。
结论get_dummies() 方法是 Pandas 中的一个内置函数,对于在 Python 编程语言中为编码某些类型的数据创建虚拟变量非常有用。通过将分类数据转换为机器学习模型和统计分析可以利用的格式,它使得生成必要的数值格式变得容易。准确理解丰富过程的工作原理:它在做什么,哪些参数与之配套,以及如何应用它来为你的数据增加价值,从而提高你构建的模型准确率。
|