Scikit-Learn LinearReression在非常简单的数据集上执行不佳,

时间:2019-09-03 23:25:51

标签: python machine-learning scikit-learn linear-regression

当我尝试使用scikit-learn LinearRegression时,该模型的执行效果不佳,但是,当我尝试scipy线性回归时,它可以完美地工作, 数据集非常简单,逻辑或代码是否存在缺陷?

我尝试了自我生成的多个线性数据,所有这些数据均由1列用于要素和1列用于标签。

导入库

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from scipy import stats

生成数据

X=[]
Y=[]
for i in range (100):
    X.append(2*i+3)
    Y.append(1.8*X[i]+32)
X=np.array(X,dtype=float)
Y=np.array(Y,dtype=float)

创建模型并分为测试和训练

reg = LinearRegression()
X_train, Y_train, X_test, Y_test = train_test_split(X, Y, test_size=0.5, random_state=0)

由于它是单列功能,因此重塑了Test and Train的形状

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

拟合训练数据并对其进行评分

reg.fit(X_train,Y_train)
reg.score(X_test,Y_test)

我得到的分数取决于数据集的大小,但是它从来都不是很好,主要是负数,

但是当我使用scipy模型

slope, intercept, r_value, p_value, std_err = stats.linregress(X, Y)

它工作得很好,并且总是找到斜率1.8和32的截距

1 个答案:

答案 0 :(得分:2)

train_test_split返回按分配参数的顺序拆分的数据,因此首先返回X,然后返回Y。但是您将X和Y混合在一起。

您可以通过以下方法解决您的问题:

  

X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.5,random_state = 0)

Scipy之所以有效,是因为您正在使用整个数据集。