在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:
以上的这些问题,主要就是表现在模型的方差和偏差问题上,这样的关系可以通过下图说明:
(摘自:机器学习实战)
方差指的是模型之间的差异,而偏差指的是模型预测值和数据之间的差异。我们需要找到方差和偏差的折中。
在进行特征选择时,一般有三种方式:
,
通过确定的值可以使得在方差和偏差之间达到平衡:随着
的增大,模型方差减小而偏差增大。
对求导,结果为
令其为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
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