【问题标题】:making prediction on the entire testset对整个测试集进行预测
【发布时间】:2020-12-07 18:25:18
【问题描述】:

我想对整个测试集进行预测,这里测试集只有数据集A的20%,我理解这是因为它仅用于训练目的,当我保存权重然后对另一个数据集B进行预测时,它是否还会拆分测试集数据集B。 如何使用训练过的数据集 A 的权重对整个测试集数据集 B 进行预测。 谢谢。

x = dataset.iloc[:, :-1].values

# Dependent Variable:
y = dataset.iloc[:, -1].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)


from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# Initialising the ANN
classifier = Sequential()

# Adding the input layer and the first hidden layer
classifier.add(Dense(units = 27, kernel_initializer = 'uniform', activation = 'relu', input_dim = 6))

# Adding the second hidden layer
classifier.add(Dense(units = 27, kernel_initializer = 'uniform', activation = 'relu'))

# Adding the output layer
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))

# Compiling the ANN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

# Fitting the ANN to the Training set
classifier.fit(X_train, y_train, batch_size = 10, epochs = 20)

#making predictions on test data
classifier.predict(X_test)

【问题讨论】:

    标签: python machine-learning keras scikit-learn deep-learning


    【解决方案1】:

    如果我理解正确,你想在一个全新的数据集上使用你训练好的模型吗?

    Keras 提供了几种方法来做到这一点,但我认为最常见的方法是使用命令将训练好的模型导出到 .hd5 文件中

    model.save("filepath/model.hd5")
    

    现在您可以使用命令将模型加载并使用到任何您想要的地方

    model = model.load("filepath/model.hd5")
    score = model.evaluate(X, Y)
    

    其中 X 是数据集 B 的特征列,Y 是获得评分的响应。如果数据集 B 在同一个实例中,您总是可以使用

    model.predict(X)
    

    X 现在是数据集 B 的特征列

    【讨论】:

      【解决方案2】:

      据我了解,您在这里提出 2 个问题:

      首先,将“数据集 B”拆分为训练集和测试集由您在行中手动完成 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0).

      如果,当您使用“数据集 B”时,您想在“数据集 B”的所有数据点上测试您的分类器,则不必进行此训练测试拆分,只需通过 X将“数据集 B”的值添加到您的分类器中。

      至于如何做到这一点,根据您的第二个问题,它与您已经对“数据集A”的测试集所做的相同:

      classifier.predict(X) 将使用它已经在“数据集 A”上学到的拟合进行预测,假设您没有重新编译或再次调用 .fit()

      【讨论】:

      • 这是您描述的两个不同步骤 - train_test_split 与保存模型的权重完全分开。这个问题的另一个答案显示了一种保存权重的流行方法,如果这是您想要做的,或者您可以直接使用.predict()。您使用 predict ON 是一个单独的问题,您可以选择仅在“数据集 B”的另一个子集或整个数据集上使用它。
      • 这取决于你想做什么——从我的回答中回想一下,调用.fit() 将重新训练权重。如果你想保持你在“数据集 A”上训练的权重,你应该跳过调用 fit 并直接跳转y_pred = ann.predict(x)
      猜你喜欢
      • 2019-05-08
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 2016-11-11
      • 1970-01-01
      • 2019-07-05
      相关资源
      最近更新 更多