【发布时间】:2020-01-06 20:05:28
【问题描述】:
当我尝试使用 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
【问题讨论】:
-
当您使用
stats.linregress时,您将使用整个数据集。为什么不为您的 sklearn 模型使用相同的entire数据集? -
即使有 50% 的数据,我得到斜率=1.8 和截距=31.99
-
@Mr_U4913 我在发布带有多个数据集的问题或完全用于训练之前做了同样的事情,结果是一样的,
-
我的问题被 jjurado answer 解决了
标签: python machine-learning scikit-learn linear-regression