模型.拟合与模型.预测sklearn中的差异和用法

2024-09-30 18:31:21 发布

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

我是Python的ML新手,我第一次尝试通过一个教程。在那个教程中,有几行代码我很难理解它们是如何相互作用的。在

第一个代码是拆分发生的数据,如下所示:

train_x, val_x, train_y, val_y = train_test_split(X, y,test_size=0.3)

我的第一个问题:为什么我们使用验证数据而不是测试数据?为什么不全部训练,val和测试?使用哪种组合的用例是什么?在

下一节将详细介绍ML模型和preditcs。在

^{pr2}$

我的第二个问题:对于模型.预测()声明,为什么我们要把val_x放在那里?我们不想预测价值吗?在

额外的问题:而且,在许多教程中,我看到了如何应用标准缩放器。但是,在本教程中,它并不是这样出现的,或者其他函数是否已经扩展了它而不必显式地声明它?请帮忙。在


Tags: 数据代码模型test声明sizetrain教程
2条回答

1)验证集通常用于帮助您相应地调整超参数。因为您可以根据模型在验证集上的性能对其进行微调,所以模型可能会对验证数据稍有偏差,即使它没有直接对这些数据进行训练,这就是为什么我们将其与测试集分开。一旦根据验证集将模型调整到您喜欢的程度,就可以在测试集中对其进行评估,以查看它的泛化程度。在

2)调用model.predict(val_x)将根据给定的x值返回预测的y值。然后可以使用一些损失函数将这些预测值与val_y进行比较,以评估模型在验证集上的性能。在

Q1.1:为什么我们使用验证数据而不是测试数据?(在上述场景中)

train_x, val_x, train_y, val_y = train_test_split(X, y,test_size=0.3)

First of all, the terms validation set and test set are very loosely used in many tutorials and sometimes interchangeably. It is quite possible to call the above val_x, val_y as test_x, test_y

Q1.2:为什么不是全部、训练、val和测试?(为什么分开?)

我们所有的机器学习算法都将用于一些实际数据(参考实际测试数据)。然而,在设计出一个算法之后,我们要“测试”它的性能,它的准确度,等等

Actually we currently don't have the real world data! Right?

但是我们有什么?列车数据!因此,我们巧妙地将它的一部分(拆分)放在一边,以便以后测试该算法。一旦模型准备好,测试数据用于评估性能。在

^{pr2}$

问题2。:对于模型.预测()声明,为什么我们要把val_x放在那里?我们不想预测价值吗?在

我们想要预测val_y,但是模型需要val_x来预测y。这正是我们作为参数传递给predict函数的内容。在

I understand it might be confusing to read modelpredictval_x.

So the better way is to interpret it, as model could you u please predict from val_x, and return predicted_y.

我说predicted_y而不是{},因为两者并不完全相似。它们有多大的不同?这就是分数。在

一些术语

  • 数据集:手头数据。这是后来被分割的数据
  • 训练集:它是我们模型学习的数据集的一部分。通常较大,约70-80%。通常用“x”列和“y”列表示
  • 测试集:我们为评估模型性能而预留的部分数据集。这个“测试”模型因此得名。表示为测试x和测试y
  • 验证集:如果我们希望在学习过程中对准确度进行无偏估计,我们使用另一个数据集分割。通常是为了找到超参数等
    • 选择最佳执行算法(NB vs DT vs…)
    • 微调参数(树深,kNN中的k,SVM中的c)

Q1.3:使用哪个组合的用例是什么?在

You will always have train & test, or all three. However in your case the test is just named as val.

额外问题:在许多教程中,我看到了如何应用标准缩放器。但是,在本教程中,它并不是这样出现的,或者其他函数是否已经扩展了它而不必显式地声明它?在

It all depends on your data. If the data is pre-processed and all scaled properly then StandardScalers need not be applied. This particular tutorial just implies that data is already normalised accordingly.

相关问题 更多 >