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
相关产品推荐
相关产品推荐

