注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

HT·生活

123

 
 
 

日志

 
 

Regularized logistic regression  

2015-06-02 18:37:32|  分类: Deep Learning |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

既然有正则化的线性回归,那么对于LR会不会也有过拟合的现象,答案是肯定的。为了让LR也能陷入过拟合的区域,我们需要给出RLR的表达形式。先提一下这里用到的数据,x是二维的,y是label,这些数据的散点图是线性不可分的,所以需要进行空间投影变换。这里用利用LR回归将数据投影到更高维的空间上(因为你当前维度都分不开,低维肯定分不开),至于基函数怎么选,是题目给好的,而实际中需要自己试验。LR回归模型如下

而投影变换过程如下,采用多项式基函数,原有的二维变量,映射为28维

加入规则"惩罚"项后的系统损失函数如下

这是标量的表示方式,和正则线性回归几乎一样,如果使用牛顿法进行参数更新,更新过程如下

同样为了求出超平面,需要令

反解即可求得。这里测试lamda = 0 1 10对LR过程的影响。

原始散点图

可以看到它是线性不可分的,如果我们采用RLR,lamda =0 1 10的划分情况。代码如下(来自standford的网页)

% Exercise 5 -- Regularized Logistic Regression

clear all; close all; clc

x = load('ex5Logx.dat');
y = load('ex5Logy.dat');


% Plot the training data
% Use different markers for positives and negatives
figure
pos = find(y); neg = find(y == 0);
plot(x(pos, 1), x(pos, 2), 'k+','LineWidth', 2, 'MarkerSize', 7)
hold on
plot(x(neg, 1), x(neg, 2), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7)


% Add polynomial features to x by
% calling the feature mapping function
% provided in separate m-file
x = map_feature(x(:,1), x(:,2));

[m, n] = size(x);

% Initialize fitting parameters
theta = zeros(n, 1);

% Define the sigmoid function
g = inline('1.0 ./ (1.0 + exp(-z))');

% setup for Newton's method
MAX_ITR = 15;
J = zeros(MAX_ITR, 1);

% Lambda is the regularization parameter
lambda = 10;

% Newton's Method
for i = 1:MAX_ITR
% Calculate the hypothesis function
z = x * theta;
h = g(z);

% Calculate J (for testing convergence)
J(i) =(1/m)*sum(-y.*log(h) - (1-y).*log(1-h))+ ...
(lambda/(2*m))*norm(theta([2:end]))^2;

% Calculate gradient and hessian.
G = (lambda/m).*theta; G(1) = 0; % extra term for gradient
L = (lambda/m).*eye(n); L(1) = 0;% extra term for Hessian
grad = ((1/m).*x' * (h-y)) + G;
H = ((1/m).*x' * diag(h) * diag(1-h) * x) + L; %海森矩阵

% Here is the actual update
theta = theta - H\grad;

end
% Show J to determine if algorithm has converged
J
% display the norm of our parameters
norm_theta = norm(theta)

% Plot the results
% We will evaluate theta*x over a
% grid of features and plot the contour
% where theta*x equals zero

% Here is the grid range
u = linspace(-1, 1.5, 200);
v = linspace(-1, 1.5, 200);

z = zeros(length(u), length(v));
% Evaluate z = theta*x over the grid
for i = 1:length(u)
for j = 1:length(v)
z(i,j) = map_feature(u(i), v(j))*theta;
end
end
z = z'; % important to transpose z before calling contour

% Plot z = 0
% Notice you need to specify the range [0, 0]
contour(u, v, z, [0, 0], 'LineWidth', 2); %画出 高度为0等高线,就是我们需要的超平面
legend('y = 1', 'y = 0', 'Decision boundary')
title(sprintf('\\lambda = %g', lambda), 'FontSize', 14)


hold off

% Uncomment to plot J
% figure
% plot(0:MAX_ITR-1, J, 'o--', 'MarkerFaceColor', 'r', 'MarkerSize', 8)
% xlabel('Iteration'); ylabel('J')



 

可以看到lamda=0的时候过拟合了,而lamda =10的时候精度太差了。所以选择1 是一个不错正则项。

 

参考

http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex5/ex5.html

http://www.cnblogs.com/tornadomeet/archive/2013/03/17/2964858.html

  评论这张
 
阅读(34)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017