您是否应该针对LinearRegression进行训练,测试或所有x和y值?

时间:2020-07-02 15:09:40

标签: python dataframe scikit-learn model regression

我已经看到了很多有关LinearRegression的示例,而它们却截然不同。问题是我应该将训练,测试或所有数据都适合模型吗?任何示例都有不同的回归处理方式...

这是数据分割,在这里没问题:

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

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

3 个答案:

答案 0 :(得分:2)

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

另一方面,如果您不知道哪种影响臭氧的测量结果,并且想求解未知的映射(使用线性基集,您认为该线性集可以描述该映射),那么您应该在实际测量中保持一定水平,以查看该映射可以概括的程度。

如今,很多“机器学习”主要是由数据驱动的,因为我们到了拥有大量可访问数据的地步,因此,当您学习描述数据拟合方法和描述符(例如线性回归)的课程时, ),它们通常来自完全由数据驱动的上下文。无论是物理驱动还是数据驱动,这些方法都非常相似,而且您使用这些方法的方式甚至可以在极端情况下融合在一起。

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

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)

答案 1 :(得分:1)

您将模型拟合到index.php?lang=&page=photos&menu=photos1集上,因此特征train和目标X_train都合适。因此,在您的情况下,这是选项1:

y_train

模型经过训练后,就可以在model.fit(X_train,y_train) 上测试模型,并将在测试集上运行模型所得的X_testy_pred进行比较。

在使用选项3时获得指标“最佳图”的原因是,您实际上是在整个数据集上进行训练。如果随后对其中的一个子集进行测试,那么自然而然地,您将获得更高的分数,因为您可以根据训练期间看到的数据对模型进行测试。你永远都不要那样做。

答案 2 :(得分:1)

快速的答案是:在训练样本上训练模型。

无论您的模型是什么(线性回归或其他任何模型),您始终希望确保模型没有过度拟合,这意味着它对于看不见的数据仍然表现良好。这就是为什么您应该始终在完整数据集(训练数据集)的子集上训练模型,并使用测试集评估模型性能(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进行比较。