登录
首页精彩阅读简单易学的机器学习算法—岭回归(Ridge Regression)
简单易学的机器学习算法—岭回归(Ridge Regression)
2017-03-24
收藏

简单易学的机器学习算法—岭回归(Ridge Regression)

一、一般线性回归遇到的问题
    在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:
预测精度:这里要处理好这样一对为题,即样本的数量和特征的数量
时,最小二乘回归会有较小的方差
时,容易产生过拟合
时,最小二乘回归得不到有意义的结果
模型的解释能力:如果模型中的特征之间有相互关系,这样会增加模型的复杂程度,并且对整个模型的解释能力并没有提高,这时,我们就要进行特征选择。
以上的这些问题,主要就是表现在模型的方差和偏差问题上,这样的关系可以通过下图说明:

(摘自:机器学习实战)
方差指的是模型之间的差异,而偏差指的是模型预测值和数据之间的差异。我们需要找到方差和偏差的折中。
二、岭回归的概念
    在进行特征选择时,一般有三种方式:
子集选择
收缩方式(Shrinkage method),又称为正则化(Regularization)。主要包括岭回归个lasso回归。
维数缩减
    岭回归(Ridge Regression)是在平方误差的基础上增加正则项

通过确定的值可以使得在方差和偏差之间达到平衡:随着的增大,模型方差减小而偏差增大。
    对w求导,结果为

令其为0,可求w得的值:

三、实验的过程
    我们去探讨一下取不同的对整个模型的影响。

MATLAB代码
主函数
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
%% 岭回归(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  

岭回归求回归系数的函数
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
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 = temp^(-1)*x'*y;  
end 

数据分析咨询请扫描二维码

客服在线
立即咨询