PRML-1.2.6 贝叶斯曲线拟合
一些记号和回顾
参数 | 含义 |
---|---|
样本量 | |
虽然我们已经谈到了先验分布,但是我们⽬前仍然在进⾏的点估计(最大似然估计),这并不是贝叶斯观点,在⼀个纯粹的贝叶斯⽅法中,我们应该⾃始⾄终地应⽤概率的加和规则和乘积规则。我们稍后会看到,这需要对所有w值进⾏积分。对于模式识别来说,这种积分是贝叶斯⽅法的核⼼
1.纯贝叶斯派的推导和计算
2.贝叶斯回归代码
点击查看代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
# %matplotlib inline
# 定义数据集:
def uniform(size):
x = np.linspace(0, 1, size)
return x.reshape(-1, 1)
def create_data(size):
x = uniform(size)
np.random.seed(42)
y = sin_fun(x) + np.random.normal(scale=0.15, size=x.shape)
return x, y
def sin_fun(x):
return np.sin(2 * np.pi * x)
x_train, y_train = create_data(10)
x_test = uniform(100)
y_test = sin_fun(x_test)
poly = PolynomialFeatures(9)
X_train = poly.fit_transform(x_train)
X_test = poly.fit_transform(x_test)
#### 定义贝叶斯估计方法:
class BayesianRegressor():
def __init__(self, alpha=1., beta=1.):
self.alpha = alpha
self.beta = beta
self.mean_prev = None
self.S = None
def fit(self, X, t):
S_inv = self.alpha * np.eye(np.size(X, 1)) + self.beta * np.matmul(X.T, X)
mean_prev = np.linalg.solve(
S_inv,
self.beta * np.matmul(X.T, t)
)
self.mean_prev = mean_prev
self.S = np.linalg.inv(S_inv)
def predict(self, X):
y = np.matmul(X, self.mean_prev)
y_var = 1 / self.beta + np.sum(np.matmul(X, self.S) * X, axis=1)
y_std = np.sqrt(y_var)
return y, y_std
# 最后使用我们的模型拟合观察数据,然后对新数据进行预测并绘制曲线:
model = BayesianRegressor(alpha=2e-3, beta=2)
y_train = y_train.reshape(10)
model.fit(X_train, y_train)
y, y_std = model.predict(X_test)
fig = plt.figure(figsize=(12, 8))
plt.scatter(x_train, y_train, facecolor="none", edgecolor="b", s=50, label="training data")
plt.plot(x_test, y_test, c="g", label="$\sin(2\pi x)$")
plt.plot(x_test, y, c="r", label="Mean")
plt.fill_between(x_test[:, 0], y - y_std, y + y_std, color="pink", label="std", alpha=0.5)
plt.title("M=9")
plt.legend(loc=2)
plt.show()

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)