我尝试将基本二进制分类示例中的 sklearn 代码迁移到 keras 。 我对 keras predict()方法有疑问,该方法返回的不同于 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)。
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矢量及其值?
感谢您的回答。
答案 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.
干杯