在此示例中,我有一个假设的平衡数据集,其中包含有关大学生的几个属性和一个指示他们是否通过考试的目标属性(0 =失败1 =通过)。我创建了GBM模型(scikit-learn xgboost)并将其拟合为原始数据集的75%(18000条记录),对于失败的学生,我的保留集(4700条记录)的准确度为80%,准确度为91.6%。考试。
在这一点上,我现在非常想使用此数据集的100%作为训练数据,并使用一组新的2000条学生记录(平衡)作为测试数据。我想基于数据集A的训练对数据集B进行预测。最终,我想将这些预测提供给我的上司/上级,以作为验证我的工作,然后开始向模型中提供新数据以进行预测的一种方法未来的学生在该考试中的表现如何。我目前在如何使用整个原始数据集作为培训资料,而将整个新数据集作为测试资料方面陷入困境。
我尝试使用
X = original data minus target feature
y = original data target feature only
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size =
0.00001, random_state=0)
和
N = new data minus target feature
z = new data target feature only
N_train, N_test, z_train, z_test = (train_test_split(N, z, test_size =
.999, random_state=0))
创建测试并训练变量。然后,我尝试使用以下方法拟合新记录并将其传递到我的模型中:
# Fit model with original X and y data
xg_class.fit(X_train, y_train)
# Generate predictions based off of X_test
new_preds = xg_class.predict(N_test)
我没有收到任何错误,但是我的输出FAR比分割数据集A的初始结果低。
Accuracy (75%/25% split of dataset A): 79%
Precision (75%/25% split of dataset A): 91.1% TP / 71.5% TN
Accuracy (99% trained dataset A, tested dataset B): 45%
Precision (99% trained dataset A, tested dataset B): 18.7% TP / 62.4% TN
这是由于我的两个数据集大小差异还是这是预期的吗?根据我正在阅读的内容,这可能是使用两个唯一的数据集进行培训和测试的方法论问题。但是,如果是这种情况,那么我什至看不到建立模型的意义,因为无法以任何对成功的合理期望来提供唯一数据。我显然不相信这是真的,但是通过搜索关于模型评估这一部分的执行方式,我没有找到任何信息。如果有人可以帮助我提供一些一般性的见解,将不胜感激。
答案 0 :(得分:0)
结果我的问题之一是一个简单的答案:不要使用train_test_split()。您可以将特定的算法分配给变量(例如“模型”),然后以与train_test_split相同的方式将其与所有数据拟合。
model.fit(X, y)
然后您传递新数据(例如,N作为要素数据,z作为标签)
new_predictions = model.predict(N)
问题的第二部分仍然困扰着我。