logistic回归详解一:为什么要使用logistic函数

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

从线性分类器谈起

给定一些数据集合,他们分别属于两个不同的类别。例如对于广告数据来说,是典型的二分类问题,一般将被点击的数据称为正样本,没被点击的数据称为负样本。现在我们要找到一个线性分类器,将这些数据分为两类(当然实际情况中,广告数据特别复杂,不可能用一个线性分类器区分)。用X表示样本数据,Y表示样本类别(例如1与-1,或者1与0)。我们线性分类器的目的,就是找到一个超平面(Hyperplan)将两类样本分开。对于这个超平面,可以用以下式子描述:
ω T x + b = 0 \omega^{T}x + b = 0 ωTx+b=0

对于logistic回归,有:
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_{\theta}(x) = g(\theta^{T}x) = \frac{1}{1+e^{-\theta^{T}x}} hθ(x)=g(θTx)=1+eθTx1

其中 x x x 为样本, x = [ x 1 , x 2 , ⋯   , x n ] x = [x_1,x_2,\cdots,x_n] x=[x1,x2,,xn] 为n维向量,函数g为我们常说的logistic函数。g的更一般公式为:
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+ez1

这个公式,对机器学习稍微有点了解的同学可能都特别熟悉,不光在logistic回归中,在SVM中,在ANN中,都能见到他的身影,应用特别广泛。大部分资料在谈到这个式子时候,都是直接给出来。但是不知道大家有没有想过,既然这个式子用途这么广泛,那我们为什么要用它呢?

是不是已经有好多人愣住了。大家都是这么用的。书上都是这么写的啊。是的,但是当一个东西老在你眼前晃来晃去的时候,你是不是应该想想为什么呢?反正对于我来说,如果一个东西在我眼前都出现了第三次了而我还不知其所以然,我一定会去想方设法弄明白为什么。

为什么要用Logistic函数

学过模式识别的同学肯定学过各种分类器。分类器中最简单的自然是线性分类器,线性分类器中,最简单的应该就属于感知器了。在上个世纪五六十年代,感知器就出现了:
y = 0 , ∑ i = 1 n ω i x ≤ b y = 0, \sum_{i=1}^n\omega_ix\leq b y=0,i=1nωixb
y = 1 , ∑ i = 1 n ω i x > b y = 1, \sum_{i=1}^n\omega_ix\gt b y=1,i=1nωix>b

感知器的思想,就是对所有特征与权重做点积(内积),然后根据与阈值做大小比较,将样本分为两类。稍微了解一点神经网络的同学,对一下这幅图一定不陌生:

这里写图片描述

没错,这幅图描述的就是一个感知器。
  我考研考的是控制原理,如果学过控制原理或者学过信号系统的同学,就知道感知器相当于那两门课中的阶跃函数:

这里写图片描述

这两者的本质都是一致的,即通过划定一个阈值,然后比较样本与阈值的大小来分类。

这个模型简单直观,实现起来也比较容易(要不怎么说是最简单的现行分类器呢)。但是问题在于,这个模型不够光滑。第一,假设 t 0 = 10 t_0=10 t0=10,现在有一个样本进来,最后计算出来的值为10.01,你说这个样本分类应该是为1还是0呢?好像都不太靠谱的样子。第二,这个函数在 t 0 t_0 t0 这点有个阶跃,有从0到1的突变,导致这点不连续,在数学上处理起来也不方便。

啰啰嗦嗦写了这么多了,终于轮到logistic函数出场了。对比前面的感知器或者阶跃函数,他有什么优点呢?
这里写图片描述

通过logistic函数的图像,我们很容易总结出他的以下优点:
  1.他的输入范围是 − ∞ → + ∞ -\infty \to+\infty + ,而之于刚好为(0,1),正好满足概率分布为(0,1)的要求。我们用概率去描述分类器,自然比单纯的某个阈值要方便很多;
  2.他是一个单调上升的函数,具有良好的连续性,不存在不连续点。

写到这里,小伙伴们应该都明白为什么要使用logistic函数了吧。
  敬请期待logistic系列后续文章。

  • 62
    点赞
  • 170
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
下面是使用 MATLAB 建立 logistic 回归函数的一个简单示例。 假设我们有一个训练集 X 和目标变量 y,其中 X 是一个 m 行 n 列的矩阵,y 是一个 m 行 1 列的向量。我们的目标是建立一个 logistic 回归模型,用于预测 y 的值。 首先,我们需要定义一个 sigmoid 函数,它是 logistic 回归模型中的关键部分: ``` function g = sigmoid(z) %SIGMOID Compute sigmoid function % g = SIGMOID(z) computes the sigmoid of z. g = 1.0 ./ (1.0 + exp(-z)); end ``` 接下来,我们可以定义一个 cost 函数,它用于计算 logistic 回归模型的代价函数: ``` function [J, grad] = costFunction(theta, X, y) %COSTFUNCTION Compute cost and gradient for logistic regression % J = COSTFUNCTION(theta, X, y) computes the cost of using theta as the % parameter for logistic regression and the gradient of the cost % w.r.t. to the parameters. m = length(y); % number of training examples J = 0; grad = zeros(size(theta)); z = X * theta; hypothesis = sigmoid(z); J = (-y' * log(hypothesis) - (1 - y)' * log(1 - hypothesis)) / m; grad = (X' * (hypothesis - y)) / m; end ``` 最后,我们可以使用 fminunc 函数来优化参数 theta,使得代价函数最小: ``` % Initialize fitting parameters initial_theta = zeros(size(X, 2), 1); % Set options for fminunc options = optimset('GradObj', 'on', 'MaxIter', 400); % Run fminunc to obtain the optimal theta [theta, J, exit_flag] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options); ``` 这样,我们就可以得到一个训练好的 logistic 回归模型,可以用于预测新的数据点的分类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值