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

Sklearn LinearRegression返回错误相关系数,求助排查问题

问题排查与修正

你的代码存在两个核心问题,导致得到的结果并非你需要的“相关系数”:

1. 混淆了回归系数与相关系数

LinearRegression.coef_返回的是线性回归的斜率(回归系数),不是你要的皮尔逊相关系数。这是概念误解:回归系数表示自变量每变化1单位时因变量的变化量,而相关系数衡量两个变量线性关联的强度和方向,取值范围在[-1,1]之间。

2. X与y的赋值逻辑颠倒

你当前代码用quality作为自变量(X)去预测前10列的变量(y),这和常规分析逻辑(用理化指标预测quality)相反,也会导致结果不符合预期。


修正方案1:计算皮尔逊相关系数(你要的correlation coef)

如果目标是得到每个变量与quality的相关系数,用pandas的corr()方法更简单准确:

import pandas as pd

df = pd.read_csv("Wine_RegionColor.csv")

def get_correlations():
    variables = df.columns[:10]
    correlations = {}
    for var in variables:
        # 计算皮尔逊相关系数
        corr = df[var].corr(df['quality'])
        correlations[var] = round(corr, 6)  # 保留6位小数方便查看
    return correlations

print(get_correlations())

更简洁的写法:

corr_series = df[df.columns[:10]].corrwith(df['quality'])
print(corr_series)

修正方案2:正确计算线性回归系数(如果确实需要回归系数)

如果你要得到以各变量为自变量、quality为因变量的回归系数,需要交换X和y的赋值:

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

df = pd.read_csv("Wine_RegionColor.csv")

def linear_regression_calc(): 
    variables = df.columns[:10]
    regression_coefs = {}

    for var in variables:
        # 纠正X和y:用当前变量作为自变量,quality作为因变量
        X = df[var].values.reshape(-1, 1)
        y = df['quality'].values.reshape(-1, 1)
        
        model = LinearRegression()
        model.fit(X, y)
        
        # 绘图优化
        plt.scatter(X, y)
        plt.plot(X, model.predict(X), color='red')
        plt.xlabel(var)
        plt.ylabel("Quality")
        plt.legend([f"Coefficient: {model.coef_[0][0]:.6f}"])
        plt.show()
        
        regression_coefs[var] = model.coef_[0][0]
    
    return regression_coefs

print(linear_regression_calc())

补充说明

  • 相关系数是无量纲的,侧重线性关联程度;回归系数有单位,反映自变量对因变量的影响幅度。
  • 若仅需查看变量与quality的线性关联强度,用相关系数更直观;若要构建预测模型,才需要关注回归系数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:25:27