逐步回归 Python 代码实现指南
逐步回归是一种用于选择统计模型中重要变量的技术。本文将通过具体的步骤和代码示例,教会你如何在 Python 中实现逐步回归。下面,我们首先了解一下逐步回归的流程。
流程步骤
步骤 | 内容 |
---|---|
1 | 收集并准备数据 |
2 | 导入必要的库 |
3 | 进行初始的线性回归模型 |
4 | 逐步选择自变量 |
5 | 创建最终模型并评估其性能 |
逐步回归的实现
下面,我们将逐步详细介绍每一步所需的代码和操作。
1. 收集并准备数据
首先,你需要一个数据集。这里我们假设你已经有一个 data.csv
文件了。我们将使用 pandas 来读取数据。
import pandas as pd
# 读取数据集
data = pd.read_csv('data.csv')
# 显示数据集的前五行
print(data.head()) # 了解数据集的结构和内容
2. 导入必要的库
为了实现逐步回归,我们需要导入一些库,包括 statsmodels 和 sklearn。
import statsmodels.api as sm
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
3. 进行初始的线性回归模型
接下来,我们将数据集分为训练集和测试集,并建立初始线性回归模型。
# 划分数据集
X = data.drop('目标变量', axis=1) # 自变量
y = data['目标变量'] # 因变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 增加常数项以适应 statsmodels
X_train_sm = sm.add_constant(X_train)
# 构建初始线性回归模型
model = sm.OLS(y_train, X_train_sm).fit()
# 输出模型总结
print(model.summary())
4. 逐步选择自变量
这一步将通过以下方式实现逐步回归:使用 AIC(赤池信息量准则)来评估模型的优劣,逐步删除 / 添加变量。
def stepwise_selection(X, y):
initial_features = X.columns.tolist()
selected_features = []
while initial_features:
changed=False
# 检查逐步添加的情况
excluded = list(set(initial_features) - set(selected_features))
new_pvals = pd.Series(index=excluded)
for new_col in excluded:
model = sm.OLS(y, sm.add_constant(X[selected_features + [new_col]])).fit()
new_pvals[new_col] = model.pvalues[new_col]
min_pval = new_pvals.min()
if min_pval < 0.05: # 选择显著性水平
selected_features.append(new_pvals.idxmin())
changed=True
print('Add feature: {}'.format(new_pvals.idxmin()))
# 检查逐步删除的情况
model = sm.OLS(y, sm.add_constant(X[selected_features])).fit()
pvals = model.pvalues.iloc[1:] # 不需要常数项的p值
max_pval = pvals.max()
if max_pval > 0.05: # 选择显著性水平
changed=True
print('Drop feature: {}'.format(pvals.idxmax()))
selected_features.remove(pvals.idxmax())
if not changed:
break
return selected_features
selected_features = stepwise_selection(X_train, y_train)
print('Selected features: {}'.format(selected_features))
5. 创建最终模型并评估其性能
使用选定的特征建立最终模型,并在测试集上进行评估。
# 基于选择的特征构建最终模型
X_train_final = sm.add_constant(X_train[selected_features])
final_model = sm.OLS(y_train, X_train_final).fit()
# 在测试集上预测
X_test_final = sm.add_constant(X_test[selected_features])
y_pred = final_model.predict(X_test_final)
# 评估模型性能
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error: ", mse)
结尾
逐步回归是一种强大的工具,可以帮助你识别在模型中最重要的变量。通过上述步骤,你已经掌握了如何用 Python 实现逐步回归的基本框架。不断实践,并与不同数据集进而实践这一方法,将为你的数据分析技能打下一个良好的基础。若有疑问或需要深入探讨的地方,欢迎随时交流!