python逐步回归筛选变量_特征选择与逐步回归分析

本文介绍了在特征工程和逐步回归分析中如何选择与预测目标相关的特征。通过逐步回归,可以从原始特征集中筛选出对论文被引次数预测有显著影响的特征,构建有效的预测模型。文章详细阐述了特征工程的必要性、降维与特征选择的方法,以及逐步回归分析的原理和Python实现。
摘要由CSDN通过智能技术生成

1引言

在学校的时候,我跟着师姐做了一个文献计量学方面的研究(Citation impact prediction for scientific papers using stepwise regression analysis),尝试预测一篇论文发表之后5年的被引次数。师姐在数据采集阶段,获取了非常多的字段,又在特征构造阶段充分发挥领域知识和想象力,最后构造了很多特征。我们不得不回答一个问题:这些特征里,是不是有一些和论文被引次数没啥关系的呢?

后来,我们使用逐步回归分析,从原始特征集中选出了一个最佳子集,过滤掉了与论文被引次数关系不大的特征,并在此基础上构建了一个预测模型。

为啥要用逐步回归分析呢?逐步回归分析的名字里虽然带了“回归”,但实际上是一个特征选择方法。如图1-1,是与逐步回归分析相关的一些概念及其关系。图1-1 逐步回归相关概念

2特征工程、降维与特征选择

2.1特征工程

2.1.1原始数据无法直接使用

学术期刊发行机构们非常有远见,很早就开始用成体系的方式来记录以论文为载体的科研活动。出版商们记录的,就是论文中除正文之外的所有信息,包括作者、作者所在机构、论文项目基金来源、发表年份、引用文献信息等等,如表1-1。

表2-1 一篇论文的原始数据

我们要回归分析啊,这些信息有啥用呢?它们或者是一堆字符串,或者是年份这样的顺序数据,不适合作为多元线性回归模型的输入。

我们需要做特征工程,让原始数据变成多元线性回归模型可以处理的形式。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的逐步回归筛选变量通常用于特征选择过程中,比如在机器学习模型建立之前,为了确定哪些输入特征对预测结果影响最大。这种方可以分为两种常见的策略: 1. **向前选择** (Forward Selection): 从无到有地添加变量,每次选择当前未加入的变量中与目标变量关联最紧密的一个,然后更新模型并计算新模型的性能指标。 ```python from sklearn.linear_model import LinearRegression from statsmodels.feature_selection import f_regression def forward_selection(X, y): best_score = None selected_features = [] for feature in X.columns: # 计算单个特征的F统计量 score, p_value = f_regression(X[[feature]], y) if p_value < alpha: # 设置显著性水平 # 添加特征并计算模型得分 X_temp = pd.concat([selected_features, X[feature]], axis=1) model = LinearRegression() model.fit(X_temp, y) current_score = model.score(X_temp, y) if best_score is None or current_score > best_score: best_score = current_score selected_features.append(feature) return selected_features ``` 2. **向后剔除** (Backward Elimination): 从所有变量开始,逐次移除与目标变量关联度最弱的变量,直到达到预设的条件为止。 ```python def backward_elimination(X, y, threshold=0.05): num_features = X.shape remaining_features = list(range(num_features)) while len(remaining_features) > 1: max_score = -float('inf') best_feature_to_remove = None for feature in remaining_features: X_temp = np.delete(X, feature, axis=1) _, p_value = f_regression(X_temp, y) score = -np.log(p_value) # 反对称评估 if score > max_score and p_value > threshold: max_score = score best_feature_to_remove = feature remaining_features.remove(best_feature_to_remove) return remaining_features ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值