吴恩达机器学习(六)逻辑回归

逻辑回归的应用对象

首先,最重要的是明白一个算法的应用对象。逻辑回归主要应用于分类问题。现实中分类问题有很多,简单的二分类:邮件中的垃圾邮件和非垃圾邮件;人中的男人和女人。多分类:自动驾驶中人、车、障碍物的识别;各种阻值不同的电阻识别。
对于特征较少分类问题,逻辑回归是一种有效的算法。当特征成百上千时,请选择神经网络。

逻辑回归的假设函数、目标函数、求解

假设函数

逻辑回归的假设函数定义为:
h θ ( x ) = 1 1 + e θ T x h_\theta(\boldsymbol x)=\frac{1}{1+e^{\boldsymbol\theta^T\boldsymbol x}} hθ(x)=1+eθTx1
上式中 θ \boldsymbol\theta θ x \boldsymbol x x均为列向量。假设函数不同是逻辑回归与线性回归的第一个不同点。
上式的概率解释 h θ ( y = 1 ∣ x ; θ ) h_\theta(y=1|\boldsymbol x;\theta) hθ(y=1x;θ)在参数 θ \theta θ确定的情况下,给出 x x x时, y = 1 y=1 y=1的概率。
上式的直观解释:假设已知一份邮件的特征为 x = [ 1 , 垃 圾 字 符 数 量 ] x=[1,垃圾字符数量] x=[1,],计算得到 h θ ( x ) = 0.7 h_\theta(\boldsymbol x)=0.7 hθ(x)=0.7,则说明该邮件为垃圾邮件的概率为 70 % 70\% 70%

目标函数

针对单个样本的目标函数为:
C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) , y = 1 , − l o g ( 1 − h θ ( x ) , y = 0 Cost(h_\theta(\boldsymbol x),y)=\begin{cases}-log(h_\theta(\boldsymbol x)), & y=1,\\ -log(1-h_\theta(\boldsymbol x), & y=0 \end{cases} Cost(hθ(x),y)={log(hθ(x)),log(1hθ(x),y=1,y=0
由于 y = 0 , 1 y=0,1 y=0,1故可将上式改写为
C o s t ( h θ ( x ) , y ) = − y ( i ) l o g ( h θ ( x ) ) − ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ) ) Cost(h_\theta(\boldsymbol x),y)=-y^{(i)}log(h_\theta(\boldsymbol x))-(1-y^{(i)})log(1-h_\theta(\boldsymbol x)) Cost(hθ(x),y)=y(i)log(hθ(x))(1y(i))log(1hθ(x))
所有样本的目标函数为
J ( θ ) = ∑ i = 1 m y ( i ) l o g ( h θ ( x ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ) ) J(\theta)=\sum^{m}_{i=1}y^{(i)}log(h_\theta(\boldsymbol x))+(1-y^{(i)})log(1-h_\theta(\boldsymbol x)) J(θ)=i=1my(i)log(hθ(x))+(1y(i))log(1hθ(x))
目标函数不同式逻辑回归和线性回归的第二个不同点。
为什么不选择和线性回归相同的目标函数?这是因为,由于逻辑回归的假设函数为非线性,选择线性回归的目标函数会出现太多的局部最优值,即目标函数非凸。凸函数最重要的性质就是其局部最小值为全局最小值

求解

利用梯度下降法可以得到:
θ j : = θ j − α ( ∑ i = 1 m ( h ( x j ( i ) ) − y ( i ) ) x j ( i ) ) \theta_j := \theta_j-\alpha(\sum_{i=1}^m(h(x^{(i)}_j)-y^{(i)})x^{(i)}_j) θj:=θjα(i=1m(h(xj(i))y(i))xj(i))
和线性回归的解相同,奇妙的数学。当然由于 h θ ( x ) h_\theta(\boldsymbol x) hθ(x)不同,和线性回归本质上还是不同。另外,需要强调,每个 θ \theta θ应同步更新

例子

%% 逻辑回归二元分类问题
% 作者:sddfsAv
% 日期:20190409
% 软件:Octave5.1.0
% 简介:吴恩达机器学习课程逻辑回归应用举例,数据集采用x+randn()自动生成
clear
clc

%% 导入原始数据
load('data1.mat');
load('data2.mat');
scatter(class1(:,1),class1(:,2),70,'MarkerEdgeColor',[.8 .6 .1],...
              'MarkerFaceColor',[.8 .6 .1],...
              'LineWidth',1.5);         % 绘制第一类的散点图
hold on;
scatter(class2(:,1),class2(:,2),70,'MarkerEdgeColor',[.1 .6 .8],...
              'MarkerFaceColor',[.1 .6 .8],...
              'LineWidth',1.5);         % 绘制第二类的散点图              
title("Two Different class");         % 图表标题
xlabel("x1");            % x轴标题
ylabel("x2");               % y轴标题
legend({'class1','class2'},'location', 'southeast');
hold on;

%% 逻辑回归分类参数求解
alpha=0.005; % 梯度下降法的步长
m=length(class1(:,1))+length(class2(:,1)); % 样本数量
Samples=[ones(m,1) [class1;class2]]';
theta=zeros(3,1); % 初始化参数
A=[repmat([1 0],1,m/2) repmat([0 1],1,m/2)];
B=[];
for i=1:m
  B=[B;...
  [log(SigmodFunction(Samples(:,i),theta));...
  log(1-SigmodFunction(Samples(:,i),theta))]];
endfor

J(1)=-1/m*A*B;
for j=1:5000
  theta=theta-[alpha*(SigmodFunction(Samples,theta)-[ones(1,m/2) zeros(1,m/2)])*Samples']';
  B=[];
for i=1:m
  B=[B;...
  [log(SigmodFunction(Samples(:,i),theta));...
  log(1-SigmodFunction(Samples(:,i),theta))]];
endfor
  J(j+1)=-1/m*A*B;
endfor
x1=-1:0.1:6;
x2=-(theta(1)+theta(2)*x1)/theta(3);
plot(x1,x2);
figure
plot(1:5001,J);
title('J(θ)');
xlabel('iteration numbers');
ylabel('J(θ)');
function h=SigmodFunction(x,theta)
  h=1./(1+exp(-theta'*x));
endfunction

分类结果

Octave直接在figure菜单点“保存”居然报错o(╯□╰)o。好吧,老老实实用print函数。
第一张图中的线为决策边界。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值