高斯过程/贝叶斯回归

http://www.gaussianprocess.org/gpml/chapters/
https://github.com/dfm/gp

  • 线性回归
    y=ax+b, 最小二乘法, 用已有的数据集估算a和b,最小化损失函数
  • 先验和后验概率
    参考链接:https://www.zhihu.com/question/24261751/answer/158547500
    https://blog.csdn.net/qq_23947237/article/details/78265026
    先验:未知条件下,根据直觉对事情的猜测
    后验:事情已经发生,这个事情由某个因素引起的可能性的大小。由结果推原因。可以表示为p(原因|结果)
    似然:p(结果|原因)
    贝叶斯公式:
    参考链接:https://www.jianshu.com/p/a7ed8b29f570
    https://www.cnblogs.com/yemanxiaozu/p/7680761.html
    p(a|b)=p(a)*p(b|a)/p(b)
    先有个事情a, 根据经验给出先验。当事情b已经发生后, 事情a的概率可能发生变化。根据p(b|a)/p(b)调整先验(增强或削弱或不影响先验)

最大后验估计和最大似然估计都是点估计,贝叶斯估计需要得到一个概率分布,不是点估计,是根据已经发生的事情对先验的不断修正。

贝叶斯回归
可以采用mcmc方法处理回归系数和预测值
如果没有先验,一般认为先验为高斯分布
参考链接:https://baijiahao.baidu.com/s?id=1598705784509790616&wfr=spider&for=pc

多元高斯分布:
参考链接:
https://blog.csdn.net/paulfeng20171114/article/details/80276061
https://blog.csdn.net/GoodShot/article/details/79940438
https://www.jgoertler.com/visual-exploration-gaussian-processes/
https://blog.csdn.net/qq_20195745/article/details/82721666
矩阵函数,用每个元的均值和协方差矩阵定义,协方差矩阵上对角线代表这个元的方差,其余为协方差。
协方差表示两个变量之间的相互关系,协方差大与0表示正相关。

性质:在条件作用和边缘化的运算之后,仍为高斯分布

数据集为(x,y)
预测值f(x)≈y

高斯过程回归的目标是得到f(x)的分布,已有f(x)标记为f,需要预测的f(x*)标记为f*
根据贝叶斯计算公式
p(f*|f)=p(f*) ✖️p(f|f*)/p(f)=p(f*,f)/p(f)
计算p(f*,f)/p(f)即可得到预测结果
f~N(u,K)
核心问题1、计算协方差矩阵2、计算f*

1、协方差矩阵用核函数

x的形状影响f(x)的形状
输入x能得到f(x)的协方差
所以用核函数,k(x,x·) 来表示x和x·的关系

如何学习kernel的参数?很简单kernel k(x,{x}’) 优劣的评价标准就是在要f(x)\sim N(m(x),k(x,x{{T}}))\的条件下,让p(Y|X)最大,为了方便求导我们将目标函数设为logp(Y|X)=log N(\mu ,K_{y}),接下来利用梯度下降法来求最优值即可:
2、计算f*
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于高斯过程贝叶斯优化的Python代码示例: ``` import numpy as np from scipy.stats import norm from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import ConstantKernel, Matern # 定义目标函数 def target_function(x): return np.sin(3*x) + x**2 - 0.7*x # 定义贝叶斯优化函数 def bayesian_optimization(n_iters, sample_loss, bounds): # 定义高斯过程回归模型 kernel = ConstantKernel(1.0) * Matern(length_scale=1.0, nu=2.5) gp = GaussianProcessRegressor(kernel=kernel, alpha=1e-6) # 初始化参数和损失列表 x_list = [] y_list = [] # 迭代优化 for i in range(n_iters): # 根据高斯过程模型和边界值抽样生成一个候选点 x = np.random.uniform(bounds[:, 0], bounds[:, 1], size=(1, bounds.shape[0])) # 计算候选点的目标函数值 y = sample_loss(x) # 更新参数和损失列表 x_list.append(x) y_list.append(y) # 在更新高斯过程回归模型 X = np.concatenate(x_list, axis=0) Y = np.concatenate(y_list, axis=0) gp.fit(X, Y) # 返回参数和损失列表中的最优值 best_idx = np.argmax(y_list) return x_list[best_idx], y_list[best_idx] # 定义损失函数为目标函数的负值 def sample_loss(x): return -target_function(x) # 定义参数边界值 bounds = np.array([[-1.0, 2.0]]) # 进行贝叶斯优化 x_best, y_best = bayesian_optimization(n_iters=20, sample_loss=sample_loss, bounds=bounds) # 输出最优解和目标函数值 print("最优解:", x_best) print("目标函数值:", -y_best) ``` 在上面的代码中,我们首先定义了一个目标函数 `target_function`,这个函数是我们要优化的函数。然后我们定义了 `bayesian_optimization` 函数,这个函数使用高斯过程回归模型进行贝叶斯优化,其中参数 `n_iters` 是迭代次数,`sample_loss` 是损失函数,`bounds` 是参数的边界值。在 `bayesian_optimization` 函数中,我们使用高斯过程回归模型和边界值抽样生成一个候选点,然后计算其目标函数值,最后更新高斯过程回归模型。在迭代结束后,我们返回参数和损失列表中的最优值。 接下来我们定义了损失函数 `sample_loss`,这个函数是目标函数的负值,因为我们要最小化目标函数。最后我们定义了参数的边界值 `bounds`,这个例子中我们只有一个参数,所以是一个二维数组。 最后我们调用 `bayesian_optimization` 函数进行贝叶斯优化,然后输出最优解和目标函数值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值