首页
技术小册
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.5.2 基于模型的特征选择 在机器学习项目中,特征选择是一个至关重要的步骤,它旨在从原始数据集中识别并保留那些对模型预测性能贡献最大的特征,同时剔除不相关或冗余的特征。这样做不仅可以提高模型的准确性,还能减少计算复杂度和过拟合的风险。基于模型的特征选择方法,顾名思义,就是利用机器学习模型自身的特性或学习过程来评估特征的重要性,进而进行特征筛选。本章节将深入探讨几种基于模型的特征选择技术,包括过滤法、包裹法和嵌入法,并重点介绍嵌入法的实现原理与应用实例。 #### 4.5.2.1 引言 特征选择技术主要分为三大类:过滤法(Filter Methods)、包裹法(Wrapper Methods)和嵌入法(Embedded Methods)。过滤法独立于任何学习算法,通过统计测试评估特征与目标变量之间的相关性或互信息;包裹法则将特征选择视为搜索问题,通过反复训练模型来评估特征子集的好坏;而嵌入法则将特征选择嵌入到模型训练过程中,利用模型自身的特性来评估特征的重要性。基于模型的特征选择,特别是嵌入法,因其高效性和准确性,在实际应用中颇受欢迎。 #### 4.5.2.2 嵌入法概述 嵌入法结合了过滤法和包裹法的优点,它在模型训练过程中自动评估特征的重要性,并据此进行特征选择。这种方法不需要像包裹法那样显式地搜索特征子集,也不需要像过滤法那样完全独立于学习算法。常见的嵌入法包括基于树的模型(如决策树、随机森林、梯度提升树等)和正则化方法(如岭回归、Lasso回归)。 #### 4.5.2.3 基于树的模型进行特征选择 基于树的模型,如随机森林(Random Forest)和梯度提升决策树(Gradient Boosting Decision Tree, GBDT),天然具有评估特征重要性的能力。这些模型在构建树的过程中,会基于特征的分裂效果(如信息增益、基尼不纯度减少量等)来评估每个特征的重要性。 ##### 4.5.2.3.1 随机森林的特征重要性 随机森林通过集成多个决策树来增强模型的稳定性和泛化能力。在随机森林中,每个决策树都是基于不同的数据子集(通过bootstrap采样)和特征子集(通过随机选择特征)构建的。特征的重要性通常通过计算该特征在所有树中作为分裂节点的平均增益或平均基尼不纯度减少量来衡量。重要性得分越高的特征,对模型预测的贡献越大。 ##### 4.5.2.3.2 示例:使用随机森林进行特征选择 ```python from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split # 加载数据 data = load_breast_cancer() X, y = data.data, data.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 初始化随机森林模型 rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_train, y_train) # 获取特征重要性 importances = rf.feature_importances_ indices = np.argsort(importances)[::-1] # 打印特征重要性 for f in range(X_train.shape[1]): print(f"{indices[f]}: {importances[indices[f]]}") # 可选:根据特征重要性阈值进行特征选择 threshold = 0.015 selected_features = X_train[:, indices[importances > threshold]] ``` #### 4.5.2.4 正则化方法进行特征选择 正则化方法,特别是Lasso回归(Least Absolute Shrinkage and Selection Operator),通过引入惩罚项来限制模型复杂度,从而间接实现特征选择。Lasso回归的惩罚项是系数的绝对值之和,这使得在优化过程中,部分特征的系数会被压缩至0,从而实现特征的自然选择。 ##### 4.5.2.4.1 Lasso回归的特征选择机制 Lasso回归的目标函数可以表示为: $$ \text{minimize} \quad \frac{1}{2n} \|y - X\beta\|^2_2 + \alpha \|\beta\|_1 $$ 其中,$\beta$ 是系数向量,$\alpha$ 是正则化强度参数。随着$\alpha$的增加,越来越多的系数会被压缩到0,从而实现特征选择。 ##### 4.5.2.4.2 示例:使用Lasso回归进行特征选择 ```python from sklearn.linear_model import Lasso # 初始化Lasso回归模型 lasso = Lasso(alpha=0.1) lasso.fit(X_train, y_train) # 获取系数,非零系数对应的特征被选中 coef = lasso.coef_ selected_features = np.where(coef != 0)[0] # 打印被选中的特征索引 print("Selected features indices:", selected_features) ``` #### 4.5.2.5 讨论与总结 基于模型的特征选择方法,特别是嵌入法,因其高效性和准确性,在机器学习项目中得到了广泛应用。通过结合模型的训练过程来评估特征的重要性,嵌入法能够在不牺牲太多计算资源的情况下,有效地识别出对模型预测最有价值的特征。然而,值得注意的是,特征选择是一个迭代的过程,可能需要根据模型的表现和数据的特性进行多次尝试和调整。此外,不同的基于模型的特征选择方法各有优缺点,选择哪种方法取决于具体的应用场景和数据特性。 在实际应用中,还可以考虑将多种特征选择方法结合使用,以充分利用各自的优点。例如,可以先使用过滤法快速排除大量不相关或冗余的特征,然后再利用嵌入法或包裹法进一步精选特征。这种组合策略往往能够获得更好的特征选择效果,从而提升模型的预测性能。
上一篇:
4.5.1 单变量统计
下一篇:
4.5.3 迭代特征选择
该分类下的相关小册推荐:
Python合辑12-面向对象
Python编程轻松进阶(五)
Python编程轻松进阶(一)
Python高性能编程与实战
Python3网络爬虫开发实战(上)
Python高并发编程与实战
Python机器学习基础教程(上)
Python机器学习实战
Python合辑4-130个字符串操作示例
Python面试指南
Python爬虫入门与实战开发(下)
Python合辑5-格式化字符串