2

我尝试在笔记本上运行自生成数据的代码,以证明模型是否会进行任何分类。 https://gpflow.readthedocs.io/en/master/notebooks/basics/classification.html

所以我创建了 X 和 Y 作为输入数据。

X=np.array([-0.0259,-0.3579,-0.289,0.0356,0.0147,0.0234]).reshape(-1,1)
Y=np.array([0,0,0,1,1,1]).reshape(-1,1)

X 和 Y 中的值被选择为二进制逻辑,X 中的负值等于 Y 中的 0。X 中的正值应归类为 Y 中的 1。

然后我创建了一个模型并对其进行了训练:

Per = gpflow.kernels.Periodic(gpflow.kernels.SquaredExponential())
model_Per = gpflow.models.VGP((X, Y), likelihood=gpflow.likelihoods.Bernoulli(), kernel=Per)

我试图将 Y 预测为具有与模型训练输入相同的 X 的类,只是想看看是否有正确的结果。

Ypred, VARpred = model_Per.predict_y(X)

对于 Ypred,我得到输出:

    <tf.Tensor: shape=(6, 1), dtype=float64, numpy=
array([[0.5],
       [0.5],
       [0.5],
       [0.5],
       [0.5],
       [0.5]])>

对于 VARpred

   <tf.Tensor: shape=(6, 1), dtype=float64, numpy=
array([[0.25],
       [0.25],
       [0.25],
       [0.25],
       [0.25],
       [0.25]])>

我尝试更改内核,组合内核,在预测之前使用 Scipy 进行优化,更改数据,但均值和方差的输出始终相同。我期待这个数据集的 Ypred = Y。

创建这个分类模型我做错了什么?

4

1 回答 1

0

你必须真正优化你的模型。一旦优化它,结果实际上看起来非常合理。我不希望 GP 模型准确预测 p=1——这意味着此时观察到 0 的概率为 0.0%,我只会相信如果我看到无限量的数据都说 1...

对于您使用的伯努利似然,方差与均值确定性相关。如果 y ~ Bernoulli,并且 Mean[y] = p,则 Var[y] = p * (1 - p)。对你来说,平均值是 p=0.5,所以方差是 0.5 * (1 - 0.5) = 0.25。

于 2020-07-09T09:45:57.630 回答