首页
技术小册
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 分类变量 在机器学习的广阔领域中,分类问题是极为重要且常见的一类问题。分类任务的目标是将输入数据划分到预定义的类别中。这些类别,即我们所说的分类变量,是离散且有限的。理解并妥善处理分类变量对于构建高效、准确的分类模型至关重要。本章将深入探讨分类变量的基本概念、处理方法及其在Python机器学习实践中的应用。 #### 4.1.1 分类变量的定义与重要性 **定义**:分类变量,又称名义变量或类别变量,是那些只能取特定值(即类别)的变量。这些值之间没有自然的顺序或度量关系,仅仅是不同的类别标识。例如,在预测邮件是否为垃圾邮件的任务中,“是”与“否”就是两个分类变量;在疾病诊断中,患者的疾病类型(如“流感”、“肺炎”等)也是分类变量。 **重要性**:分类变量在机器学习中扮演着核心角色,因为它们直接关联到模型的预测目标。正确理解和处理分类变量,能够提高模型的泛化能力,减少过拟合风险,并最终提升模型的预测精度。此外,对于某些特定算法(如决策树、朴素贝叶斯等),分类变量的处理方式直接影响算法的性能。 #### 4.1.2 分类变量的编码 由于机器学习算法通常要求输入数据为数值型,因此,将分类变量转换为数值型是预处理步骤中不可或缺的一环。常见的编码方式包括: 1. **标签编码(Label Encoding)**:直接将每个类别映射到一个唯一的整数值。这种方法简单快捷,但不适用于存在自然顺序的类别(如“小”、“中”、“大”),因为标签编码会错误地引入这种顺序关系。 2. **独热编码(One-Hot Encoding)**:为每个类别创建一个二进制列,只有对应类别的列值为1,其余为0。独热编码能够完全避免类别之间的顺序问题,但会显著增加数据集的维度,可能导致计算成本上升。 3. **目标编码(Target Encoding)**:也称为均值编码或影响编码,通过计算每个类别对应的目标变量均值来替代原始的类别值。这种方法能够保留类别与目标变量之间的统计关系,但在处理未知类别或训练集与测试集分布差异大时可能引发过拟合。 4. **二进制编码(Binary Encoding)**:将类别转换为二进制字符串,然后将这些字符串拆分为多个二进制特征。这种方法在减少独热编码导致的维度增加的同时,也保留了一定的类别信息。 #### 4.1.3 处理不平衡的分类变量 在实际应用中,分类变量往往存在不平衡的问题,即某些类别的样本数量远多于其他类别。这种不平衡会严重影响分类模型的性能,导致模型偏向于多数类,从而忽略少数类的信息。处理不平衡数据的方法包括: 1. **重采样**:包括过采样(增加少数类样本)和欠采样(减少多数类样本)。过采样可能导致过拟合,而欠采样可能丢失重要信息。 2. **合成少数类过采样技术(SMOTE)**:通过合成少数类的新样本来增加其数量,而非简单地复制现有样本。 3. **调整类别权重**:在训练模型时,对少数类样本赋予更高的权重,使得模型在优化过程中更加关注少数类的损失。 4. **阈值移动**:在分类模型的预测阶段,根据训练集的类别分布调整分类阈值,以平衡不同类别的预测概率。 #### 4.1.4 分类算法与分类变量的关系 不同的分类算法对分类变量的处理方式和敏感度各不相同。例如: - **决策树和随机森林**:能够直接处理分类变量,通过计算信息增益、基尼指数等指标来选择最优的分裂属性。 - **逻辑回归**:通常需要将分类变量转换为数值型,通过独热编码或目标编码等方式。 - **支持向量机(SVM)**:对输入数据的尺度和分布敏感,因此需要对分类变量进行适当的编码和标准化处理。 - **K-近邻(KNN)**:依赖于距离度量,因此分类变量的编码方式会直接影响模型的表现。 - **朴素贝叶斯**:基于贝叶斯定理和特征条件独立假设的分类方法,对分类变量的处理方式较为灵活,但也需要考虑类别不平衡问题。 #### 4.1.5 Python实践:处理分类变量 在Python中,我们可以利用scikit-learn、pandas等库来方便地处理分类变量。以下是一个简单的示例,展示了如何对分类变量进行独热编码,并使用逻辑回归模型进行分类: ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.linear_model import LogisticRegression from sklearn.pipeline import Pipeline # 假设df是一个包含分类变量和目标变量的DataFrame # 假设'feature_1'是分类变量,'target'是目标变量 # 定义特征列和目标列 X = df[['feature_1']] y = df['target'] # 创建列转换器,对'feature_1'进行独热编码 column_trans = ColumnTransformer( [('one_hot', OneHotEncoder(), ['feature_1'])], remainder='passthrough' ) # 创建模型管道,包含数据预处理和逻辑回归模型 model = Pipeline(steps=[('preprocessor', column_trans), ('classifier', LogisticRegression())]) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练模型 model.fit(X_train, y_train) # 预测测试集 predictions = model.predict(X_test) # ...(后续可添加评估模型性能的代码) ``` #### 4.1.6 总结 分类变量是机器学习中的基本概念之一,其正确处理和编码对于构建有效的分类模型至关重要。本章从分类变量的定义、重要性、编码方法、处理不平衡数据的策略以及不同分类算法对分类变量的敏感度等方面进行了详细阐述,并通过Python实践展示了如何在实际项目中处理分类变量。掌握这些知识和技能,将有助于读者在机器学习项目中更加灵活地应对分类问题,提升模型的性能和准确性。
下一篇:
4.1.1 One-Hot 编码(虚拟变量)
该分类下的相关小册推荐:
Python编程轻松进阶(三)
Python合辑8-变量和运算符
剑指Python(磨刀不误砍柴工)
Python合辑10-函数
Python机器学习实战
Python合辑4-130个字符串操作示例
Python3网络爬虫开发实战(上)
Python合辑13-面向对象编程案例(上)
Python合辑6-字典专题
Python与办公-玩转Excel
剑指Python(万变不离其宗)
Python合辑12-面向对象