机器学习小白修炼之路---正则化技术

机器学习基本算法之正则化技术

本文图片都是吴恩达的机器学习课程上的截图。

数据集下载

前几篇文章的数据集下载连接:

click

提取码:3ryg

线性回归模型 正则化

下图中的第一个曲线:拟合效果并不理想,这种数据集的分布用线性的回归函数并不好,而应当采用多项式的回归函数。
下图中的第二个曲线:在当前数据看来,拟合效果可以说是非常精确了,而且就算增加数据点,该回归函数在这个模型表现上应该也不错。
下图中的第三个曲线:尽管在当前数据看来,这条回归函数的曲线经过了所有点。但是一旦加多数据点,该模型的拟合能力可能会表现得很糟糕,造成这种情况出现最本质的原因是数据量少,而回归函数的特征点多。这必然导致回归函数过拟合,使得模型的泛化能力不强,根本无法迁移到针对新的size,预测房价上面去。
在这里插入图片描述

lambda选取的太大,也会导致测试集上的loss值偏大。
costFunctionJ_regression.m文件修改:

	...
	lambda=80;     %自定义系数,尽量大,但也不能太大
	theta_square=theta.^2;
    regularization=lambda*sum(theta_square(2:end));   %正则化的偏置项
    J=1/(2*m)*(sum(sqrErrors)+regularization);
    grad=(x*theta-y)'*x+theta'*lambda;
    ...  

效果:
在这里插入图片描述

逻辑回归模型 正则化

下图中的第一个曲线:拟合效果并不理想。
下图中的第二个曲线:在当前数据看来,拟合效果可以说是非常精确了,而且就算增加数据点,该回归函数在这个模型表现上应该也不错。
下图中的第三个曲线:尽管在当前数据看来,这条回归函数的曲线经过了所有点。但是一旦加多数据点,该模型的拟合能力可能会表现得很糟糕。
在这里插入图片描述

costFunctionJ_classification.m文件修改:

	...
	lambda=80;
    theta_square=theta.^2;
    J=1/m*sum(-y.*(log(sigmoid(x*theta))-(1-y).*log(1-sigmoid(x*theta))))+lambda/(2*m)*sum(theta_square(2:end));
    grad =(sigmoid(x*theta)-y)'*x+lambda/m*theta';
    ...

效果:
在这里插入图片描述

原理简述

解决过拟合的方法

在这里插入图片描述
1、减少特征点数量;
2、引入正则化技术。

代码 简述

因为我们不知道要将具体哪几个特征点的权重给放缩到很小,因此我们采用将所有的权重点都给缩放。缩放方式就是在权重点集的前面乘以一个较大的lambda的常量再除以2*样本的个数,loss函数里面加上刚刚的结果。我们也可以随时调节其大小来影响最后的效果。
梯度下降法里面就根据loss函数对权重求偏导推导即可。
在这里插入图片描述

线性回归的正规方程实现

在这里插入图片描述
line_regression.m文件:

function theta_new = line_regression(  )
    x=load('D:\machineLearning\线性回归\ex3Data\ex3x.dat');
    y=load('D:\machineLearning\线性回归\ex3Data\ex3y.dat');
    n=length(x(1,:));
    m=length(x(:,1));    %样本数
    x(:,1)=(x(:,1)-mean(x(:,1)))./std(x(:,1));  %特征缩放  mean表示某个特征值中的平均值,std表示某个特征值中的标准差(除数也可以是max-min)
    x(:,2)=(x(:,2)-mean(x(:,2)))./std(x(:,2));
    d_x1=-2:0.1:6;
    d_x2=-2:0.1:6;
    x=[ones(m,1), x];  %x0为1
    plot3(x(:,2),x(:,3),y,'r*');
    hold on;
    theta=[0 0 0];
    theta_new=pinv(x'*x)*x'*y;      %正规方程
    d_y=theta_new(1)+theta_new(2)*d_x1+theta_new(3)*d_x2;
    plot3(d_x1, d_x2, d_y, 'k');
    title('fitted curve');
end


效果:
在这里插入图片描述

线性回归的正规方程 正则化技术实现

在这里插入图片描述
样本数小于等于特征数只是X的转置矩阵乘以X矩阵不可逆的充分条件,证明如下:
在这里插入图片描述

line_regression.m文件:

function theta_new = line_regression(  )
    x=load('D:\machineLearning\线性回归\ex3Data\ex3x.dat');
    y=load('D:\machineLearning\线性回归\ex3Data\ex3y.dat');
    n=length(x(1,:));
    m=length(x(:,1));    %样本数
    lambda=80;
    x(:,1)=(x(:,1)-mean(x(:,1)))./std(x(:,1));  %特征缩放  mean表示某个特征值中的平均值,std表示某个特征值中的标准差(除数也可以是max-min)
    x(:,2)=(x(:,2)-mean(x(:,2)))./std(x(:,2));
    d_x1=-2:0.1:6;
    d_x2=-2:0.1:6;
    x=[ones(m,1), x];  %x0为1
    plot3(x(:,2),x(:,3),y,'r*');
    hold on;
    theta=[0 0 0];
    temp=zeros(n+1);
    temp(1,1)=1;
    p=eye(n+1)-temp;
    theta_new=pinv(x'*x+lambda*p)*x'*y;      %正规方程 正则化技术
    d_y=theta_new(1)+theta_new(2)*d_x1+theta_new(3)*d_x2;
    plot3(d_x1, d_x2, d_y, 'k');
    title('fitted curve(after Regularization)');
end


效果:
在这里插入图片描述

总结

正则化技术就是应用于特征选择上,选出影响因子大的特征点集。纯属小白个人见解,有问题希望大家指出,多多指教!!!

发布了33 篇原创文章 · 获赞 5 · 访问量 2304

猜你喜欢

转载自blog.csdn.net/cj1561435010/article/details/100826993