【问题标题】:Linear regression in python goes seriously wrong with completely wrong regression linepython中的线性回归严重错误,回归线完全错误
【发布时间】:2023-03-30 19:45:01
【问题描述】:

大家好,我在 kaggle(https://www.kaggle.com/sohier/calcofi,bottle.csv)的数据集上练习线性回归,我尝试通过以下方式实现它:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

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

df1 = df.loc[:,"T_degC":"Salnty"]
df1 = df1.dropna()

from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LinearRegression
X = df1["T_degC"]
y = df1["Salnty"]
X = X.values
type(X)
y = y.values
type(y)


X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = 0.4)
lm = LinearRegression()

X_train = X_train.reshape(-1,1)
X_test = X_test.reshape(-1,1)
y_train = y_train.reshape(-1,1)

lm.fit(X_train, y_train)

当我查看截距和系数时出现问题,它们是:

lm.intercept_
lm.coef_

结果分别为 34.4 和 -0.05。但是再考虑 X 和 y 变量的散点图:

plt.scatter(X_train, y_train)

看起来负斜率的线绝对不是这个分布的回归线。因此,我想知道我可能做错了什么导致了这个结果。

【问题讨论】:

    标签: python scikit-learn linear-regression


    【解决方案1】:

    这是一个非常有趣的案例研究!

    它看起来回归线实际上是正确的和你的眼睛(和你的情节)欺骗你。

    您生成的散点图如下所示:

    当然看起来像一个正坡,对吧?对吗?
    嗯,不。这里有很多点,所以这是不可能看到最多点 em>的位置。可能是大多数点显示向下斜率的情况,但它们都彼此顶部,并且“几个”其他不在彼此顶部的其他点显示向上倾斜。

    更好的图:降低视觉重叠 h3> 为了测试,我绘制了不透明度和更小的标记尺寸(因此重叠的量减少:
    plt.scatter(X_train, y_train, alpha=0.002, s=1)
    plt.show()
    


    在这里,您可以看到,实际上大多数点显示了向下倾斜(尽管人们也可能争论线性相关不是建模相关性的最佳方式)。请记住,线性回归试图适合最佳的直接 em>线,这意味着它遵循大多数点,但如果只有几个异常值,那么在那里只有几个异常值,就无法捕获更困难的模式。

    事实上,线性相关系数也为负:
    df1[["T_degC", "Salnty"]].corr()
    #          T_degC    Salnty
    #T_degC  1.000000 -0.505266
    #Salnty -0.505266  1.000000
    

    结论

    简而言之:
    1.您的回归线似乎是正确的 2.确保您正在查看正确的绘图 - 如果所有点彼此顶部,则散点图可能不是最佳的。

    编辑:视觉确认 h3>

    一个剧情:散点图与您的回归放在它的顶部:

    似乎合理(直线),不是吗?

    也许另一个情节会更容易看这么多点:

    import seaborn as sns
    sns.jointplot(x='T_degC', y='Salnty', data=df1, kind='hex')
    

    通过着色图表的部分,曲线图明确可视化重叠,其中有很多点的斑点。这再次确认有一个下降趋势,但有一个(相对较小的)其他目的往往的趋势。 希望对您有所帮助!

    【讨论】:

    • 我对您回答的全面性感到惊讶。我现在完全了解它。非常感谢。
    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2019-12-29
    • 1970-01-01
    • 2016-08-31
    • 2016-11-27
    • 1970-01-01
    相关资源
    最近更新 更多