首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
4.1 分类变量
4.1.1 One-Hot 编码(虚拟变量)
4.1.2 数字可以编码分类变量
4.2 分箱、离散化、线性模型与树
4.3 交互特征与多项式特征
4.4 单变量非线性变换
4.5 自动化特征选择
4.5.1 单变量统计
4.5.2 基于模型的特征选择
4.5.3 迭代特征选择
4.6 利用专家知识
5.1 交叉验证
5.1.1 scikit-learn 中的交叉验证
5.1.2 交叉验证的优点
5.1.3 分层k 折交叉验证和其他策略
5.2 网格搜索
5.2.1 简单网格搜索
5.2.2 参数过拟合的风险与验证集
5.2.3 带交叉验证的网格搜索
5.3 评估指标与评分
5.3.1 牢记目标
5.3.2 二分类指标
5.3.3 多分类指标
5.3.4 回归指标
5.3.5 在模型选择中使用评估指标
6.1 用预处理进行参数选择
6.2 构建管道
6.3 在网格搜索中使用管道
6.4 通用的管道接口
6.4.1 用make_pipeline 方便地创建管道
6.4.2 访问步骤属性
6.4.3 访问网格搜索管道中的属性
6.5 网格搜索预处理步骤与模型参数
6.6 网格搜索选择使用哪个模型
7.1 用字符串表示的数据类型
7.2 示例应用:电影评论的情感分析
7.3 将文本数据表示为词袋
7.3.1 将词袋应用于玩具数据集
7.3.2 将词袋应用于电影评论
7.4 停用词
7.5 用tf-idf 缩放数据
7.6 研究模型系数
7.7 多个单词的词袋(n元分词)
7.8 分词、词干提取与词形还原
7.9 主题建模与文档聚类
8.1 处理机器学习问题
8.2 从原型到生产
8.3 测试生产系统
8.4 构建你自己的估计器
8.5 下一步怎么走
8.5.1 理论
8.5.2 其他机器学习框架和包
8.5.3 排序、推荐系统与其他学习类型
8.5.4 概率建模、推断与概率编程
8.5.5 神经网络
8.5.6 推广到更大的数据集
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(下)
小册名称:Python机器学习基础教程(下)
### 4.1.2 数字可以编码分类变量 在机器学习领域,数据预处理是至关重要的一步,它直接影响到后续模型的性能与效果。分类变量,或称名义变量、类别变量,是数据集中常见的数据类型,代表了一组离散、无序的类别,如颜色(红、黄、蓝)、性别(男、女)等。然而,大多数机器学习算法,尤其是基于数值计算的算法,如线性回归、逻辑回归、神经网络等,要求输入数据为数值型。因此,将分类变量编码为数字形式,是数据预处理中不可或缺的一环。本章节将深入探讨数字编码分类变量的方法及其应用场景。 #### 4.1.2.1 编码的必要性 为什么需要将分类变量编码为数字?这主要基于以下几个原因: 1. **算法兼容性**:如前所述,许多机器学习算法只能处理数值型数据。通过将分类变量转换为数值,可以确保算法能够正常运行。 2. **距离度量**:在聚类分析、K近邻等算法中,数据点之间的距离计算是关键步骤。对于分类变量,直接使用类别名称无法计算距离,而编码后则可以通过数值差异来间接反映类别间的某种“距离”或“相似度”。 3. **模型性能**:适当的编码方式能够提升模型的预测能力。例如,在决策树中,编码方式可能影响节点的分裂顺序和决策路径的选择。 #### 4.1.2.2 常见的编码方法 将分类变量转换为数字,主要有以下几种方法: ##### 1. 标签编码(Label Encoding) 标签编码是最简单的编码方式,它将每个类别映射到一个唯一的整数。例如,对于性别变量(男、女),可以将“男”编码为0,“女”编码为1。虽然这种方法实现简单,但它存在一个问题:当类别之间存在某种自然顺序时(如教育水平:小学、中学、大学),这种顺序会被编码方式无意中引入,从而可能导致模型学习到错误的模式。因此,在类别无序的情况下,应谨慎使用标签编码。 ##### 2. 独热编码(One-Hot Encoding) 独热编码是解决标签编码中顺序问题的一种有效方法。它将每个类别转换为一个只有一个元素为1、其余元素为0的二进制向量。例如,对于颜色变量(红、黄、蓝),“红”可以编码为[1, 0, 0],“黄”为[0, 1, 0],“蓝”为[0, 0, 1]。独热编码能够保持类别的无序性,且易于理解,但缺点是当类别数量较多时,会导致数据维度急剧增加,可能引发“维度灾难”,增加计算复杂度和过拟合的风险。 ##### 3. 虚拟编码(Dummy Encoding)或哑变量编码 虚拟编码与独热编码非常相似,但在处理时通常会去掉一个类别(通常是第一个或最后一个)的编码,以减少一个维度,避免完全多重共线性问题。例如,在颜色变量的例子中,如果选择去掉“红”的编码,则“黄”和“蓝”将分别被编码为[1, 0]和[0, 1]。这种方法在保持类别无序性的同时,也有效降低了数据的维度。 ##### 4. 目标编码(Target Encoding)或均值编码(Mean Encoding) 目标编码是一种更为复杂的编码方式,特别适用于处理分类变量且目标变量为连续值或分类值的场景。其基本思想是根据目标变量的值来编码分类变量的每个类别。例如,在预测房价的模型中,如果房屋类型(公寓、别墅)是一个分类变量,可以通过计算每种房屋类型对应房价的平均值或中位数来编码。这种编码方式能够捕捉类别与目标变量之间的关联,但需要注意过拟合的风险,特别是当某些类别的样本量很少时。 ##### 5. 二进制编码(Binary Encoding) 二进制编码是将类别映射到二进制序列的方法。它适用于类别数量较多且希望减少编码后数据维度的情况。每个类别都被分配一个唯一的二进制序列,序列的长度由类别数量决定(如使用log2(n)+1位二进制数来表示n个类别)。二进制编码在保持类别唯一性的同时,也减少了数据维度,但牺牲了类别的直观性和解释性。 #### 4.1.2.3 编码方法的选择 在选择编码方法时,应考虑以下几个因素: - **类别数量**:当类别数量较少时,独热编码或虚拟编码通常是较好的选择;类别数量较多时,应考虑二进制编码或目标编码以减少数据维度。 - **类别顺序**:如果类别之间存在自然顺序,应避免使用标签编码;否则,独热编码、虚拟编码或二进制编码更为合适。 - **数据维度**:独热编码可能导致维度灾难,特别是在类别数量较多的情况下;而二进制编码和目标编码有助于减少维度。 - **模型类型**:不同的模型对输入数据的敏感性不同,需要根据模型的特点选择合适的编码方式。 - **过拟合风险**:目标编码等复杂编码方式可能增加过拟合的风险,需要通过交叉验证等方法进行评估和调整。 #### 4.1.2.4 实战应用 假设我们正在处理一个关于银行贷款审批的数据集,其中包含一个名为“婚姻状况”的分类变量,包含“未婚”、“已婚”、“离异”、“丧偶”四个类别。为了将这个变量用于后续的机器学习模型中,我们可以选择以下编码方式之一: - **独热编码**:将“婚姻状况”转换为四个维度的二进制向量,每个维度对应一个类别。 - **虚拟编码**:与独热编码类似,但去掉一个类别的编码以减少一个维度。 - **标签编码**(慎用):如果确信“婚姻状况”的类别之间不存在隐含的顺序关系,且数据集较小,可以尝试使用标签编码,但需注意其潜在的风险。 最终的选择应基于数据的具体特点、模型的需求以及实验的结果来确定。 ### 结论 数字编码分类变量是机器学习数据预处理中的重要步骤,它关系到模型能否正确理解和处理分类数据。通过了解不同编码方法的原理、优缺点及适用场景,我们可以根据具体需求选择最合适的编码方式,从而提高模型的性能和准确性。在实际应用中,还需要注意编码后数据的维度问题、过拟合风险以及模型对编码方式的敏感性等因素。
上一篇:
4.1.1 One-Hot 编码(虚拟变量)
下一篇:
4.2 分箱、离散化、线性模型与树
该分类下的相关小册推荐:
剑指Python(万变不离其宗)
Python与办公-玩转PDF
Python高性能编程与实战
Python合辑5-格式化字符串
Python数据分析与挖掘实战(上)
Python合辑3-字符串用法深度总结
Python机器学习基础教程(上)
Python合辑1-Python语言基础
Python与办公-玩转Word
Python甚础Django与爬虫
Python编程轻松进阶(五)
Python编程轻松进阶(一)