3(2).特征选择---包装法

1. 前向搜索

  每次增量地从剩余未选中的特征选出一个加入特征集中,待达到阈值或者 n时,从所有的 F 中选出错误率最小的。过程如下:

  • 初始化特征集 F 为空。
  • 扫描 i 从 1 到 n
  • 如果第 i 个特征不在 F 中,那么特征 i 和F 放在一起作为 F_i (即 F_i=F\cup\{i\} )。
  • 在只使用 F_i 中特征的情况下,利用交叉验证来得到 F_i 的错误率。
  • 从上步中得到的 n 个 F_i 中选出错误率最小的 F_i ,更新 F 为 F_i 。
  • 如果 F 中的特征数达到了 n 或者预定的阈值(如果有的话),
  • 那么输出整个搜索过程中最好的 ;若没达到,则转到 2,继续扫描。

2. 后向搜索

  既然有增量加,那么也会有增量减,后者称为后向搜索。先将 F 设置为 \{1,2,...,n\} ,然后每次删除一个特征,并评价,直到达到阈值或者为空,然后选择最佳的 F 。

  这两种算法都可以工作,但是计算复杂度比较大。时间复杂度为

3. 递归特征消除法

   递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。使用feature_selection库的RFE类来选择特征的代码如下:

1
2
3
4
5
6
7
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
 
#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_to_select为选择的特征个数
RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)

 

举例:使用一个基模型来进行多轮训练,经过多轮训练后,保留指定的特征数。

  

 

posted @   nxf_rabbit75  阅读(1642)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
1. 前向搜索2. 后向搜索3. 递归特征消除法
点击右上角即可分享
微信分享提示