贝叶斯岭回归分析

贝叶斯岭回归是一种在回归分析中常用的方法,特别是在处理具有噪声的数据时。通过引入正则化参数,可以有效控制模型的复杂度,防止过拟合。在实际应用中,选择合适的正则化参数初始值对于模型的最终性能至关重要。这是因为正则化参数的确定依赖于一个迭代过程,而这个过程受到初始值的影响。

在本例中,使用贝叶斯岭回归来拟合一个正弦波形的多项式。通过改变正则化参数的初始值,可以得到不同的拟合结果。当从默认值开始时,得到的曲线偏差较大,方差较小。为了减少偏差,应该选择一个相对较小的lambda初始值(例如1.e-3)。此外,通过评估这些模型的对数边际似然(L),可以确定哪个模型更好。通常,具有较大L值的模型更有可能是正确的。

生成带噪声的正弦波数据

import numpy as np def func(x): return np.sin(2 * np.pi * x) size = 25 rng = np.random.RandomState(1234) x_train = rng.uniform(0.0, 1.0, size) y_train = func(x_train) + rng.normal(scale=0.1, size=size) x_test = np.linspace(0.0, 1.0, 100)

在上述代码中,首先定义了一个函数来生成正弦波形的数据。然后,使用numpy库中的随机数生成器来创建一组训练数据,并为这些数据添加了一些噪声。最后,生成了一个测试数据集,用于评估模型的性能。

使用三次多项式进行拟合

from sklearn.linear_model import BayesianRidge n_order = 3 X_train = np.vander(x_train, n_order + 1, increasing=True) X_test = np.vander(x_test, n_order + 1, increasing=True) reg = BayesianRidge(tol=1e-6, fit_intercept=False, compute_score=True)

在这段代码中,使用了scikit-learn库中的贝叶斯岭回归模型。首先将训练数据转换为多项式形式,然后创建了一个贝叶斯岭回归模型实例,并设置了一些参数,如容忍度和是否计算得分。

import matplotlib.pyplot as plt fig, axes = plt.subplots(1, 2, figsize=(8, 4)) for i, ax in enumerate(axes): # 贝叶斯岭回归的不同初始值对 if i == 0: init = [1 / np.var(y_train), 1.0] # 默认值 elif i == 1: init = [1.0, 1e-3] # 较小的lambda初始值 reg.set_params(alpha_init=init[0], lambda_init=init[1]) reg.fit(X_train, y_train) ymean, ystd = reg.predict(X_test, return_std=True) ax.plot(x_test, func(x_test), color="blue", label="sin($2\pi x$)") ax.scatter(x_train, y_train, s=50, alpha=0.5, label="观测值") ax.plot(x_test, ymean, color="red", label="预测均值") ax.fill_between(x_test, ymean - ystd, ymean + ystd, color="pink", alpha=0.5, label="预测标准差") ax.set_ylim(-1.3, 1.3) ax.legend() title = "$\\alpha$_init$={:.2f}, $\\lambda$_init$={}$".format(init[0], init[1]) if i == 0: title += " (默认)" ax.set_title(title, fontsize=12) text = "$\\alpha$={:.1f}\n$\\lambda$={:.3f}\n$L$={:.1f}$".format(reg.alpha_, reg.lambda_, reg.scores_[-1]) ax.text(0.05, -1.0, text, fontsize=12) plt.tight_layout() plt.show()

在这段代码中,使用matplotlib库来绘制真实曲线和预测曲线。为每个初始值对绘制了一组曲线,并显示了预测的标准差。此外,还显示了模型的参数和对数边际似然(L)值,以便于比较不同模型的性能。

总的来说,贝叶斯岭回归是一种强大的工具,可以帮助在存在噪声的情况下进行有效的曲线拟合。通过仔细选择正则化参数的初始值,可以显著提高模型的性能。此外,通过评估模型的对数边际似然,可以更有信心地选择最佳的模型。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485