山东大学机器学习(实验三内容)——正则化

1. 描述

在这个练习中,你将实现正则化的线性回归和正则化的逻辑回归。

2. 数据

首先,下载data3.zip和从压缩文件中提取文件。这个数据包包含两组数据,一组用于线性回归(ex3Linx.dat和ex3Liny.dat),另一个用于逻辑回归(x3Logx.dat和ex3Logy.dat)。还包含一个名为"map_feature"的辅助函数。将用于逻辑回归。确保这个函数的m文件位于您计划编写代码的相同工作目录中。

3. 正则化线性回归

本练习第一部分着重于正规线性回归和正规方程。加载数据文件"ex3Linx.dat"和"ex3Liny.dat"。在你的程序中,这对应你要开始的变量x和y。注意,在这个数据中,输入"x"是一个单独的特征,因此你可以将y作为x的函数绘制在二维图上(你可以自己尝试):从这个图上可以看出来,拟合直线可能过于简单。相反,我们将尝试对数据拟合一个高阶多项式,以捕捉更多点的变化。
  我们试试五阶多项式。我们的假设是
(1) h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 + θ 5 x 5 h _ { \theta } ( x ) = \theta _ { 0 } + \theta _ { 1 } x + \theta _ { 2 } x ^ { 2 } + \theta _ { 3 } x ^ { 3 } + \theta _ { 4 } x ^ { 4 } + \theta _ { 5 } x ^ { 5 } \tag{1} hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4+θ5x5(1)
这意味着有六个特征的假设,因为 x 0 , x 1 , … , x 5 x_0,x_1,\dots,x_5 x0,x1,,x5是我们回归的所以特征。注意,即使我们得到了一个多项式拟合,我们仍有一个线性回归的问题因为每个特征的假设都是线性的。
  由于我们将一个5阶多项式拟合到一个只有7个点的数据集,因此很可能出现过拟合。为了防止这种情况,我们将在模型中使用正则化。回想一下正则化问题,目标是最小化关于 θ \theta θ的代价函数
(2) J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J ( \theta ) = \frac { 1 } { 2 m } \left[ \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) ^ { 2 } + \lambda \sum _ { j = 1 } ^ { n } \theta _ { j } ^ { 2 } \right] \tag{2} J(θ)=2m1[i=1m(hθ(x(i))y(i))2+λj=1nθj2](2)

其中 λ \lambda λ是正则化参数。正则化参数 λ \lambda λ是控制在你的拟合参数。随着拟合参数的增大,对成本函数的惩罚也会增大,这个点球是依赖于参数的平方以及 λ \lambda λ的大小。同时,求和后 λ \lambda λ不包括 θ 0 2 \theta_0^2 θ02
  现在,我们将使用正规方程找到模型的最佳参数。回想一下正则化线性回归的正规方程解是
θ = ( X T X + λ [ 0 1 ⋱ 1 ] ) − 1 X T y ⃗ \theta = ( X ^ { T } X + \lambda \left[ \begin{array} { c c c c } { 0 } & { } & { } \\ { } & { 1 } & { } \\ { } & { } & { \ddots } & { } \\ { } & { } & { } & { 1 } \end{array} \right] ) ^ { - 1 } X ^ { T } \vec { y } θ=(XTX+λ011)1XTy
跟在 λ \lambda λ后的矩阵是一个左上角一个0和剩余对角线元素为1的对角(n+1)×(n+1)矩阵(记住,n是特征的数量)。向量 y y y和矩阵 X X X对于非正则回归有相同的定义。
  使用这个方程,找出使用以下三个正则化参数 θ \theta θ的值

  1. λ = 0 \lambda=0 λ=0
  2. λ = 1 \lambda=1 λ=1
  3. λ = 10 \lambda=10 λ=10
    当你实现你的程序时,请记住, X X X是一个 m × ( n + 1 ) m \times (n+1) m×(n+1)矩阵,因为有 m m m个训练样本和 n n n个特征,加上一个 x 0 = 1 x_0 = 1 x0=1的截距项。在提供给这个练习的数据中,你只是给出 x x x的一次方。你需要在你的向量 X X X中给出其它 x x x的平方,这意味着 X X X的第一列都是1,第二列是 x x x的一次方,第三列是 x x x的二次方,依次进行下去。你可以使用Matlab/Octave命令如下
x = [ones(m,1),x,x.^2,x.^3,x.^4,x.^5];

显示在不同 λ \lambda λ θ \theta θ的值。同时,画出不同 λ \lambda λ对应的多项式图像。例如,如果 λ = 0 \lambda=0 λ=0会得到和图2类似。从这些结果中,你能了解正则化参数 λ \lambda λ是如何影响你的模型的吗?

4. 正则化逻辑回归

在练习的第二部分中,你将使用牛顿方法实现正则逻辑回归。首先,在你的程序中加载文件ex3Logx.dat和ex3Logy.dat。该数据表示具有两个特征的逻辑回归问题的训练集。为了避免后面的混淆,我们将引用"ex3Logx.dat"中包含的两个输入特性作为u和v。所以在"ex3Logx.dat"文件中,第一列的数字代表特征u,在横轴上绘制,第二列特征代表v,在纵轴上绘制。
  加载数据后,使用不同的标记绘制点,以区分两种分类。Matlab/Octave中的命令为

x = load('ex3Logx.dat');
y = load('ex3Logy.dat');
figure
%Find the indices for the 2 calsses
pos = find(y == 1); neg = find(y == 0);
plot(x(pos,1),x(pos,2),'+');
hold on
plot(x(neg,1),x(neg,2),'+');

绘制完图片后,应该是这样的:

现在我们将为这些数据拟合一个规范化的回归模型。回想一下,在Logistic回归中,假设函数为
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x = P ( y = 1 ∣ x ; θ ) h _ { \theta } ( x ) = g \left( \theta ^ { T } x \right) = \frac { 1 } { 1 + e ^ { - \theta ^ { T } x } } = P ( y = 1 | x ; \theta ) hθ(x)=g(θTx)=1+eθTx1=P(y=1x;θ)
在这次练习中,我们将分配 x x x的所有单项(即多项式计算)的u和v的6次方:
x = [ 1 u v u 2 u v v 2 u 3 ⋮ u v 5 v 6 ] x = \left[ \begin{array} { c } { 1 } \\ { u } \\ { v } \\ { u ^ { 2 } } \\ { u v } \\ { v ^ { 2 } } \\ { u ^ { 3 } } \\ { \vdots } \\ { u v ^ { 5 } } \\ { v ^ { 6 } } \end{array} \right] x=1uvu2uvv2u3uv5v6

为了澄清这个符号,我们做了一个28个特征的向量 x x x,其中 x 0 = 1 , x 2 = v , … , x 28 = v 6 x_0=1,x_2=v,\dots,x_{28}=v^6 x0=1,x2=v,,x28=v6。记住,u是在"ex3Logx.dat"中的第一列数字,v是第二列。从现在开始,我们把 x x x的元素记作 x 0 , x 1 x_0,x_1 x0,x1等等,而不是它们的值用u和v表示。
  为了避免枚举所有 x x x项的麻烦,我们包含了一个Matlab/Octave辅助函数,名为"map_feature",它将原始数据映射到特征向量。这个函数使用于单个训练示例,也适用于整个训练示例。为了使用这个函数,将"map_feature.m"放在你的工作目录中

x = map_feature(u,v)

假设这两个原始特征存储在名为"u"和"v"的列向量中。如果只有一个训练示例,那么每个列向量都是标量。函数将输出存储在"x"中的新的特征数组。当然,您可以为参数和输出使用任何你想要的名称。只要确保两个参数是相同大小的列向量即可。
  在建立这个模型之前,回想一下我们的目标是最小化正则化逻辑回归的最小代价函数:
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J ( \theta ) = - \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left[ y ^ { ( i ) } \log \left( h _ { \theta } \left( x ^ { ( i ) } \right) \right) + \left( 1 - y ^ { ( i ) } \right) \log \left( 1 - h _ { \theta } \left( x ^ { ( i ) } \right) \right) \right] + \frac { \lambda } { 2 m } \sum _ { j = 1 } ^ { n } \theta _ { j } ^ { 2 } J(θ)=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]+2mλj=1nθj2
注意,这看起来像非正则逻辑回归的成本函数,除了最后有一个正则项。现在我们用牛顿法求这个函数的最小值。回想一下牛顿方法的更新规则是
θ ( t + 1 ) = θ ( t ) − H − 1 ∇ θ J \theta ^ { ( t + 1 ) } = \theta ^ { ( t ) } - H ^ { - 1 } \nabla _ { \theta } J θ(t+1)=θ(t)H1θJ
这与练习4中用于非正则逻辑回归的规则相同,但因为你现在实现正则化,梯度 ∇ θ J \nabla_\theta J θJ和海森矩阵 H H H 有不同的形式
(3) ∇ θ J = [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 1 ( i ) + λ m θ 1 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 2 ( i ) + λ m θ 2 ⋮ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x n ( i ) + λ m θ n ] \nabla _ { \theta } J = \left[ \begin{array} { c } { \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) x _ { 0 } ^ { ( i ) } } \\ { \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) x _ { 1 } ^ { ( i ) } + \frac { \lambda } { m } \theta _ { 1 } } \\ { \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) x _ { 2 } ^ { ( i ) } + \frac { \lambda } { m } \theta _ { 2 } } \\ { \vdots } \\ { \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) x _ { n } ^ { ( i ) } + \frac { \lambda } { m } \theta _ { n } } \end{array} \right] \tag{3} θJ=m1i=1m(hθ(x(i))y(i))x0(i)m1i=1m(hθ(x(i))y(i))x1(i)+mλθ1m1i=1m(hθ(x(i))y(i))x2(i)+mλθ2m1i=1m(hθ(x(i))y(i))xn(i)+mλθn(3)
(4) H = 1 m [ ∑ i = 1 m h θ ( x ( i ) ) ( 1 − h θ ( x ( i ) ) ) x ( i ) ( x ( i ) ) T ] + λ m [ 0 1 ⋱ 1 ] H = \frac { 1 } { m } \left[ \sum _ { i = 1 } ^ { m } h _ { \theta } \left( x ^ { ( i ) } \right) \left( 1 - h _ { \theta } \left( x ^ { ( i ) } \right) \right) x ^ { ( i ) } \left( x ^ { ( i ) } \right) ^ { T } \right] + \frac { \lambda } { m } \left[ \begin{array} { c c c c } { 0 } & { } & { } \\ { } & { 1 } & { } \\ { } & { } & { \ddots } & { } \\ { } & { } & { } & { 1 } \end{array} \right] \tag{4} H=m1[i=1mhθ(x(i))(1hθ(x(i)))x(i)(x(i))T]+mλ011(4)
注意,如果你把 λ = 0 \lambda = 0 λ=0代入这些表达式,您将看到和非正则化逻辑回归有相同的公式,在这些公式中,

  1. x ( i ) x^{(i)} x(i)是你的特征向量,在这个练习中这是一个28×1的向量。
  2. ∇ θ J \nabla_\theta J θJ是28×1的向量。
  3. x ( i ) ( x ( i ) ) T x^{(i)}(x^{(i)})^T x(i)(x(i))T H H H是28×28的矩阵。
  4. y ( i ) y^{(i)} y(i) h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i))是标量。
  5. λ m \frac{\lambda}{m} mλ后面的矩阵在海森公式中是一个左上角一个0和剩余对角线元素为1的对角28×28矩阵。

  现在在这个数据集上使用如下的 λ \lambda λ值运行牛顿法
a. λ = 0 \lambda = 0 λ=0(这是和非正则化线性回归相同的例子)
b. λ = 1 \lambda = 1 λ=1
c. λ = 10 \lambda = 10 λ=10
打印每次迭代中的 J ( θ ) J(\theta) J(θ)值,为了确定牛顿法是否已经收敛。 J ( θ ) J(\theta) J(θ)不应该在使用牛顿法中的任何时候都减少,如果是,检查你是否正确定义了 J ( θ ) J(\theta) J(θ),还要检查梯度和海森的定义,以确保正则化部分没有错误。
  收敛后,用 θ \theta θ的值找出分类问题中的决策边界。决策边界定义为其中的直线
P ( y = 1 ∣ x ; θ ) = 0.5 ⟹ θ T x = 0 P ( y = 1 | x ; \theta ) = 0.5 \quad \Longrightarrow \quad \theta ^ { T } x = 0 P(y=1x;θ)=0.5θTx=0

在此处绘制决策边界比在线性回归中绘制最佳拟合曲线更为棘手。您需要通过绘制轮廓来绘制 θ T x = 0 \theta^Tx = 0 θTx=0线的隐含性。这可以通过在表示原始u和v输入的点网格上 θ T x \theta^Tx θTx值,然后绘制 θ T x \theta^Tx θTx值为零的线来完成。使用以下代码在 θ \theta θ的不同值下绘制决策边界。

% Define the ranges of the grid
u = linspace (-1 , 1.5 , 200);
v = linspace (-1 , 1.5 , 200);
% Initialize space for the values to be plotted
z = zeros (length (u) , length (v)) ;
% Evaluate z = theta*x over the grid
for i = 1 : length (u)
	for j = 1 : length (v)
		% Notice the order of j , i here!
		z (j,i) = map_feature (u(i) , v(j))*theta ;
	end
end
% Because of the way that contour plotting works
% in Matlab , we need to transpose z , or
% else the axis orientation will be flipped!
z = z '
% Plot z = 0 by specifying the range [0 , 0]
contour (u , v , z , [0 , 0] , ' LineWidth ' , 2)

最后,因为有28个元素 θ \theta θ,我们不会提供一个解决方案中的元素比较。相反,使用norm( θ \theta θ)来计算 θ \theta θ的L2范数,检查它的标准解决方案。 λ \lambda λ是如何影响结果的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值