【问题标题】:How do I run test data through my Python Machine Learning Model?如何通过我的 Python 机器学习模型运行测试数据?
【发布时间】:2018-03-03 08:20:18
【问题描述】:

所以我终于用 Python 完成了我的第一个机器学习模型。最初我获取一个数据集并像这样拆分它:

# Split-out validation dataset
array = dataset.values
X = array[:,2:242]
Y = array[:,1]
validation_size = 0.20
seed = 7
X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)

因此您可以看到我将使用 20% 的数据进行验证。但是一旦模型建立起来,我想用它以前从未接触过的数据来验证/测试它。我是否只是制作相同的 X、Y 数组并使 validation_size = 1?我被困在如何在不重新训练的情况下对其进行测试。

models = []
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
#models.append(('SVM', SVC()))
# evaluate each model in turn
results = []
names = []
for name, model in models:
    kfold = model_selection.KFold(n_splits=12, random_state=seed)
    cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)
    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
    print(msg)


lr = LogisticRegression()
lr.fit(X_train, Y_train)
predictions = lr.predict(X_validation)
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))

我可以通过模型运行数据,并返回一个预测,但我如何在“新”历史数据上进行测试?

我可以做这样的事情来预测: lr.predict([[5.7,...,2.5]])

但不确定如何通过测试数据集并获得混淆矩阵/分类报告。

【问题讨论】:

    标签: python machine-learning scikit-learn logistic-regression


    【解决方案1】:

    但是一旦模型建立起来,我想用它以前从未接触过的数据来验证/测试它。

    您使用拆分数据进行训练和测试(验证)的原因是对不参与训练集的数据运行模型。 所以你的模型不应该使用你的测试集来学习,也不要碰它。

    有时,如果您想与另一个测试集进行比较,您可以提取两个测试集(使用相同的方法),例如 (50%, 25%, 25%) 或 (70%, 15%, 15 %) 等,取决于您的数据分布。

    我可以通过模型运行数据,并返回一个预测,但我如何在“新”历史数据上进行测试?

    您使用预测方法。但是当你有“新”数据时,你就没有验证数据集,因为你不知道新数据的验证数据集。 这就是机器学习与概率、准确性和其他指标一起工作的原因,这些指标可以向您展示它在“新”数据上的效果。

    【讨论】:

      【解决方案2】:

      [question]: I can run data through the model, and return a prediction, but how do I test this on 'new' historical data?

      如果您在下面查看我的项目,您会看到我是如何训练和测试我的数据的。我个人永远不会测试我的所有数据。 https://github.com/wendysegura/Portland_Forecasting/blob/master/CSV_Police_Files/Random%20Forest%202012-2016.ipynb

      sklearn 模型类和方法的一般形式。

      1. 模型 = base_models.AnySKLearnObject()
        • 创建估算器类的实例
      2. model.fit(train_X, train_y)
        • 训练你的模型;也称为“拟合数据”
      3. model.score(train_X, train_y)
        • 使用默认评分方法使用训练数据为您的模型评分(建议以后使用指标模块)
      4. model.predict(test_X)
        • 预测您的测试数据
      5. model.score(test_X, test_y)
        • 使用您的测试数据为您的模型评分
      6. model.predict(new_X)
        • 对一组新数据进行预测

      【讨论】:

      • 谢谢你的例子!我真的很喜欢回顾它。看起来我只需要创建另一个测试集并将其作为 model.score(test_X, test_y) 运行。
      猜你喜欢
      • 1970-01-01
      • 2018-05-17
      • 2019-08-24
      • 2018-06-12
      • 1970-01-01
      • 2020-11-14
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多