遵循统一的机器学习框架理解逻辑回归

遵循统一的机器学习框架理解逻辑回归

标签: 机器学习 LR 分类

一、前言

  1. 我的博客不是科普性质的博客,仅记录我的观点和思考过程。欢迎大家指出我思考的盲点,更希望大家能有自己的理解。
  2. 本文参考了网络上诸多资料。

二、理解

统一的机器学习框架(MLA):

1.模型(Model)
2.策略(Loss)
3.算法(Algorithm)

按照如上所说框架,LR最核心的就是损失函数使用了 SigmoidCross Entropy

LR: Sigmoid + Cross Entropy

Model

题外话:参照上一篇博客:遵循统一的机器学习框架理解SVM,就会发现LR与SVM在模型和算法上是一样的,不同点就在于损失函数的不同。

给定数据集 \((x^1,\hat{y}^1),(x^2,\hat{y}^2)...(x^n,\hat{y}^n)\),其中\(\hat{y}^i\in\{0,1\}\), \(y\) 表示预测的 \(label\) 值,线性函数:
\[f(x)=w^Tx+b\]

\[y=\begin{cases}
1,\quad &f(x)>0\0, &f(x)<0
\end{cases}\]
同时:
当 \(\hat{y}=1\) 时,\(f(x)\)越大越好; $\hat{y}=0 $ 时,\(f(x)\)越小越好。

Loss

经验风险最小化(交叉熵损失函数):Sigmoid + Cross Entropy。
增加Sigmoid的目的是为了把 \(f(x)\) 的值放缩到0-1之间,用于计算交叉熵损失。

\[
\begin{aligned}
&z = \sigma(f(x))\&p(\hat{y}=1|x;w,b) = z\&p(\hat{y}=0|x;w,b) = 1-z
\end{aligned}
\]

\(z\) 表示预测出的可能性

经验风险

1.使用 \(sigmoid + cross\ entropy\) 的损失函数:
\[\hat{y}=\begin{cases}
1,\; &f(x)>0\; &\sigma(f(x))\longrightarrow 1, &Loss=-ln(z)\0,\; &f(x)<0\; &\sigma(f(x))\longrightarrow 0, &Loss=-ln(1-z)
\end{cases}\]

\[
Loss = -[\hat{y} ln z+(1-\hat{y})ln (1-z)]
\]

2.从最大似然的角度
假设训练样本相互独立,那么似然函数表达式为:

\[
\begin{aligned}
Loss &= p(\hat{Y}|X;w,b) \&= \prod_{i=1}^n p(\hat{y}^i|x^i;w,b)\&= \prod_{i=1}^n z_i^{\hat{y}^i} (1-z_i)^{1-\hat{y}^i}\&= \sum_{i=1}^n \hat{y}^iln z_i + (1-\hat{y}^i)ln(1-z_i)
\end{aligned}
\]

至此,发现从交叉熵的角度和最大似然的角度,得到的损失函数竟然完全相同,说明他俩在背后存在着不为人知的本质联系。
现在开始探究这种联系。

3. 交叉熵与最大似然的联系

\[H(X) = -E_{x \sim P}[log {P(x)}]\]

KL散度:KL衡量两个分布之间的差异
\[
\begin{aligned}
D_{KL}(P||Q) &=E_{x \sim P}[log \frac{P(x)}{Q(x)}]\&=E_{x \sim P}[log{P(x)}-log{Q(x)}]
\end{aligned}
\]

\(D_{KL}(P||Q)\)表示选择一个 \(Q\),使得它在 \(P\) 具有高概率的地方具有高概率。简单来说就是找到一组参数表示 \(Q\) 分布,这组参数要做到:当 \(P\) 分布中高概率的地方时,从这组参数也能取到高概率。

交叉熵
\[
\begin{aligned}
H(P,Q) &=H(P)+D_{KL}(P||Q)
\end{aligned}
\]

具体到我们的场景而言:\(\hat{Y}\) 分布对应着 \(P\) 分布, \(Y\) 分布对应着 \(Q\) 分布。\(\hat{Y}\) 分布是确定的,\(Y\) 分布是我们所求的。换句话说就是让 \(Y\) 分布尽量逼近 \(\hat{Y}\) 分布。

在我们这个场景下,\(\hat{Y}\) 是确定但未知的(先验分布)。

\[
\begin{aligned}
H(\hat{Y},Y) &= H(\hat{Y})+D_{KL}(\hat{Y}||Y)\&=-E_{x \sim \hat{Y}}[log \hat{Y}]+E_{x \sim \hat{Y}}[log{\hat{Y}(x)}-log{Y(x)}]\&=E_{x \sim \hat{Y}}-log{Y(x)}
\end{aligned}
\]

当我们最小化交叉熵时:
\[
\begin{aligned}
&min\;\;H(\hat{Y},Y)\&min\;\;D_{KL}(\hat{Y}||Y)\&min \;\;E_{x \sim \hat{Y}}[log{\hat{Y}(x)}-log{Y(x)}]\&min \;\;E_{x \sim \hat{Y}}-log{Y(x)}
\end{aligned}
\]

当 \(\hat{Y}\) 分布是已知,则熵是常量,此时交叉熵和KL散度则是等价的。
针对 \(Y\) 最小化交叉熵等价于最小化KL散度,因为 \(H(\hat{Y})\) 与\(Y\)无关。

注意最后的 \(E_{x \sim \hat{Y}}-log{Y(x)}\) 与熵 \(H(Y)\) 之间的差别。熵是已经知道一个变量x的概率分布,求出来的是这个分布的事件所产生的期望信息总量;但对于这个式子,\(Y\) 分布是未知的,是我们所要求的东西。我们只是希望\(Y\)与\(\hat{Y}\)之间尽可能相似或者接近,而并不需要知道他们每个的确切的分布是什么(也就是并不需要知道概率分布的表达式),所以使用KL散度直接定义他们之间的差异就行了。
说到这里想起来了上一篇介绍SVM时的核函数,其中也是要把低维空间升到高维空间,然后计算他们的内积,对于这整个过程,我们最终需要的是内积的结果。为了减少计算量同时达到最终的目的,跳过中间复杂的过程,引入了核函数,这样我们就不需要知道升维后具体是什么样子。

最小化KL散度和模型采用最大似然估计进行参数估计又是一致的,因此交叉熵与最大似然估计有一个KL散度关联在一起的。

Algorithm

梯度下降法

\(\sigma(x)' = \sigma(x)(1-\sigma(x))\)
$ min;;Loss = -\sum_{i=1}^n \hat{y}^i ln z_i + (1-\hat{y}^i)ln(1-z_i)$
\(z = \sigma(f(x))\)

\[
\begin{aligned}
\frac{\partial L}{\partial w} &= -\sum_{i=1}^n \hat{y}^i \frac{1}{z_i} z_i(1-z_i) x^i+(1-\hat{y}^i)\frac{1}{1-z_i} (-1) z_i(1-z_i)x^i \&= -\sum_{i=1}^n \hat{y}^i(1-z_i) x^i-(1-\hat{y}^i)z_ix^i\&= -\sum_{i=1}^n (\hat{y}^i-z_i)x^i\&= -\sum_{i=1}^n (\hat{y}^i-\sigma(w^Tx^i+b))x^i
\end{aligned}
\]

\[
\begin{aligned}
w^{k+1} &= w^k - \eta \frac{\partial L}{\partial w} \&= w^k+\eta\sum_{i=1}^n (\hat{y}^i-z_i)x^i
\end{aligned}
\]

这里有一个很好的性质,更新的梯度与 \(\hat{y}^i-z_i\) 有关,当他们之间的差距越大时,更新的梯度越大。

三、扩展

上面所说的模型中\(\hat{y}^i\in\{0,1\}\),换一种写法:\(\hat{y}^i\in\{1,-1\}\),还是用sigmoid+交叉熵的方式来写损失函数。
此时:
\[\hat{y}=\begin{cases}
1,\; &f(x)>0\; &\sigma(f(x))\longrightarrow 1, &Loss=-ln(z)\-1,\; &f(x)<0\; &\sigma(f(x))\longrightarrow 0, &Loss=-ln(1-z)=-ln(-z)
\end{cases}\]

上式的变换参考上一篇遵循统一的机器学习框架理解SVM

综合得来:
\[
\begin{aligned}
Loss &= -\sum_{i=1}^n ln(\sigma(\hat{y}^if(x^i)))\\&= - \sum_{i=1}^n ln \frac{1}{1+exp(-\hat{y}^if(x^i))}\\&=\sum_{i=1}^n ln(1+exp(-\hat{y}^if(x^i)))
\end{aligned}
\]

\[
\begin{aligned}
\frac{\partial L}{\partial w} &= -\sum_{i=1}^n \frac{1}{\sigma(\hat{y}^if(x^i))}\sigma(\hat{y}^if(x^i))(1-\sigma(\hat{y}^if(x^i)))\hat{y}^ix^i\&=-\sum_{i=1}^n (\hat{y}^i-\hat{y}^i\sigma(\hat{y}^if(x^i)))x^i
\end{aligned}
\]

\(\hat{y}^i=1\)时,\[\frac{\partial L}{\partial w}=-\sum_{i=1}^n (1-\sigma(f(x^i)))x^i\]

\(\hat{y}^i=-1\)时,\[\frac{\partial L}{\partial w}=-\sum_{i=1}^n (-1+\sigma(-f(x^i)))x^i=-\sum_{i=1}^n (-1+1-\sigma(f(x^i)))x^i=-\sum_{i=1}^n -\sigma(f(x^i))x^i\]

到此可以看出与\(\hat{y}^i\in\{1,0\}\) 时完全相同。

原文地址:https://www.cnblogs.com/SpingC/p/11622726.html

时间: 2024-10-13 10:03:38

遵循统一的机器学习框架理解逻辑回归的相关文章

遵循统一的机器学习框架理解SVM

一.前言 我的博客不是科普性质的博客,仅记录我的观点和思考过程.欢迎大家指出我思考的盲点,更希望大家能有自己的理解. 本文参考了李宏毅教授讲解SVM的课程和李航大大的统计学习方法. 二.理解 统一的机器学习框架(MLA): 1.模型(Model) 2.策略(Loss) 3.算法(Algorithm) 按照如上所说框架,SVM最核心的就是使用了 Hinge Loss 和 核方法 . SVM: Hinge Loss + Kernel Method Model 给定数据集 \((x^1,\hat{y}

机器学习总结之逻辑回归Logistic Regression

机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问题:预测一个连续的输出. 分类问题:离散输出,比如二分类问题输出0或1. 逻辑回归常用于垃圾邮件分类,天气预测.疾病判断和广告投放. 一.假设函数 因为是一个分类问题,所以我们希望有一个假设函数,使得: 而sigmoid 函数可以很好的满足这个性质: 故假设函数: 其实逻辑回归为什么要用sigmoi

机器学习的简单逻辑回归的Advanced Optimization

Learning Course: One variable logistic regression optimization 单变量(只有一个特征)的用于分类的逻辑回归的cost function的最小值求解, here: x=[x1;x2]; y={0,1}; theta=[theta(1);theta(2)] 由于分类中的y值需为0-1之间的数值,因此这里的cost function不同于线性回归的cost function. hθ(x)=g(θTx), where g(x)= 1/(1-e

Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression &amp; Regularization

原文地址:http://blog.csdn.net/abcjennifer/article/details/7716281 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学习系统设计.SVM(Support Vector Machines 支持向量机).聚类.降维.异常检测.大规模机器学习等章节.所有内容均来自Standford公开课machin

机器学习python实战----逻辑回归

当看到这部分内容的时候我是激动的,因为它终于能跟我之前学习的理论内容联系起来了,这部分内容就是对之前逻辑回归理论部分的代码实现,所以如果有不甚理解的内容可以返回对照着理论部分来理解,下面我们进入主题----logistic regression 一.sigmoid函数 在之前的理论部分我们知道,如果我们需要对某物进行二分类,那么我们希望输出函数的值在区间[0,1],于是我们引入了sigmoid函数.函数的形式为. 曲线图 根据函数表达式,我们可以用代码来表示 def sigmoid(Inx):

机器学习 Python实现逻辑回归

# -*- coding: cp936 -*- from numpy import * def loadDataSet(): dataMat = []; labelMat = [] fr = open('testSet.txt') for line in fr.readlines(): lineArr = line.strip().split() dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])]) labelMat.append

coursera 机器学习 logistic regression 逻辑回归的项目

github : https://github.com/twomeng/logistic-regression- ex1. m 1 %% Machine Learning Online Class - Exercise 2: Logistic Regression 2 % 3 % Instructions 4 % ------------ 5 % 6 % This file contains code that helps you get started on the logistic 7 %

Python实现机器学习算法:逻辑回归

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import make_classification def initialize_params(dims): w = np.zeros((dims, 1)) b = 0 return w, b def sigmoid(x): z = 1 / (1 + np.exp(-x)) return z def logisti

机器学习-分类算法-逻辑回归

# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ import matplotlib.pyplot as plt import numpy as np from sklearn.model_selection import train_test_split from sklearn import datasets, linear_model