二进制分类predict()方法:sklearn vs keras

时间:2018-02-05 09:16:27

标签: python-3.x scikit-learn deep-learning keras classification

我尝试将基本二进制分类示例中的 sklearn 代码迁移到 keras 。 我对 keras predict()方法有疑问,该方法返回的不同于 sklearn

sklearn

print("X_test:")
print(X_test)
y_pred = model.predict(X_test)
print("y_pred:")
print(y_pred)
  

XGBClassifier(base_score = 0.5,colsample_bylevel = 1,colsample_bytree = 1,          gamma = 0,learning_rate = 0.1,max_delta_step = 0,max_depth = 3,          min_child_weight = 1,missing = None,n_estimators = 100,nthread = -1,          objective ='binary:logistic',reg_alpha = 0,reg_lambda = 1,          scale_pos_weight = 1,seed = 0,silent = True,subsample = 1)

---预测Sklearn ---

  

X_test:[[1.90。62. ...,27.2 0.58 24.]   [7. 181. 84. ...,35.9 0.586 51.] [13.
  152. 90. ......,26.8 0.731 43.] ......,[4。118. 70。......,44.5 0.904 26.] [7. 152. 88. ...,50. 0.337 36.] [7. 168. 88 ....,38.2 0.787 40.]]

     

y_pred:[0.1。1. 1. 0. 1. 1. 0. 0. 1. 0. 1. 0. 1. 1. 0。   0. 0。1。     0. 0-0.1。1. 0 0. 0 0. 0 1. 1. 0. 0. 0 0. 0。     0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 0. 0 1. 0. 0. 1. ...     0. 0.1 1. 0. 0. 0. 0. 1. 0. 1. 0. 0. 0. 0. 0. 0. 1. 0。     0.1。0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 0. 0. 0. 0. 0。     0. 0 0. 1. 0. 0 1. 1. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0。1。     1. 1。]

predict()的数据类型返回: X_test 维度的二进制向量(OK)。

Keras

score = aTSSeqModel.evaluate(X_test, Y_test2, batch_size=32)
  

得分:[1.4839521383676004,0.6338582667778796]

这两个值代表什么?

print("--- Predict Keras ---")
print("X_test:")
print(X_test)
Y_pred2 = aTSSeqModel.predict(X_test, batch_size=32)
print("Y_pred:")
print(Y_pred2)
  

keras.models.Sequential object at 0x7fae3a60b438

---预测Keras ---

  

X_test:[[1.90。62. ...,27.2 0.58 24.]   [7. 181. 84. ...,35.9 0.586 51.] [13.
  152. 90. ......,26.8 0.731 43.] ......,[4。118. 70。......,44.5 0.904 26.] [7. 152. 88. ...,50. 0.337 36.] [7. 168. 88 ....,38.2 0.787 40.]]

     

Y_pred:[[9.07712865e-21] [0.00000000e + 00] [1.27839347e-25] [   2.38120656e-22] [5.51314650e-20] [1.99869346e-22] [1.54212393e-19] ...

使用 keras 模型 predict()的正确方法是什么?

我希望像 sklean 那样使用二进制向量,这是预测的结果应用于 X_test 数据集。 什么代表2D矢量及其值?

感谢您的回答。

1 个答案:

答案 0 :(得分:2)

这是一个严重错误的问题,但我会尝试解决您的问题。请在下次查看guidelines

  

这两个值代表什么?

假设您在metrics标志设置为

的情况下编译了模型
model.compile(optimizer='...', loss='...', metrics=['acc'])

然后调用model.evaluate(X, Y)将返回一个数组,其中第一个值是model.predict(X)Y之间的丢失,第二个值是相同数据的准确度。<登记/> 它显然也扩展到其他指标。

  

对keras模型使用predict()是否正确?

是的 Scikit-learn的predict()返回一个形状(n_samples, )的数组,而Keras'返回一个形状为(n_samples, 1)的数组。 两个数组对于您的目的是等效的,但是Keras中的数组更通用,因为它更容易扩展到多维输出情况。 要将Keras输出转换为Sklearn,只需致电y_pred.reshape(-1) 至于为什么Scikit-learn的值会自动舍入,我不知道,但它可能与Sklearn使用的内部数据类型有关。如果您愿意,可以像这样对Keras的值进行舍入:

y_pred[y_pred <= 0.5] = 0.
y_pred[y_pred > 0.5] = 1.

干杯