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

HT·生活

123

 
 
 

日志

 
 

Logistic Regression  

2015-06-02 16:46:05|  分类: Deep Learning |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

LR是线性回归的一个变种,一般来说线性回归的话用于解决连续的状态预测问题,而LR天然具备分类的能力0-1.先说一下这里用到的例子,数据集合中有两个属性和一个label,两个属性是学生的两门课的成绩,label就是是否他能上大学。对于label,其实就是正负样本,0表示负样本,1表示正样本。下面是LR回归中的模型

模型最终把预测结果划到0-1范围内,是一个概率表现,其cost函数和普通的线性回归形式上有了一点儿变化,和以前学过的极大似然估计一样的。

而使用牛顿法计算参数更新,需要用到海森矩阵,各项表达式如下所示

这是普通的标量表达式,程序中会用向量的形式表达,另外,我们进行0-1分类,其实也就找到一个合适的超平面尽可能地将所有的数据分正确(当然这是不可能),所以最后我们要给出一个超平面来划分。这里是二维属性,所以就是一条线,怎么求呢!就是令第一个公式等于0.5,因为我们最后预测的时候大于0.5向上,小于0.5的向下,也就是

反解这个公式就可以得到我们所需要的超平面了。源代码加了一点儿注释

% Exercise 4 -- Logistic Regression

clear all; close all; clc

x = load('ex4x.dat');
y = load('ex4y.dat');

[m, n] = size(x);

% Add intercept term to x
x = [ones(m, 1), x];

% Plot the training data
% Use different markers for positives and negatives
figure
pos = find(y); neg = find(y == 0);
%就是找正样本和负样本 pos = find(y)等价于 pos = find(y==1)
%find是找到的一个向量,其结果是find函数括号值为真时的值的编号
plot(x(pos, 2), x(pos,3), '+')
hold on
plot(x(neg, 2), x(neg, 3), 'o')
hold on
xlabel('Exam 1 score')
ylabel('Exam 2 score')


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

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

% Newton's method
MAX_ITR = 7; %迭代次数为7
J = zeros(MAX_ITR, 1);

for i = 1:MAX_ITR
% Calculate the hypothesis function
z = x * theta;
h = g(z);%转换成logistic函数

% Calculate gradient and hessian.
% The formulas below are equivalent to the summation formulas
% given in the lecture videos.
grad = (1/m).*x' * (h-y);%梯度的矢量表示法
H = (1/m).*x' * diag(h) * diag(1-h) * x;%hessian矩阵的矢量表示法

% Calculate J (for testing convergence)
J(i) =(1/m)*sum(-y.*log(h) - (1-y).*log(1-h));%损失函数的矢量表示法

theta = theta - H\grad; %H要求逆
end
% Display theta
theta

% Calculate the probability that a student with
% Score 20 on exam 1 and score 80 on exam 2
% will not be admitted
prob = 1 - g([1, 20, 80]*theta)

%画出分界面
% Plot Newton's method result
% Only need 2 points to define a line, so choose two endpoints
plot_x = [min(x(:,2))-2, max(x(:,2))+2];
% Calculate the decision boundary line,plot_y 反解超平面
plot_y = (-1./theta(3)).*(theta(2).*plot_x +theta(1));
plot(plot_x, plot_y)
legend('Admitted', 'Not admitted', 'Decision Boundary')
hold off

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


数据分布和超平面

迭代次数和损失函数

参考

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

http://www.cnblogs.com/tornadomeet/archive/2013/03/16/2963919.html

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

历史上的今天

评论

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

页脚

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