您应该为线性回归拟合序列、测试或所有x和y值吗?

2024-05-19 12:35:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经看到了很多线性回归的例子,所有的例子都非常不同。问题是我应该将训练、测试或所有数据拟合到模型中吗?任何例子都有不同的处理回归的方法

这是数据拆分,这里没有问题:

X = data[['day']].values
y = data[['ozone']].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, shuffle=False)

但是当我适合这个模型时,我应该选择什么选项呢

model = LinearRegression()
1. model.fit(X_train,y_train)
2. model.fit(X_test,y_test)
3. model.fit(data[['day']].values, data[['ozone']].values) #X and y

此外,我必须说,提供的图显示了使用第三种方法的最佳结果。这是正确的方法吗


Tags: 数据方法模型testdatasizemodeltrain
3条回答

您可以在train集合上拟合模型,因此特性X_train和目标y_train。因此,在您的情况下,它是选项1:

model.fit(X_train,y_train)

一旦您的模型经过训练,您就可以在X_test上测试您的模型,并将在测试集上运行模型得到的y_predy_test进行比较

在使用选项3时,您获得指标的“最佳图”的原因是您基本上是在整个数据集上进行训练。如果你在其中的一个子集上进行测试,那么你自然会得到更好的分数,因为你会在训练期间看到的数据上测试你的模型。你不应该那样做

快速的答案是:在火车样本上训练你的模型

无论您的模型是什么(线性回归或任何其他),您总是希望确保您的模型不是过度拟合的,这意味着对于看不见的数据,它仍然会表现良好。这就是为什么您应该始终在完整数据集(训练数据集)的子集上训练您的模型,并使用测试集评估模型性能(R2或最适合您的应用程序的度量)

所以你应该:

X = data[['day']].values
y = data[['ozone']].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, shuffle=False)
model = LinearRegression()
model.fit(X_train,y_train)

然后:

y_pred = model.predict(X_test)

从那里你可以比较y_predy_test

如此多的例子之所以如此不同,是因为上下文胜过方法。例如,如果我正在运行一个物理实验来验证一个理论方程,那么理论方程本身本质上就是“测试集”,我希望使用尽可能多的数据(即使用所有数据)来减少估计中的偏差和方差。因此,如果你的臭氧问题得到了理论物理推理的很好支持,并且你只想解决一些系数(即物理常数),那么你需要使用整个数据集尽可能地确定这些系数。在统计学意义上,物理动机作为一种“先验”,可以是众所周知的(关于这一观点的更多信息,我推荐Kruschke的贝叶斯分析书)

另一方面,如果你不知道什么样的影响可能会驱动你得到的臭氧测量,你想解决一个未知的映射(使用一个你认为可以用来描述映射的线性基集)然后,您应该拿出实际测量值的某个级别,以查看映射的泛化程度

如今,很多“机器学习”主要是数据驱动的,因为我们已经到了一个拥有大量可访问数据的阶段,因此,当你学习描述数据拟合方法和描述符(例如线性回归)的课程时,它们通常来自完全数据驱动的环境。无论是物理驱动还是数据驱动,方法都非常相似,并且使用方法的方式甚至可以在任一极端的中间混合在一起。p>

关于你的问题以及如何编码,如果你采用数据驱动的方法来划分训练集和测试集,那么你真正要做的是说你想让你的模型适合一些随机的“训练数据”样本,但是由于你以后没有什么可比性,你需要看看这种适合性如何推广到更多的数据,这个“测试数据”。因此,拟合“训练数据”,然后对“测试数据”进行预测或评估,以查看您的模型或映射在“看不见的”数据上的工作情况。 例如(扩展您的代码)

X = data[['day']].values
y = data[['ozone']].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, shuffle=False)
model = make_pipeline(PolynomialFeatures(3), LinearRegression())  # If you think 3rd order poly basis ought to work
model.fit(X_train,y_train)

相关问题 更多 >