python中的线性回归出现了严重错误,回归线完全错误
大家好,我在kaggle(,瓶子.csv)的数据集上练习线性回归,我尝试用以下方式实现它:python中的线性回归出现了严重错误,回归线完全错误,python,scikit-learn,linear-regression,Python,Scikit Learn,Linear Regression,大家好,我在kaggle(,瓶子.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() fr
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)
它看起来绝对不像一条负斜率的线,可以是这个分布的回归线。因此,我想知道我做错了什么导致了这个结果 这是一个非常有趣的案例研究 看来回归线实际上是正确的,你的眼睛(和情节)在欺骗你 您正在生成的散点图如下所示:
看起来确实是正斜率,对吗?对吗?
不,这里有太多的点,不可能看到最多的点在哪里。很可能大多数点会显示一个向下的坡度,但它们都在彼此的顶部,而其他一些不在彼此顶部的点会显示一个向上的坡度 更好的绘图:降低视觉重叠 为了测试这一点,我以更低的不透明度和更小的标记大小绘制了点(因此重叠量将减少:
plt.scatter(X_train, y_train, alpha=0.002, s=1)
plt.show()
在这里,你可以看到,事实上,大多数点都显示出向下的斜率(尽管也有人可能认为线性相关性不是建模相关性的最佳方法)。请记住,线性回归试图拟合最佳直线,这意味着它遵循大多数点,但如果只有少数异常值,则无法捕获更困难的非直线模式 事实上,线性相关系数也是负的:
df1[["T_degC", "Salnty"]].corr()
# T_degC Salnty
#T_degC 1.000000 -0.505266
#Salnty -0.505266 1.000000
结论
简而言之:1.您的回归线似乎是正确的
2.确保您看到的是正确的图-如果所有点都在彼此的顶部,散点图可能不是最佳的 编辑:视觉确认 还有一个图:上面有回归的散点图: 这似乎是合理的(直线),不是吗 也许另一个情节更容易看,有这么多的点:
import seaborn as sns
sns.jointplot(x='T_degC', y='Salnty', data=df1, kind='hex')
jointplot通过对图中有许多点的部分着色来明确显示重叠。这再次证实了存在下降趋势,但有(相对较少)数量的其他点与该趋势相反。
希望这能有所帮助!我对你的答案的全面性感到惊讶。我现在完全理解了。非常感谢。