当我尝试使用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)
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的截距
答案 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之所以有效,是因为您正在使用整个数据集。