西安医院网站建设,wordpress增加产品外链,广州建立网站,提升学历的机构Bayesian regression 前面介绍的线性模型都是从最小二乘#xff0c;均方误差的角度去建立的#xff0c;从最简单的最小二乘到带正则项的 lasso#xff0c;ridge 等。而 Bayesian regression 是从 Bayesian 概率模型的角度出发的#xff0c;虽然最后也会转换成一个能量函数的… Bayesian regression 前面介绍的线性模型都是从最小二乘均方误差的角度去建立的从最简单的最小二乘到带正则项的 lassoridge 等。而 Bayesian regression 是从 Bayesian 概率模型的角度出发的虽然最后也会转换成一个能量函数的形式。 从前面的线性模型中我们都假设如下的关系 ywxywx 上面这个关系式其实是直接从值的角度来考虑其实我们也可以假设如下的关系 ywxϵywxϵ 这个 ϵϵ 表示一种误差或者噪声如果估计的值非常准确那么 ϵ0ϵ0, 否则这将是一个随机数。 如果我们有一组训练样本那么每个观察值 yy 都会有个对应的 ϵϵ, 而且我们假设 ϵϵ 是满足独立同分布的。那么我们可以用概率的形式表示为 p(y|w,x,α)N(y|wx,α)p(y|w,x,α)N(y|wx,α) 对于一组训练集我们可以表示为 p(y|X,w)∏i1NN(yi|wxi,α)p(y|X,w)∏i1NN(yi|wxi,α) 最后利用最大似然估计可以将上面的表达式转化为一个能量最小的形式。上面是从最大似然估计的角度去求系数。 下面我们考虑从最大后验概率的角度 p(w|y)p(y|w)p(w|α)p(α)p(w|y)p(y|w)p(w|α)p(α) p(w|α)N(w|0,α−1I)p(w|α)N(w|0,α−1I) p(α)p(α) 本身是服从 gamma 分布的。 sklearn 上也给出了一个例子 import numpy as np
import matplotlib.pyplot as plt
from scipy import statsfrom sklearn.linear_model import BayesianRidge, LinearRegression# #############################################################################
# Generating simulated data with Gaussian weights
np.random.seed(0)
n_samples, n_features 100, 100
X np.random.randn(n_samples, n_features) # Create Gaussian data
# Create weights with a precision lambda_ of 4.
lambda_ 4.
w np.zeros(n_features)
# Only keep 10 weights of interest
relevant_features np.random.randint(0, n_features, 10)
for i in relevant_features:w[i] stats.norm.rvs(loc0, scale1. / np.sqrt(lambda_))
# Create noise with a precision alpha of 50.
alpha_ 50.
noise stats.norm.rvs(loc0, scale1. / np.sqrt(alpha_), sizen_samples)
# Create the target
y np.dot(X, w) noise# #############################################################################
# Fit the Bayesian Ridge Regression and an OLS for comparison
clf BayesianRidge(compute_scoreTrue)
clf.fit(X, y)ols LinearRegression()
ols.fit(X, y)# #############################################################################
# Plot true weights, estimated weights, histogram of the weights, and
# predictions with standard deviations
lw 2
plt.figure(figsize(6, 5))
plt.title(Weights of the model)
plt.plot(clf.coef_, colorlightgreen, linewidthlw,labelBayesian Ridge estimate)
plt.plot(w, colorgold, linewidthlw, labelGround truth)
plt.plot(ols.coef_, colornavy, linestyle--, labelOLS estimate)
plt.xlabel(Features)
plt.ylabel(Values of the weights)
plt.legend(locbest, propdict(size12))plt.figure(figsize(6, 5))
plt.title(Histogram of the weights)
plt.hist(clf.coef_, binsn_features, colorgold, logTrue,edgecolorblack)
plt.scatter(clf.coef_[relevant_features], 5 * np.ones(len(relevant_features)),colornavy, labelRelevant features)
plt.ylabel(Features)
plt.xlabel(Values of the weights)
plt.legend(locupper left)plt.figure(figsize(6, 5))
plt.title(Marginal log-likelihood)
plt.plot(clf.scores_, colornavy, linewidthlw)
plt.ylabel(Score)
plt.xlabel(Iterations)# Plotting some predictions for polynomial regression
def f(x, noise_amount):y np.sqrt(x) * np.sin(x)noise np.random.normal(0, 1, len(x))return y noise_amount * noisedegree 10
X np.linspace(0, 10, 100)
y f(X, noise_amount0.1)
clf_poly BayesianRidge()
clf_poly.fit(np.vander(X, degree), y)X_plot np.linspace(0, 11, 25)
y_plot f(X_plot, noise_amount0)
y_mean, y_std clf_poly.predict(np.vander(X_plot, degree), return_stdTrue)
plt.figure(figsize(6, 5))
plt.errorbar(X_plot, y_mean, y_std, colornavy,labelPolynomial Bayesian Ridge Regression, linewidthlw)
plt.plot(X_plot, y_plot, colorgold, linewidthlw,labelGround Truth)
plt.ylabel(Output y)
plt.xlabel(Feature X)
plt.legend(loclower left)
plt.show() 转载于:https://www.cnblogs.com/mtcnn/p/9412111.html