当我尝试使用 scikit-learn LinearRegression
时,模型表现不佳,但是,当我尝试 scipy 线性回归时,它运行良好,
数据集很简单,逻辑或者代码有缺陷吗?
我尝试了多个 self 生成的线性数据,所有这些数据都包含 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)
reshape 测试和训练,因为它是单列功能
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
最佳答案
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 可以工作,因为您使用了整个数据集。
关于python - Scikit-Learn LinearRegression 在非常简单的数据集上表现不佳,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57779749/