逐步回归 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 实现逐步回归的基本框架。不断实践,并与不同数据集进而实践这一方法,将为你的数据分析技能打下一个良好的基础。若有疑问或需要深入探讨的地方,欢迎随时交流!