在另一个数据集上测试模型?

Posted

技术标签:

【中文标题】在另一个数据集上测试模型?【英文标题】:Test a model on another dataset? 【发布时间】:2021-01-31 07:28:02 【问题描述】:

我需要在另一个数据集上评估 ML 模型,但我不知道它的全部含义。我有一个想法,但我不确定。 假设我们有:

X_train, X_test, y_train, y_test 从第一个模型的 X,Y 中分离出来 X_train_2, X_test_2, y_train_2, y_test_2 从 X2 中分离出来,2 用于第二个模型

model.fit 训练两个模型后,我如何在另一个数据库上测试它们?是吗:

from sklearn.svm import SVC


#training on the first model
svm.fit(X, Y)

#test on  the 2nd model
y_pred = svm.predict(X_test_2)

#evaluate accuracy
print(accuracy_score(y_test, y_pred))

看起来很简单,但我真的很困惑,我希望能得到一些解释。

【问题讨论】:

【参考方案1】:

在另一个数据集上进行测试,比如 X2, y2,并不意味着您需要将第二个数据集拆分为训练和测试子集,就像您对原始 Xy 所做的那样。一旦你拟合了你的模型,比如svm,在你展示的X中,你只需预测X2并与y2中的标签进行比较:

# predict on the 2nd dataset X2
y_pred = svm.predict(X2)

# evaluate accuracy
print(accuracy_score(y2, y_pred))

【讨论】:

哦,我明白了,我对拆分第二个数据集也有疑问!非常感谢,现在清楚了【参考方案2】:

您走在正确的道路上,但有几点需要牢记:

一旦您的模型经过训练并使用了model.fit,您就可以使用该模型使用model.predict 对第二个数据集进行预测 您要在第二个数据集中预测的特征和值应与第一个数据集相同。否则,它只是没有意义。 您没有两个模型。您已经使用一个数据集训练了一个模型,然后使用同一模型对第二个数据集进行预测。 您不需要将第二个数据集划分为 X_train 和 X_test,因为模型已经经过训练。您将拥有的只是 X_test 或 X2,它们是第二个数据集所有行的所有特征,而 y 是您要预测的值。

例子:

数据集 1:X_train, X_test, y_train, y_test 从 X,Y 中拆分出来用于训练模型

数据集 2:X2,Y2

 from sklearn.svm import SVC

 #training on the first model
 svm.fit(X_train, y_train)

 # predict on the 2nd dataset X2
 y_pred = svm.predict(X2)

 #evaluate accuracy of predictions for second dataset
 print(accuracy_score(Y2, y_pred))

【讨论】:

是的,功能是一样的,我正在尝试查看是否可以识别来自亲子交互(第一个数据集)的(“是”、“否”、“警告”)成人机器人交互(第二个数据集)!谢谢你的解释!

以上是关于在另一个数据集上测试模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何评估不同模型在一个数据集上的性能?

机器学习:验证数据集与交叉验证

多个模型在测试集上的Accuracy以及AUC指标可视化对比实战

python:在验证集上调整模型的参数

当没有为它们提供注释时,如何在 PascalVOC 2012 或 COCO 测试集上测试模型?

R语言使用caret包的predict函数对模型在测试集上的表现进行推理和预测predict函数对测试数据集进行数据预处理(和训练集的初始方式保持一致):缺失值填充数值变量最小最大缩放独热编码