python-3.x - 如何使用 GPflow 进行预测 - 使用简单的数据输入运行 GPC?无法在不同数据上运行示例笔记本中的代码
问题描述
我尝试在笔记本上运行自生成数据的代码,以证明模型是否会进行任何分类。 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。
创建这个分类模型我做错了什么?
解决方案
你必须真正优化你的模型。一旦优化它,结果实际上看起来非常合理。我不希望 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。
推荐阅读
- javascript - 按下提交按钮时没有显示
- vue.js - 我可以在 vue.js 中仅重新渲染表格的一部分吗
- node.js - 下载和提取项目文件时出错响应正文无效〜blah〜expo-template-bare-minimum:EACCES:权限被拒绝
- sql - 如何创建列超过 1024 列的表类型
- docker - dotnet 核心应用程序在 Docker 中失败(System.IO.FileLoadException:无法加载文件或程序集'System.Configuration.ConfigurationManager)
- c# - 如何从利用其他外部 dll 的 c++ 项目制作 dll?
- c# - asp.net Core 身份验证登录(重定向到管理员)
- javascript - 如果我们无法访问表单 html 文件,是否有预填表单?
- python - 这里的 len() 有什么意义?
- python - freeze_support()--脚本一次又一次地运行并给出这个错误