model.fit vs model.predict-sklearn中的差异和用法

时间:2019-06-09 22:13:28

标签: python machine-learning scikit-learn

我是不熟悉Python的ML,并且正在尝试通过教程进行第一次尝试。在该教程中,有些代码行很难理解它们之间的交互方式。

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

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

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

下一部分将详细介绍ML模型和条件。

model = DecisionTreeRegressor() 
model.fit(train_x, train_y)
val_predictions = model.predict(val_x)

我的第二个问题:对于model.predict()语句,为什么要在其中放置val_x?我们不是要预测val_y吗?

奖金问题:另外,在许多教程中,我看到了StandardScalers的应用方式。但是,在本教程中,它不是这样出现的,或者是否有其他功能已经对其进行了缩放,而无需明确声明?请帮忙。

2 个答案:

答案 0 :(得分:2)

1)验证集通常用于帮助您相应地调整超参数。因为您可以根据模型在验证集中的性能来微调模型,所以即使模型没有直接针对验证数据进行训练,模型也可能会稍微偏向验证数据,这就是我们将其与测试集分开的原因。一旦根据验证集对模型进行了调整,就可以在测试集中对其进行评估,以查看其概括性。

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

答案 1 :(得分:1)

问题1.1 :为什么我们使用验证数据而不是测试数据? (在上述情况下)

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

首先,术语“验证集”和“测试集”非常宽松   在许多教程中使用,有时可以互换使用。这是很   可以将上述val_x, val_y称为test_x, test_y

问题1.2 :为什么不全部训练,验证和测试? (为什么要拆分?)

我们所有的机器学习算法都将用于某些实际数据(请参阅实际测试数据)。但是,在设计了算法之后,我们要“测试”其性能如何,准确性如何等等。

  

实际上,我们目前没有真实的数据!对吧?

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

model = DecisionTreeRegressor() 
model.fit(train_x, train_y)
val_predictions = model.predict(val_x) # contains y values predicted by the model
score = model.score(val_x, val_y) # evaluates predicted y against actual y of test data
print(score)

问题2。:对于model.predict()语句,为什么要在其中放置val_x?我们不是要预测val_y吗?

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

  

我了解阅读model predict val_x可能会造成混淆。

     

因此,更好的方法是对它进行解释,因为model您能否predict   从val_x中返回,并返回predicted_y

我说的是predicted_y而不是val_y,因为两者不会完全相似。它们有多少不同?那就是分数给出的。

某些术语

  • 数据集:现有数据。正是这些数据后来被分割
  • 训练集:它是模型学习的数据集的一部分。通常较大,约为70-80%。只能用train_x和train_y表示。
  • 测试集:数据集的一部分,我们将其保留以评估模型的性能。这“测试”了模型,因此得名。由test_x和test_y表示。
  • 验证集:如果我们希望在学习过程中对准确性进行无偏估计,则可以使用另一组数据集。通常用于查找超参数等。通常用于
    • 选择性能最佳的算法(NB vs DT vs。)
    • 微调参数(树深度,kNN中的k,SVM中的c)

问题1.3 :要使用哪种组合的用例是什么?

  

您将始终接受培训和考试,或者全部接受这三个培训。但是你的情况   测试只是命名为val。

奖金问题:在许多教程中,我看到了StandardScalers的应用方式。但是,在本教程中,它不是这样出现的,或者是否有其他功能已经对其进行了缩放,而无需明确声明?

  

这一切都取决于您的数据。如果对数据进行了预处理且所有数据均已正确缩放,则无需应用StandardScalers。这个特定的教程只是暗示数据已经被相应地标准化了。