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

Python实现50+列数据集的自动简单线性与多元回归分析

实现方案

1. 两两变量简单线性回归(输出所有组合R²)

直接用itertools.combinations生成不重复的变量对,搭配sklearn的线性回归模型计算R²即可,代码如下:

import numpy as np
from sklearn.linear_model import LinearRegression
from itertools import combinations
import pandas as pd

# 替换为你自己的数据集,要求是二维numpy数组,形状为(200, 变量总数)
# 如果你的数组列表是单个列的数组集合,用data = np.column_stack(你的数组列表)转换即可
data = np.column_stack(你的numpy数组列表)
var_count = data.shape[1]
slr_result = []

# 遍历所有两两不重复的变量组合
for (x_idx, y_idx) in combinations(range(var_count), 2):
    X = data[:, x_idx].reshape(-1, 1)
    y = data[:, y_idx]
    model = LinearRegression()
    model.fit(X, y)
    r2 = model.score(X, y)
    slr_result.append({
        "自变量索引": x_idx,
        "因变量索引": y_idx,
        "R²": round(r2, 4)
    })

# 结果转DataFrame可直接按R²排序筛选
slr_df = pd.DataFrame(slr_result).sort_values(by="R²", ascending=False)
print(slr_df)

如果需要计算双向回归(即同一对变量互换自变量因变量各算一次),把combinations换成permutations即可。

2. 最多5-6个自变量的全组合多元线性回归

注意需要先指定固定的因变量列,再遍历1到最大自变量数的所有组合,代码如下:

# 替换为你的因变量所在列的索引
target_col = 0
y = data[:, target_col]
# 候选自变量排除因变量本身
x_candidates = [i for i in range(var_count) if i != target_col]
# 设置最多选多少个自变量
max_x_num = 5
mlr_result = []

for x_num in range(1, max_x_num + 1):
    # 遍历当前自变量数量下的所有不重复组合
    for x_comb in combinations(x_candidates, x_num):
        X = data[:, x_comb]
        model = LinearRegression()
        model.fit(X, y)
        r2 = model.score(X, y)
        # 如需计算调整R²,可按公式替换:调整R² = 1 - (1-r2)*(200-1)/(200 - x_num -1)
        mlr_result.append({
            "自变量组合索引": x_comb,
            "自变量个数": x_num,
            "R²": round(r2, 4)
        })

mlr_df = pd.DataFrame(mlr_result).sort_values(by="R²", ascending=False)
print(mlr_df)

如果要避免普通R²随自变量数量增多虚高的问题,建议改用调整R²做筛选,代码注释中已经给出计算公式,直接替换即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:05