为什么我的keras模型预测的概率总是零

为什么我的keras模型预测的概率总是零,keras,probability,predict,zero,Keras,Probability,Predict,Zero,我在Kaggle数据集上建立了一个预测贷款适用性的模型 该模型的准确率为81.43%。当我试图根据这个模型进行预测时,问题就出现了。这里,我将数据集中的第三行数据作为数组传递给模型,与其他行一样,概率为零 model = load_model('model.h5') X = np.array([[0, 1, 0, 0, 1, 3000, 0, 66, 360, 1, 0]], dtype=np.float32) scaler = StandardScaler() X = scaler.fit_t

我在Kaggle数据集上建立了一个预测贷款适用性的模型

该模型的准确率为81.43%。当我试图根据这个模型进行预测时,问题就出现了。这里,我将数据集中的第三行数据作为数组传递给模型,与其他行一样,概率为零

model = load_model('model.h5')
X = np.array([[0, 1, 0, 0, 1, 3000, 0, 66, 360, 1, 0]], dtype=np.float32)
scaler = StandardScaler()
X = scaler.fit_transform(X)
X = scaler.transform(X.reshape(1, -1))
pred = model.predict(X)
print(X)
print("Probability that eligibility = 1:")
print(pred)
我得到输出:

[[ 0.000e+00 -1.000e+00 -1.000e+00  0.000e+00  0.000e+00 -4.583e+03
  -1.508e+03 -1.280e+02 -3.600e+02 -1.000e+00 -1.000e+00]]
Probability that eligibility = 1:
[[0.]]

我无法在stackoverflow或其他网站上找到解决方案。

您正在为培训部分执行标准化,这非常好。但是,预测值是错误标准化的。在对培训部分执行标准化时,计算每列的平均值和标准差,并进行操作

但是,预测部分并不好,因为您计算了行的平均值和标准差

正确的培训过程是:

  • 计算训练数据集中所有列的平均值和标准值
  • 使用列值操作标准化:
  • X_标准=(X-平均值列)/标准列

  • 训练你的模特
  • 正确的预测过程是:

  • 选择一行,通过在1处计算的相应平均值和标准差对每个元素进行标准化
  • 预测

  • 不适合新数据的新标量对象,除模型外,还需要保存用于列车数据的StandardScaler,加载并转换新数据

    省省吧

    from pickle import dump
    scaler = StandardScaler()
    X = scaler.fit_transform(X)
    dump(scaler, open('scaler.pkl', 'wb'))
    
    然后在你想预测的时候加载它

    from pickle import load
    scaler = load(open('scaler.pkl', 'rb'))
    X = np.array([[0, 1, 0, 0, 1, 3000, 0, 66, 360, 1, 0]], dtype=np.float32)
    scaler.transform(X)
    

    谢谢,这很有效。你能在最后一行代码中加上'X='吗。那些没有经验的人或者那些在漫长的一天的编码工作后感到非常疲倦的人可能不会马上看到这一点。是的,你说得对,完成了。
    from pickle import load
    scaler = load(open('scaler.pkl', 'rb'))
    X = np.array([[0, 1, 0, 0, 1, 3000, 0, 66, 360, 1, 0]], dtype=np.float32)
    scaler.transform(X)