通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

用python如何做逐步回归

用python如何做逐步回归

逐步回归是一种统计方法,用于选择最有意义的变量进行回归模型的构建。其主要目的是通过逐步增加或减少变量,找到最优的模型。在Python中,我们可以使用statsmodels库来实现逐步回归。以下是如何用Python进行逐步回归的步骤和详细解释。

逐步回归实现的核心步骤包括:选择初始模型、向前选择变量、向后消除变量、最终模型选择

一、选择初始模型

在逐步回归中,首先需要选择一个初始模型。初始模型可以是一个空模型(没有独立变量),也可以是包含所有独立变量的模型。一般来说,逐步回归有三种策略:向前选择(Forward Selection)、向后消除(Backward Elimination)和逐步回归(Stepwise Regression)。

向前选择

向前选择从一个空模型开始,逐步添加变量,每次添加一个变量,使模型的解释能力最强。添加变量的标准通常是基于AIC(Akaike信息准则)或BIC(贝叶斯信息准则)。

向后消除

向后消除从包含所有变量的模型开始,逐步删除变量,每次删除一个变量,使模型的解释能力最强。删除变量的标准同样是基于AIC或BIC。

逐步回归

逐步回归结合了向前选择和向后消除的方法。在每一步中,先尝试向模型中添加一个变量,然后尝试从模型中删除一个变量,直到模型达到最优。

二、向前选择变量

在向前选择中,我们从一个空模型开始,逐步添加变量。每次添加一个变量,使得模型的AIC或BIC值最小。

import statsmodels.api as sm

import pandas as pd

import numpy as np

from sklearn.datasets import load_boston

加载数据

boston = load_boston()

X = pd.DataFrame(boston.data, columns=boston.feature_names)

y = boston.target

向前选择

def forward_selection(X, y, significance_level=0.05):

initial_features = X.columns.tolist()

best_features = []

while len(initial_features) > 0:

remaining_features = list(set(initial_features) - set(best_features))

new_pval = pd.Series(index=remaining_features)

for new_column in remaining_features:

model = sm.OLS(y, sm.add_constant(X[best_features + [new_column]])).fit()

new_pval[new_column] = model.pvalues[new_column]

min_p_value = new_pval.min()

if min_p_value < significance_level:

best_features.append(new_pval.idxmin())

else:

break

return best_features

selected_features = forward_selection(X, y)

print(selected_features)

三、向后消除变量

在向后消除中,我们从包含所有变量的模型开始,逐步删除变量。每次删除一个变量,使得模型的AIC或BIC值最小。

# 向后消除

def backward_elimination(X, y, significance_level=0.05):

features = X.columns.tolist()

while len(features) > 0:

model = sm.OLS(y, sm.add_constant(X[features])).fit()

max_p_value = model.pvalues.max()

if max_p_value >= significance_level:

excluded_feature = model.pvalues.idxmax()

features.remove(excluded_feature)

else:

break

return features

selected_features = backward_elimination(X, y)

print(selected_features)

四、逐步回归

逐步回归结合了向前选择和向后消除的方法。在每一步中,先尝试向模型中添加一个变量,然后尝试从模型中删除一个变量,直到模型达到最优。

# 逐步回归

def stepwise_selection(X, y, initial_list=[], threshold_in=0.01, threshold_out=0.05):

included = list(initial_list)

while True:

changed=False

# forward step

excluded = list(set(X.columns) - set(included))

new_pval = pd.Series(index=excluded)

for new_column in excluded:

model = sm.OLS(y, sm.add_constant(X[included + [new_column]])).fit()

new_pval[new_column] = model.pvalues[new_column]

best_pval = new_pval.min()

if best_pval < threshold_in:

best_feature = new_pval.idxmin()

included.append(best_feature)

changed=True

# backward step

model = sm.OLS(y, sm.add_constant(X[included])).fit()

pvalues = model.pvalues.iloc[1:]

worst_pval = pvalues.max()

if worst_pval > threshold_out:

changed=True

worst_feature = pvalues.idxmax()

included.remove(worst_feature)

if not changed:

break

return included

selected_features = stepwise_selection(X, y)

print(selected_features)

详细解释

1. 数据加载和预处理

首先,我们需要加载数据并进行预处理。在这里,我们使用sklearn库中的波士顿房价数据集作为示例。数据集加载后,独立变量(特征)存储在X中,目标变量(房价)存储在y中。

2. 向前选择

向前选择从一个空模型开始,逐步添加变量。每次添加一个变量,使得模型的AIC或BIC值最小。在每一步中,我们计算每个剩余变量的p值,并选择p值最小的变量添加到模型中。如果该变量的p值小于给定的显著性水平(significance_level),则将其添加到模型中;否则,停止添加变量。

3. 向后消除

向后消除从包含所有变量的模型开始,逐步删除变量。每次删除一个变量,使得模型的AIC或BIC值最小。在每一步中,我们计算每个变量的p值,并选择p值最大的变量从模型中删除。如果该变量的p值大于给定的显著性水平(significance_level),则将其从模型中删除;否则,停止删除变量。

4. 逐步回归

逐步回归结合了向前选择和向后消除的方法。在每一步中,先尝试向模型中添加一个变量,然后尝试从模型中删除一个变量,直到模型达到最优。在向前选择中,我们计算每个剩余变量的p值,并选择p值最小的变量添加到模型中。如果该变量的p值小于给定的阈值(threshold_in),则将其添加到模型中。在向后消除中,我们计算每个变量的p值,并选择p值最大的变量从模型中删除。如果该变量的p值大于给定的阈值(threshold_out),则将其从模型中删除。这个过程不断重复,直到没有变量可以添加或删除为止。

总结

通过以上步骤,我们可以使用Python实现逐步回归,并选择最优的变量构建回归模型。逐步回归是一种有效的特征选择方法,可以帮助我们从大量变量中选择最有意义的变量,从而构建更好的回归模型。在实际应用中,我们可以根据具体问题选择合适的显著性水平和阈值,以获得最优的模型。

相关问答FAQs:

逐步回归的定义是什么?
逐步回归是一种统计分析方法,用于选择对模型有显著影响的自变量。它通过逐步添加或删除变量来优化回归模型,常用于处理多重共线性问题或在高维数据中筛选特征。此方法可以通过Python中的统计包实现,以便提高模型的预测能力和解释性。

在Python中执行逐步回归需要哪些库?
要在Python中进行逐步回归,通常需要使用以下库:pandas用于数据处理,statsmodels用于统计建模,numpy用于数值计算。你还可以使用scikit-learn来处理数据集和评估模型的性能。确保在开始之前安装这些库,可以通过pip install pandas statsmodels numpy scikit-learn命令来完成。

如何选择逐步回归的标准?
在逐步回归中,选择合适的标准是非常重要的。常用的标准包括AIC(赤池信息量准则)、BIC(贝叶斯信息量准则)以及p值等。AIC和BIC均衡了模型的复杂性和拟合优度,而p值则可以帮助判断某个变量是否显著。根据具体情况选择合适的标准,有助于构建更具解释性的回归模型。

相关文章