首页
技术小册
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.3 迭代特征选择 在机器学习项目中,特征选择是一个至关重要的步骤,它旨在从原始数据集中挑选出对模型预测性能最有贡献的特征子集。这不仅有助于减少计算成本,提高模型训练效率,还能改善模型的泛化能力,避免过拟合。迭代特征选择(Iterative Feature Selection, IFS)是一种动态且高效的特征选择方法,通过反复地添加或移除特征来优化特征集,直至达到某个停止准则。本节将深入探讨迭代特征选择的原理、常见算法、实现步骤以及在实际Python项目中的应用。 #### 4.5.3.1 迭代特征选择原理 迭代特征选择的核心思想是在特征空间中逐步搜索最优的特征组合。这一过程可以是前向的(Forward Selection),即初始时没有特征,逐步添加最有用的特征;也可以是后向的(Backward Elimination),即开始包含所有特征,然后逐步移除最无用的特征;或者更复杂的组合方式,如双向搜索(Bidirectional Selection),同时考虑添加和移除操作。迭代过程中,通常使用交叉验证来评估不同特征组合下模型的性能,以确保所选特征集在未知数据上的泛化能力。 #### 4.5.3.2 常见迭代特征选择算法 1. **前向选择(Forward Selection)**: - 初始化:空特征集。 - 迭代过程:在每次迭代中,计算剩余每个特征加入当前特征集后模型性能的提升(如准确率、F1分数等)。 - 选择:选择使模型性能提升最大的特征加入特征集。 - 停止条件:达到预设的特征数量上限、模型性能提升不再显著或所有特征均被考虑过。 2. **后向消除(Backward Elimination)**: - 初始化:包含所有特征的特征集。 - 迭代过程:在每次迭代中,评估移除当前特征集中每一个特征后模型性能的变化。 - 选择:移除导致模型性能下降最小的特征(或性能保持稳定的特征,以避免过拟合)。 - 停止条件:特征集为空、达到预设的最小特征数量、模型性能下降显著。 3. **双向搜索(Bidirectional Selection)**: - 结合了前向选择和后向消除的优点,同时考虑添加和移除特征。 - 在每次迭代中,既尝试添加最佳特征,也尝试移除最不影响模型性能的特征。 - 停止条件同前两者,但通常能更快地收敛到较优的特征集。 #### 4.5.3.3 Python实现迭代特征选择 在Python中,虽然没有直接内置的迭代特征选择函数,但我们可以使用`scikit-learn`库中的工具和方法来手动实现。以下是一个基于前向选择的简单示例: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split, cross_val_score from sklearn.ensemble import RandomForestClassifier from sklearn.feature_selection import SelectFromModel # 加载数据 data = load_iris() 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) # 初始化空特征集 selected_features = [] # 初始化模型 model = RandomForestClassifier(n_estimators=100, random_state=42) # 前向选择过程 while len(selected_features) < X.shape[1]: # 假设我们想要选择所有可能的特征,实际中应设置停止条件 scores = [] for i in range(X.shape[1]): if i not in selected_features: # 确保不重复添加特征 temp_features = selected_features + [i] selector = SelectFromModel(model, prefit=False) selector.fit(X_train[:, temp_features], y_train) mask = selector.get_support() # 注意:这里简化为直接使用整个候选特征集评估,实际应仅使用新选特征 temp_X_train = X_train[:, mask] scores.append(cross_val_score(model, temp_X_train, y_train, cv=5).mean()) # 选择使模型性能提升最大的特征 best_feature = np.argmax(scores) best_feature_index = list(set(range(X.shape[1])) - set(selected_features))[best_feature] selected_features.append(best_feature_index) print(f"Selected Feature {best_feature_index}: Score {scores[best_feature]:.4f}") # 输出最终选择的特征 print("Selected Features:", selected_features) ``` **注意**:上述代码仅为示例,实际应用中需要考虑多个因素,如特征间的相互作用、计算成本、模型过拟合风险等。此外,由于`SelectFromModel`通常用于基于模型重要性的特征选择,而不是直接用于迭代搜索,这里仅用它来演示如何在迭代过程中评估模型性能。在实际应用中,可能需要根据具体算法实现特征的选择和评估逻辑。 #### 4.5.3.4 迭代特征选择的挑战与解决方案 1. **计算成本**:随着特征数量的增加,迭代过程中的计算量会急剧上升。解决方法包括使用更快的模型评估方法(如近似交叉验证)、并行计算或限制迭代次数和特征数量。 2. **过拟合风险**:过多的特征选择可能导致模型在训练集上表现优异,但在测试集上泛化能力差。通过交叉验证、正则化等技术可以有效缓解这一问题。 3. **特征间相关性**:迭代特征选择可能忽视特征间的相关性,导致选择的特征集不是最优的。可以考虑使用基于相关性或条件重要性的特征选择方法作为补充。 4. **停止准则的确定**:如何确定何时停止迭代是一个关键问题。除了预设的迭代次数或特征数量外,还可以根据模型性能的变化趋势(如性能提升不再显著)来动态调整停止条件。 通过合理运用迭代特征选择技术,并结合其他特征选择和模型优化方法,可以显著提升机器学习项目的效率和效果,为数据驱动的决策提供有力支持。
上一篇:
4.5.2 基于模型的特征选择
下一篇:
4.6 利用专家知识
该分类下的相关小册推荐:
Python编程轻松进阶(一)
Python高并发编程与实战
Python合辑5-格式化字符串
Python机器学习实战
Python自动化办公实战
Python合辑9-判断和循环
Python与办公-玩转Word
实战Python网络爬虫
Python合辑8-变量和运算符
Python合辑14-面向对象编程案例(下)
Python合辑10-函数
Python合辑13-面向对象编程案例(上)