# Ridge Regression and Bayesian Regression 学习笔记
来源:互联网 发布:怎样做淘宝店铺推广 编辑:程序博客网 时间:2024/06/05 05:42
Ridge Regression
概念
- 数学形式及解读
给定数据集
当样本特征很多,而样本数相对较少时,上式很容易陷入过拟合,为缓解过拟合问题,对上式引入正则化项,若使用
其中正则化参数
- 算法适用范围
岭回归最先用来处理特征数多于样本数的情况,现在也用于在估计中加入偏差,从而得到更好的估计。这里通过引入
- 岭回归中的岭是什么?
岭回归使用了单位矩阵乘以常量λ ,我们观察其中的单位矩阵I,可以看到值I贯穿整个对角线,其余元素全是0,形象地,在0构成的平面上有一条1组成的“岭”,这就是岭回归中的“岭”的由来。
缩减方法可以去掉不重要的参数,因此能更好地理解数据。此外,与简单的线性回归相比,缩减法能取得更好的预测效果。
2. 算法代码
简单来说,岭回归就是在矩阵
公式推导
#岭回归def ridgeRegress(xMat,yMat,lam = 0.2) #lambda = 0.2 xTx = xMat.T*xMat denom = xTx + eye(shape(xMat)[1]*lam if linalg.set(denom) == 0.0: print "This matrix id singular, cannot do inverse" return ws = denom.I*(xMat.T*yMat) return wsdef ridgeTest(xArr,yArr): xMat = mat(xArr) yMat = mat(yArr).T yMean = mean(yMat,0) yMat = yMat - yMean XMeans = mean(xMat,0) xVar = var(xMat,0) xMat = (xMat - xMeans)/xVar #以上步骤为标准化 numTestPts = 30 #30个lambda wMat = zeros((numTestPts,shape(xMat)[1])) for i in range(numTestPts): ws = ridgeRegress(xMat,yMat,lam = exp(i-10)) wMat[i:] = ws.T return wMat #这样可以看出lambda在取非常小的值时和取非常大的值时分别对结果造成的影响
在sklearn中的文档代码:
import numpy as npimport matplotlib.pyplot as pltfrom sklearn import linear_model# X is the 10x10 Hilbert matrix#生成数据X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])y = np.ones(10)# print(X)# print(y)n_alphas = 200 #lambdaalphas = np.logspace(-10, -2, n_alphas) #从-10到-2两百个数clf = linear_model.Ridge(fit_intercept=False)#初定义,不需要截距coefs = []for a in alphas: clf.set_params(alpha=a) clf.fit(X, y) coefs.append(clf.coef_)#10个因子plt.figure(figsize=(10,8))ax = plt.gca()#gca() returns the current axesax.plot(alphas, coefs)ax.set_xscale('log')#注意这一步,alpha是对数化了的ax.set_xlim(ax.get_xlim()[::-1]) # reverse axisplt.xlabel('alpha')plt.ylabel('weights')plt.title('Ridge coefficients as a function of the regularization')plt.axis('tight')#图边界的设置plt.show()
得到结果
Bayesian Regression
1.概念
贝叶斯回归
贝叶斯线性回归的引入主要是在最大似然估计很难决定模型的复杂程度,ridge回归加入的惩罚参数其实也是解决这个问题的,同时可以采用的方法还有对数据的进行正规化处理,另一个可以解决此问题的方法就是采用贝叶斯方法。
贝叶斯回归模型假设先验概率,似然函数和后验概率都是正态分布。先验概率是假设模型输出Y是符合均值为
- 贝叶斯方法中,控制模型参数分布的参数,被称为超参数(可以理解为参数的参数,因为参数本身符合一个分布,而这个分布中的参数就是超参数)
贝叶斯回归的优点
- 它适应于手上拥有的数据
- 在估计的过程中可以加上正则化参数
贝叶斯回归的缺点
模型的参数估计耗费时间较长
- Bayesian Ridge Regression
回归系数w的先验分布规律为球形正态分布,超参数为λ 。我们需要通过最大化边际似然函数来估计超参数α 和λ ,以及回归系数w。p(w|λ)=N(w|0,λ−1Ip) α 和λ 的先验概率被选择为gamma分布.这些先验常常是无信息的,我们需要通过最大化边际似然函数来估计。
- Bayesian Ridge Regression
3.算法适用
如果我们的数据有很多缺失或者矛盾的病态数据,可以考虑BayesianRidge类,它对病态数据鲁棒性很高,也不用交叉验证选择超参数。但是极大化似然函数的推断过程比较耗时,一般情况不推荐使用。
- 计算机科学中,健壮性(英语:Robustness)是指一个计算机系统在执行过程中处理错误,以及算法在遭遇输入、运算等异常时继续正常运行的能力。
代码实现
import numpy as npimport matplotlib.pyplot as pltfrom 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 #一共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 interestrelevant_features = np.random.randint(0, n_features, 10) #只选取10个特征有值for i in relevant_features: w[i] = stats.norm.rvs(loc=0, scale=1. / np.sqrt(lambda_))# Create noise with a precision alpha of 50.alpha_ = 50.noise = stats.norm.rvs(loc=0, scale=1. / np.sqrt(alpha_), size=n_samples)# Create the targety = np.dot(X, w) + noise
Fit the Bayesian Ridge Regression and an ordinary least squares for comparison
clf = BayesianRidge(compute_score=True) #贝叶斯回归估计clf.fit(X, y)ols = LinearRegression() #线性估计ols.fit(X, y)
- # Ridge Regression and Bayesian Regression 学习笔记
- scikit-learn : Bayesian Ridge Regression
- Regularization and Ridge Regression
- ridge regression
- Ridge Regression
- Ridge regression
- ridge regression
- 机器学习笔记——岭回归(Ridge Regression)
- scikit-learn学习笔记(四)Ridge Regression ( 岭回归 )
- Lasso regression 和 Ridge Regression
- 机器学习-Ridge Regression岭回归
- scikit-learn学习:岭回归,ridge regression
- Ridge Regression岭回归
- ridge regression岭回归
- Ridge Regression岭回归
- ridge regression岭回归
- Ridge Regression - 岭回归
- Ridge Regression 岭回归
- JavaScript之语句
- 242. Valid Anagram
- 第二章:嵌入式QT --多语言
- web.xml报错
- Docker中集成bazel
- # Ridge Regression and Bayesian Regression 学习笔记
- Spark On YARN启动流程源码分析
- 微信公众号支付详细步骤(整理)
- 奇怪,,为什么会有这么简单的错误,,初次使用腾讯云服务器创建网站
- 如何用button触发fileupload控件的click事件
- CetnOs6.7安装CDH5.4.1手记--Hadoop(1)
- python中OS模块的常用命令
- 160
- Ubuntu下搭建简单的nginx文件服务器