逐步回归怎么保证不会漏掉重要特征,代码实现一下
时间: 2023-06-01 10:04:39 浏览: 62
逐步回归(Stepwise Regression)是一种变量选择方法,它通过逐步添加或删除自变量的方式来构建最佳的线性回归模型。其主要流程如下:
1. 初始化:将所有自变量加入模型,即全模型。
2. 逐步添加:从全模型中选择一个自变量加入模型,选择的方法可以是前向选择(Forward Selection)或后向删除(Backward Elimination),具体方法可以根据实际情况选择。
3. 逐步删除:对于已经加入模型的自变量,逐步删除其中对模型拟合贡献较小的自变量,直到最终只剩下对模型有显著影响的自变量。
4. 模型评估:通过多种指标(如AIC、BIC、F值等)来评估模型的拟合效果,选择最优的模型。
为了保证不漏掉重要特征,可以在逐步添加和逐步删除的过程中,不仅考虑每个变量的拟合效果,还要考虑其在实际应用中的重要性。一般来说,具有较高重要性的变量应该优先加入模型,而对于已经加入模型的变量,如果其重要性不高,可以考虑删除。
以下是Python代码实现逐步回归的例子:
```python
import pandas as pd
import numpy as np
import statsmodels.api as sm
from sklearn.datasets import load_boston
# 加载数据集
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['MEDV'] = boston.target
# 构建全模型
X = df.drop('MEDV', axis=1)
y = df['MEDV']
X = sm.add_constant(X) # 添加常数项
model = sm.OLS(y, X).fit()
# 逐步回归
selected_features = []
p_values = model.pvalues.drop('const')
while p_values.min() < 0.05 and len(selected_features) < len(p_values):
candidate_features = p_values.index.tolist()
candidate_features.remove(selected_features)
candidate_models = []
for feature in candidate_features:
X_temp = X[selected_features+[feature]]
model_temp = sm.OLS(y, X_temp).fit()
candidate_models.append((model_temp, feature))
best_model, best_feature = min(candidate_models, key=lambda x: x[0].aic) # 使用AIC选择最优模型
if best_model.pvalues[best_feature] < 0.05:
selected_features.append(best_feature)
p_values = best_model.pvalues.drop('const')
else:
break
# 输出结果
print('Selected features:', selected_features)
```
上述代码中,我们首先构建了全模型,然后在每一轮循环中,将未选择的变量分别加入模型,得到多个候选模型,再根据AIC选择最优模型,并判断其是否满足显著性要求。最终选择出的变量即为重要特征。