You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在for循环中为stats.linregress设置r值阈值过滤无效变量组合

代码优化方案

原有代码核心问题

  • 自行维护的变量去重逻辑存在缺陷,会重复添加相同变量、漏掉有效组合,且双重循环会重复计算(a,b)和(b,a)两组完全等价的组合,额外浪费算力
  • 先绘图再计算回归统计量,即使组合不符合阈值要求也已经生成了绘图对象,容易出现空白图、报错问题

修改后代码

import itertools
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats

# 可自定义阈值:r绝对值最小值、p值最大值
R_ABS_MIN = 0.3
P_MAX = 0.05

# 直接生成所有不重复的两两变量组合,自动避免重复计算和自身对自身的组合
for column_a, column_b in itertools.combinations(numeric_variable_list, 2):
    # 先计算回归统计量,不符合条件直接跳过,不执行绘图逻辑
    m, b, r, p, err = stats.linregress(df[column_a], df[column_b])
    if abs(r) < R_ABS_MIN or p > P_MAX:
        continue
    
    # 只有符合阈值的组合才执行绘图逻辑
    correlation_plot = sns.regplot(x=df[column_a], y=df[column_b])
    sns.despine(top=True, right=True)
    # 拼接标注文本
    textstr= 'y  = ' + str(round(m, 2)) + 'x + ' + str(round(b, 2)) + '\n'
    textstr += 'r2 = ' + str(round(r**2, 4)) + '\n'
    textstr += 'p  = ' + str(round(p, 4))
    plt.text(0.15, 0.70, textstr, fontsize=12, transform=plt.gcf().transFigure)
    plt.show(correlation_plot)
    plt.close()

优化说明

  • 用itertools.combinations生成无重复的两两变量组合,100个变量的场景下循环次数直接从10000次降到4950次,算力消耗减半
  • 先计算回归统计量再做阈值判断,不符合要求的组合直接跳过绘图步骤,完全避免空白图和多余的资源消耗
  • 阈值可根据业务需求自行调整,比如只需要过滤p值就保留p值判断条件,只需要过滤r值就保留r值判断条件即可

内容的提问来源于stack exchange,提问作者dvwut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:15:00