【问题标题】:train model with dataset A and test with dataset B使用数据集 A 训练模型并使用数据集 B 进行测试
【发布时间】:2020-02-11 10:47:35
【问题描述】:

在这个例子中,我有一个假设的平衡数据集,其中包含关于大学生的几个属性和一个指示他们是否通过考试的目标属性(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)

我没有收到任何错误,但我的输出远低于拆分数据集 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

这是由于我的一个/两个数据集的大小差异造成的,还是可以预料到的?根据我的阅读,这可能是使用两个独特的数据集进行训练和测试的方法问题。但是,如果是这种情况,那么我什至看不出构建模型的意义何在,因为它无法以任何合理的成功预期提供独特的数据。我显然不相信这是真的,但是通过搜索我没有找到任何关于如何执行模型评估的这一部分的信息。如果有人可以帮助我提供一些一般性的见解,将不胜感激。

【问题讨论】:

    标签: python pandas machine-learning scikit-learn xgboost


    【解决方案1】:

    原来我的问题的第一部分是一个简单的答案:不要使用 train_test_split()。您将您的特定算法分配给一个变量(例如“模型”),然后以与 train_test_split 相同的方式将其与所有数据相匹配。

    model.fit(X, y)
    

    然后您传递新数据(例如,N 作为特征数据,z 作为标签)

    new_predictions = model.predict(N)
    

    我的问题的第二部分仍然难以理解。

    【讨论】:

    • 抱歉,您的整个问题看起来过于复杂——第二部分到底是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2016-10-19
    • 1970-01-01
    • 2014-02-18
    • 2019-05-04
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多