[深度之眼机器学习训练营第四期]对数几率回归

基本概念

对数几率回归(Logistic Regression,又称逻辑回归)可以用来解决二分类和多分类问题。分类问题中,输出集合不再是连续值,而是离散值,即\(\mathcal{Y}\in \{0,1,2,\cdots\}\)。以二分类问题为例,其输出集合一般为\(\mathcal{Y}\in \{0,1\}\)。

为了解决二分类问题,对数几率回归在线性回归的基础上引入Sigmoid函数(Logistic函数),其中\(\exp(\cdot)\)是自然指数:
\[
g(z) = \dfrac{1}{1 +\exp({-z})}\\
\]
该函数的值域为\([0,1]\),如下图所示:

因此,对数几率回归中假设集的定义为:
\[
h_\theta (x) = g ( \theta^T x )
\]

实际上,\(h_{\theta}(x)\)给出了在给定参数\(\theta\)和样本\(x\)的条件下,标签\(y=1\)的概率。
\[
\begin{aligned}& h_\theta(x) = P(y=1 | x ; \theta) = 1 - P(y=0 | x ; \theta) \\& P(y = 0 | x;\theta) + P(y = 1 | x ; \theta) = 1\end{aligned}
\]

损失函数

对数几率回归的损失函数如下所示:
\[
J(\theta) = \dfrac{1}{n} \sum_{i=1}^N \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) \ \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) =\left\{
\begin{aligned}
&-\log(h_\theta(x^{(i)})) \; & \text{if }y^{(i)} = 1\&-\log(1-h_\theta(x^{(i)})) \; & \text{if } y^{(i)} = 0
\end{aligned}
\right.
\]
该损失函数通过极大似然法导出。对于给定的输入集\(\mathcal{X}\)和输出集\(\mathcal{Y}\),其似然函数为:
\[
\prod _{i = 1}^n \left[h_\theta(x^{(i)})\right]^{y^{(i)}}\left[1 - h_\theta(x^{(i)})\right]^{1 - y^{(i)}}
\]

由于连乘不好优化,因此上式两边取对数,转化成连加的形式,得到对数似然函数:
\[
L(\theta)=\frac{1}{n} \sum _{i=1}^n \left[ y^{(i)} \log h_\theta(x^{(i)}) + (1-y^{(i)})\log(1 - h_\theta(x^{(i)})) \right ]
\]
最大化上述对数似然函数就可以得到最优的参数\(\theta\)。而最大化对数似然函数\(L(\theta)\)等价于最小化\(- L(\theta)\),因此我们可以得到如下损失函数的形式:
\[
J(\theta) = -\frac{1}{n} \sum _{i=1}^n \left[ y^{(i)} \log h_\theta(x^{(i)}) + (1-y^{(i)})\log(1 - h_\theta(x^{(i)})) \right ]
\]

参数学习

得到损失函数后,需要使用梯度下降法求解该函数的最小值。首先,将损失函数进行化简:
\[
\begin{aligned}
J(\theta) &=-\frac{1}{n} \sum _{i=1}^N \left[ y^{(i)} \log h_\theta(x^{(i)}) + (1-y^{(i)})\log(1 - h_\theta(x^{(i)})) \right ] \ &=-\frac{1}{n} \sum _{i=1}^n \left[ y^{(i)}\log \frac {h_\theta(x^{(i)})} {1 - h_\theta(x^{(i)})} + \log(1 - h_\theta(x^{(i)})) \right ] \ &=-\frac{1}{n} \sum _{i=1}^n \left[ y^{(i)} \log \frac { {\exp(\theta\cdot x^{(i)})} / (1 + \exp(\theta\cdot x^{(i)}))} {{1} /(1 + \exp(\theta\cdot x^{(i)}))} + \log(1 - h_\theta(x^{(i)})) \right ] \ &=-\frac{1}{n} \sum _{i=1}^n \left[ y_i (\theta\cdot x^{(i)}) + \log(1 + \exp (\theta\cdot x^{(i)})) \right ]
\end{aligned}
\]

求解损失函数\(J(\theta)\)对参数\(\theta\)的偏导数:
\[
\begin{aligned}
\frac{\partial}{\partial \theta}J(\theta) &=-\frac{1}{n} \sum _{i=1}^n \left [y^{(i)} \cdot x^{(i)} - \frac {1} {1 + \exp(\theta \cdot x^{(i)})} \cdot \exp(\theta \cdot x^{(i)}) \cdot x^{(i)}\right ] \ &=-\frac{1}{n} \sum _{i=1}^n \left [y^{(i)} \cdot x^{(i)} - \frac {\exp(\theta \cdot x^{(i)})} {1 + \exp(\theta \cdot x^{(i)})} \cdot x^{(i)}\right ] \ &=-\frac{1}{n} \sum _{i=1}^n \left (y^{(i)} - \frac {\exp(\theta \cdot x^{(i)})} {1 + \exp(\theta \cdot x^{(i)})} \right ) x^{(i)}\ &=\frac{1}{n} \sum _{i=1}^n \left (h_\theta(x^{(i)})-y^{(i)} \right )x^{(i)}
\end{aligned}
\]

使用梯度下降法逐个更新参数:
\[
\theta_j := \theta_j - \frac{\alpha}{n} \sum_{i=1}^n \left(h_\theta(x^{(i)}) - y^{(i)}\right) x_j^{(i)}
\]

原文地址:https://www.cnblogs.com/littleorange/p/12231329.html

时间: 2024-07-30 21:14:51

[深度之眼机器学习训练营第四期]对数几率回归的相关文章

[深度之眼机器学习训练营第四期]过拟合与正则化

基本概念 机器学习模型面临的两个主要问题是欠拟合与过拟合.欠拟合,即模型具有较高的偏差,说明模型没有从数据中学到什么,如下左图所示.而过拟合,即模型具有较高的方差,意味着模型的经验误差低而泛化误差高,对新数据的泛化能力差,如下右图所示. 通常,欠拟合是由于模型过于简单或使用数据集的特征较少导致的.相反,过拟合则是模型过于复杂或特征过多引起的.欠拟合的问题比较容易解决,而过拟合的问题则有些棘手.一般而言,解决过拟合的方法包括降维和正则化. 正则化损失函数 正则化是通过向损失函数中添加惩罚项以限制参

[深度之眼机器学习训练营第四期]神经网络之参数学习

损失函数 为了学习神经网络中的参数,我们要为神经网络模型定义损失函数.回想一下,逻辑回归可以将数据分成正例和负例两类,因此它的损失函数为: \[ J(\theta) = -\frac{1}{n}\sum_{i=1}^n \left[y^{(i)}\log(h_\theta(x^{(i)}) ) + (1-y^{(i)})\log(1-h_\theta(x^{(i)}))\right] + \frac{\lambda}{2n}\sum_{j=1}^n\theta^2_j \] 而对于神经网络模型,

对数几率回归法(梯度下降法,随机梯度下降与牛顿法)与线性判别法(LDA)

本文主要使用了对数几率回归法与线性判别法(LDA)对数据集(西瓜3.0)进行分类.其中在对数几率回归法中,求解最优权重W时,分别使用梯度下降法,随机梯度下降与牛顿法. 代码如下: 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Date : 2017-05-09 15:03:50 4 # @Author : whb ([email protected]) 5 # @Link : ${link} 6 # @Version : $Id$

深度之眼PyTorch训练营第二期 ---基础数据结构-张量

一.Tensor概念 张量:多维数组,标量.向量.矩阵的高维拓展 Tensor与Variable torch.autograd.Variable:数据类型,主要用于封装Tensor,进行自动求导,五个属性: data:被包装的Tensor grad:data的梯度 grad_fn:创建Tensor的Function,自动求导的关键 requires_grad:指示是否需要梯度 is_leaf:指示是否是叶子结点(张量) PyTorch0.4.0之后,Variable并入Tensor dtype:

深度之眼PyTorch训练营第二期 ---2、张量操作与线性回归

一.张量的操作:拼接.切分.索引和变换 1.拼接 (1)torch.cat()  功能:将张量按照维度dim进行拼接(不会扩张) tensors:张量序列 dim:要拼接的维度 (2)torch.stack()  功能:在新创建的维度dim上进行拼接(会扩张张量的维度) tensors:张量序列 dim:要拼接的维度 (3)torch.chunk()  功能:将张量按维度dim进行平均切分     返回值:张量列表 注意:若不能整除,最后一份张量小于其他张量 input:要切分的张量 chunk

深度之眼PyTorch训练营第二期 ---5、Dataloader与Dataset

一.人民币二分类 描述:输入人民币,通过模型判定类别并输出. 数据:四个子模块 数据收集 -> img,label 原始数据和标签 数据划分 -> train训练集 valid验证集 test测试集 数据读取 -> DataLoader ->(1)Sampler(生成index) (2)Dataset(读取Img,Label) 数据预处理 -> transforms 1.DataLoader torch.utils.data.DataLoader  功能:构建可迭代的数据装载

深度之眼PyTorch训练营第二期 ---3、计算图与动态图机制

一.计算图 1.计算图是用于描述运算的有向无环图. 主要有两个元素:结点(Node).边(edge) 结点表示数据,如向量.矩阵.张量 边表示运算,如加减乘除卷积等 例子:用计算图表示 y = (x + w) * (w + 1) 拆分:a = x + w  b = w + 1  --->   y = a * b 2.计算图与梯度求导 =b * 1 + a * 1 =b + a =(w+1) + (x+w) =2*w + x + 1 =2 * 1 + 2 + 1 =5 y到w所有路径 3.叶子结点

深度之眼PyTorch训练营第二期 --- 8、权值初始化

一.梯度消失与爆炸 二.Xavier方法与Kaiming方法 1.Xavier初始化 方差一致性:保持数据尺度维持在恰当范围,通常方差为1 激活函数:饱和函数,如Sigmoid,Tanh 三.常用初始化方法 10种: Xavier均匀分布.正态分布 Kaiming均匀分布.正态分布 均匀分布.正态分布.常数分布 正交矩阵初始化 单位矩阵初始化 稀疏矩阵初始化 nn.init.Calculate_gain 主要功能:计算激活函数的方差变化尺度 主要参数 nonlinearity:激活函数名 par

梯度下降法实现对数几率回归

1 import matplotlib.pyplot as plt 2 import numpy as np 3 import xlrd 4 5 def sigmoid(x): 6 """ 7 Sigmoid function. 8 Input: 9 x:np.array 10 Return: 11 y: the same shape with x 12 """ 13 y =1.0 / ( 1 + np.exp(-x)) 14 return y