简单易学的机器学习算法——岭回归(Ridge Regression)
来源:互联网 发布:网络机顶盒怎么看电视 编辑:程序博客网 时间:2024/05/16 05:16
转载地址:http://blog.csdn.net/google19890102/article/details/27228279
一、一般线性回归遇到的问题
在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:
- 预测精度:这里要处理好这样一对为题,即样本的数量和特征的数量
- 时,最小二乘回归会有较小的方差
- 时,容易产生过拟合
- 时,最小二乘回归得不到有意义的结果
- 时,最小二乘回归会有较小的方差
- 模型的解释能力:如果模型中的特征之间有相互关系,这样会增加模型的复杂程度,并且对整个模型的解释能力并没有提高,这时,我们就要进行特征选择。
以上的这些问题,主要就是表现在模型的方差和偏差问题上,这样的关系可以通过下图说明:
(摘自:机器学习实战)
方差指的是模型之间的差异,而偏差指的是模型预测值和数据之间的差异。我们需要找到方差和偏差的折中。
二、岭回归的概念
在进行特征选择时,一般有三种方式:
- 子集选择
- 收缩方式(Shrinkage method),又称为正则化(Regularization)。主要包括岭回归个lasso回归。
- 维数缩减
岭回归(Ridge Regression)是在平方误差的基础上增加正则项
,
通过确定的值可以使得在方差和偏差之间达到平衡:随着的增大,模型方差减小而偏差增大。
对求导,结果为
令其为0,可求得的值:
三、实验的过程
我们去探讨一下取不同的对整个模型的影响。
MATLAB代码
主函数
- %% 岭回归(Ridge Regression)
- %导入数据
- data = load('abalone.txt');
- [m,n] = size(data);
- dataX = data(:,1:8);%特征
- dataY = data(:,9);%标签
- %标准化
- yMeans = mean(dataY);
- for i = 1:m
- yMat(i,:) = dataY(i,:)-yMeans;
- end
- xMeans = mean(dataX);
- xVars = var(dataX);
- for i = 1:m
- xMat(i,:) = (dataX(i,:) - xMeans)./xVars;
- end
- % 运算30次
- testNum = 30;
- weights = zeros(testNum, n-1);
- for i = 1:testNum
- w = ridgeRegression(xMat, yMat, exp(i-10));
- weights(i,:) = w';
- end
- % 画出随着参数lam
- hold on
- axis([-9 20 -1.0 2.5]);
- xlabel log(lam);
- ylabel weights;
- for i = 1:n-1
- x = -9:20;
- y(1,:) = weights(:,i)';
- plot(x,y);
- end
%% 岭回归(Ridge Regression)%导入数据data = load('abalone.txt');[m,n] = size(data);dataX = data(:,1:8);%特征dataY = data(:,9);%标签%标准化yMeans = mean(dataY);for i = 1:m yMat(i,:) = dataY(i,:)-yMeans;endxMeans = mean(dataX);xVars = var(dataX);for i = 1:m xMat(i,:) = (dataX(i,:) - xMeans)./xVars;end% 运算30次testNum = 30;weights = zeros(testNum, n-1);for i = 1:testNum w = ridgeRegression(xMat, yMat, exp(i-10)); weights(i,:) = w';end% 画出随着参数lamhold onaxis([-9 20 -1.0 2.5]);xlabel log(lam);ylabel weights;for i = 1:n-1 x = -9:20; y(1,:) = weights(:,i)'; plot(x,y);end
岭回归求回归系数的函数
- function [ w ] = ridgeRegression( x, y, lam )
- xTx = x'*x;
- [m,n] = size(xTx);
- temp = xTx + eye(m,n)*lam;
- if det(temp) == 0
- disp('This matrix is singular, cannot do inverse');
- end
- w =
0 0
- 简单易学的机器学习算法——岭回归(Ridge Regression)
- 简单易学的机器学习算法——岭回归(Ridge Regression)
- 机器学习算法——岭回归(Ridge Regression)
- 机器学习算法(回归算法)—岭回归(Ridge Regression)
- 简单易学的机器学习算法——Softmax Regression
- 简单易学的机器学习算法——Softmax Regression
- 简单易学的机器学习算法——Softmax Regression
- 简单易学的机器学习算法——Softmax Regression
- 机器学习笔记——岭回归(Ridge Regression)
- 简单易学的机器学习算法——Logistic回归
- 机器学习-Ridge Regression岭回归
- 机器学习基础(三十一)—— 岭回归(Ridge Regression)到 LASSO
- 机器学习(5)——回归算法:有偏估计回归方法(ridge regression & Lasso Regressio)
- 简单易学的机器学习算法——线性回归(1)
- 简单易学的机器学习算法——线性回归(2)
- 简单易学的机器学习算法——分类回归树CART
- 简单易学的机器学习算法——Apriori算法
- 简单易学的机器学习算法——Apriori算法
- 字母重排
- poj3071(概率dp)
- Python安装模块出错(ImportError: No module named setuptools)解决方法
- 异常的应用实例
- lua之table
- 简单易学的机器学习算法——岭回归(Ridge Regression)
- UVa 208 - Firetruck(DFS判连通+回溯)
- IMAC键盘和鼠标部分功能键失效原因
- 数组中出现次数超过一半的数字
- 转一篇vim配置python环境的文章
- 脚本学习 sed awk 写 pidfind 从 ps -x 找到进程名的pid
- 从微信的成功看移动AppUI设计的精髓
- 在网上搜代码, 搜到了个卡带机的效果, 做的很好, 我改成beyond的歌曲
- POJ--1787--Charlie's Change--背包变形