[Sklearn应用] Preprocessing data (三)编码分类特征 Encoding categorical features

本文介绍了在机器学习预处理阶段如何使用Sklearn进行分类特征的编码,特别是One-Hot编码。强调了pandas的get_dummies()方法因其便捷性和功能强大而常用,以及sklearn.preprocessing.OneHotEncoder()的使用细节,包括可能遇到的类型转换问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此内容在sklearn官网地址: http://scikit-learn.org/stable/modules/preprocessing.html#
sklearn版本:0.18.2

one-hot-encode

  有时特征内容并不是数值,而是字符串类型。如果直接将字符串转成一个对应的数值,造成原本的特征具有大小关系。这是需要使用 one-hot-encode编码格式。

两种转化方式:

  • pandas.get_dummies():常用方法,功能强大,操作简单;
  • sklearn.preprocessing.OneHotEncoder():用法复杂且易报错,较少使用。
pandas.get_dummies(data, columns=["one",
### 特征工程中哑编码的实现方法 在机器学习和数据预处理领域,哑编码One-Hot Encoding)是一种常见的技术,用于将分类变量转换为可以提供给机器学习算法的形式。通过哑编码,每个类别都会被转化为一个新的二元列(0 或 1),表示该类别的存在与否。 #### 使用 `pandas` 实现哑编码 Python 的 `pandas` 库提供了简单易用的方法来进行哑编码操作。以下是具体的代码示例: ```python import pandas as pd # 创建一个简单的 DataFrame 示例 data = {'Gender': ['Male', 'Female', 'Female', 'Male'], 'City': ['New York', 'Los Angeles', 'New York', 'Chicago']} df = pd.DataFrame(data) # 使用 get_dummies 函数进行 One-Hot 编码 one_hot_encoded_df = pd.get_dummies(df, columns=['Gender', 'City']) print(one_hot_encoded_df) ``` 上述代码片段展示了如何利用 `pd.get_dummies()` 对分类变量进行哑编码[^5]。此函数会自动创建新的二元列,并删除原有的分类列。 #### 使用 `scikit-learn` 实现哑编码 除了 `pandas`,还可以使用 `scikit-learn` 提供的功能完成相同的操作。下面是基于 `ColumnTransformer` 和 `OneHotEncoder` 的实现方式: ```python from sklearn.preprocessing import OneHotEncoder from sklearn.compose import ColumnTransformer import numpy as np import pandas as pd # 构造样本数据 data = {'Gender': ['Male', 'Female', 'Female', 'Male'], 'City': ['New York', 'Los Angeles', 'New York', 'Chicago']} df = pd.DataFrame(data) # 定义要应用 One-Hot Encoder 的列名 categorical_features = ['Gender', 'City'] # 初始化 ColumnTransformer 并指定 OneHotEncoder transformer = ColumnTransformer( transformers=[ ('onehot', OneHotEncoder(sparse=False), categorical_features) ], remainder='passthrough' # 不影响其他未指定的列 ) # 转换数据并查看结果 encoded_data = transformer.fit_transform(df) encoded_df = pd.DataFrame(encoded_data, columns=transformer.named_transformers_['onehot'].get_feature_names_out(categorical_features)) print(encoded_df) ``` 这段代码演示了如何借助 `scikit-learn` 的工具链执行更灵活的哑编码过程[^6]。特别适合于复杂场景下的流水线构建需求。 #### 哑编码的优点与局限性 优点包括但不限于能够有效减少模型对顺序假设的影响;而缺点则可能涉及维度爆炸问题,在某些情况下增加计算成本较高[^7]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值