python 逐步回归代码
时间: 2024-09-20 14:10:10 浏览: 49
Python 中逐步回归(Stepwise Regression)通常是指一种用于选择模型特征的过程,通过逐次添加或删除变量来优化模型性能的一种方法。这里我们以线性回归为例,使用 statsmodels 库来演示逐步回归:
```python
# 导入所需的库
import pandas as pd
import statsmodels.api as sm
# 假设你有一个名为 df 的数据框,其中包含自变量 X 和因变量 Y
df = pd.read_csv('your_data.csv') # 替换为你的数据文件路径
# 加载数据并处理,例如去除缺失值和设定X作为哑变量
df['intercept'] = 1 # 添加截距列
X = df[['feature1', 'feature2', 'intercept']] # 更改 feature1 和 feature2 为你想要的特征
y = df['target']
# 步骤1:创建初始模型
initial_model = sm.OLS(y, X).fit()
# 步骤2:逐步向前选取(如果需要增加变量)
forward_step = []
while True:
step_results = sm.stats.anova_lm(initial_model, add_constant=False)
p_values = step_results['PR(>F)']
# 找到P值小于某个阈值(如0.05)的变量
best_feature = p_values.idxmin()
if best_feature not in forward_step and p_values[best_feature] < 0.05:
forward_step.append(best_feature)
X_new = sm.add_constant(X[forward_step])
new_model = sm.OLS(y, X_new).fit()
print(f"Added {best_feature}, adjusted R-squared: {new_model.rsquared_adj}")
initial_model = new_model
else:
break # 如果没有找到显著的变量,则停止
# 步骤3:逐步向后剔除(如果需要减少变量)
backward_step = list(forward_step)
while len(backward_step) > 1:
remove_variable = backward_step.pop()
X_remove = X.drop(remove_variable, axis=1)
new_model = sm.OLS(y, sm.add_constant(X_remove)).fit()
print(f"Removed {remove_variable}, adjusted R-squared: {new_model.rsquared_adj}")
阅读全文