【机器学习】Logistic回归(重新整理)

简介: 【机器学习】Logistic回归(重新整理)

Logistic回归学习线路


预备知识:建议先去B站学习一下信息量,熵,BL散度,交叉熵的概念。


推荐B站视频:“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”


信息量(Information)指的是一个事件所包含的信息的多少,通常用以2为底的对数表示。比如说,如果一个事件发生的概率是1/8,那么这个事件的信息量就是log2(1/8)=-3,因为需要三个比特才能表示它。


KL散度(Kullback-Leibler

divergence),又称相对熵,是衡量两个概率分布之间差异的一种方式。KL散度是非负的,并且当且仅当两个分布完全相同时取值为0。


交叉熵(Cross-entropy)是一种用来比较两个概率分布之间差异的方法,它通常用于评估分类模型的性能。与KL散度类似,交叉熵也是非负的,当且仅当两个分布相等时取值为0。


本节知识导图

793d368b421540b7714ed3c49a0630d8_2339ec750e614f5dadbd955abab09192.png

Logistic回归的函数模型


 逻辑回归是一个分类模型


 它可以用来预测某件事发生是否能够发生。分类问题是生活中最常见的问题:


生活中:比如预测上证指数明天是否会上涨,明天某个地区是否会下雨,西瓜是否熟了


金融领域:某个交易是否涉嫌违规,某个企业是否目前是否违规,在未来一段时间内是否会有违规


互联网:用户是否会购买某件商品,是否会点击某个内容


 对于已知的结果,上面问题的回答只有:0,1 。


 我们以以下的一个二分类为例,对于一个给定的数据集,存在一条直线可以将整个数据集分为两个部分:

d83c0169fbbbcbfb11a6b7311ff3e259_ec555bc282544944af65dd5922c32c7c.png


image.png

的样本设置为1,反之设置为0。但是这其实是一个感知机的决策过程。

 逻辑回归在此基础上还需要在加上一层,找到分类概率与输入变量之间的关系,通过概率来判断类别。

回顾一下线性回归模型:

image.png


可以看下sigmoid函数的图像:

09b7874fb8717a1099bb6b958625effa_fe222becfd7c453b8a899bb94510e8f7.png


总结:这样,我们便得到Logistic模型h(x)的表达式

image.png

image.png的意义在于 样本image.png的标签为1的概率为h(x)


损失函数、损失最小化架构


对数损失作为损失函数


对数损失:

image.png

image.png


损失最小化架构


因为是二分类问题,所以


2bda50b27cc3f85573c52f702dd1c2a4_fc122f53ad49477b9c682131db5b9b60.png


将其带入对数损失函数l ll

所以二分类的损失最小化架构为:


image.png

ea6e767e034912e15d01b8609bfc0ea3_27c14b69b6a545a3a2f491a6c17e4a7b.png

逻辑回归损失函数为什么不用最小二乘法?答案


这就是交叉熵:

image.png


从概率论、统计学角度来看损失最小化架构(交叉熵):

 在统计学中,假设我们已经有了一组样本(X,Y),为了计算出能够产生这组样本的参数。通常我们会采用最大似然估计的方法(一种常用的参数估计的方法)。使用到最大似然估计的话,我们还要一个假设估计,这里我们就是假设Y是服从于伯努利分布的。

image.png

由于Y服从于伯努利分布,我们很容易就有似然函数:

image.png

为了求解我们可以两边取对数:

image.png

image.png

我们一般喜欢取式子的最小值,所以将原式子转化一下

image.png

image.png

从信息量,熵的角度来看损失最小化架构:

image.png

8776a49945a5de048183fc9281d41f2c_f8cf92c04a5149c2bbe843c941e238c3.png

image.png


这也就是对数损失的由来:


image.png

看老师的课的时候,直接丢给我一个对数损失,然后又直接讲交叉熵,对数损失为啥可以作为损失函数,也没告诉我们。通过上面的知识,读者应该明白这个对数损失怎么来的了吧。继续看下去,你会收获更多。


推荐视频:[“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”]


因为是二分类问题,所以

2bda50b27cc3f85573c52f702dd1c2a4_fc122f53ad49477b9c682131db5b9b60.png

所以二分类的交叉熵为:


image.png

这两个角度的思考:


它们推导出来的式子是一样的,是不是都能叫交叉熵?

不是的,它们只是式子相同,最大似然估计函数推导的时候是因为习惯上将相乘改为相加,所以才出现的l o g loglog,它的底数可以为任意正数,而且没有单位,而信息量将log 2 写进了定义里,并且他是有单位的,比特就是它的单位。


分类函数


最大概率分类函数


在一个k元分类问题中,给定预测概率模型h,即

image.png

其中,image.png是样本属于第i个类别的概率。

关于模型h的最大概率分类函数为:

image.png


阈值分类函数


在一个2元分类问题中,设标签在{0,1}中取值。

给定预测概率模型h,即h(x)表示特征组x的标签为1的概率。

关于模型h的以t为阈值的阈值分类函数为:


1381c15d3d9984a18cbf7ce677cbf091_adf277d57c10401f826c55efdac52b13.png


其就是,如果真实标签为1,那么就是当预测模型(标签为1)函数值大于某个值的时候,便认为预测标签为1,反正为0


Logistic回归的优化算法


梯度下降


理论部分:我的另一篇文章:搜索算法—学习笔记


9396a528c78f551d9a20bed9bf3b36b2_ef3dafccd1214453951b9955dcfcc14c.png


achine_learning.logistic_regression.lib.logistic_regression_gd
import numpy as np
def sigmoid(scores):
  return 1 / (1 + np.exp(-scores))
class LogisticRegression:
  def fit(self, X, y, eta=0.1, N = 1000): #eta η
    m, n = X.shape
    w = np.zeros((n,1))
    for t in range(N):
      h = sigmoid(X.dot(w)) #hw(X)
      g = 1.0 / m * X.T.dot(h - y) #梯度g
      w = w - eta * g #更新w
    self.w = w
  def predict_proba(self, X):
    return sigmoid(X.dot(self.w)) # 概率
  def predict(self, X):
    proba = self.predict_proba(X) # 概率
    return (proba >= 0.5).astype(np.int) 

交叉熵是一个凸函数吗,可导。


随机梯度下降


理论部分:我的另一篇文章:搜索算法—学习笔记

import numpy as np
def sigmoid(scores):
  return 1.0 / (1 + np.exp(-scorecs ))
class LogisticRegression:
  def fit(self, X, y, eta_0=10, eta_1=50, N=1000):
    m, n = X.shape
    w = np.zeros((n,1))
    self.w = w
    for t in range(N):
      i = np.random.randint(m) #随机选一个样本 x(i)
      x = X[i].reshape(1, -1) # 1*n 向量
      pred = sigmoid(x.dot(w)) # hw(x)
      g = x.T * (pred - y[i]) # 梯度
      w = w - eta_0 / (t + eta_1) * g # 更新w
      self.w += w
    self.w /= N # w均值
  def predict_proba(self, X):
    return sigmoid(X.dot(self.w))
  def predict(self, X):
    proba = self.predict_proba(X)
    return (proba >= 0.5).astype(np.int)


小批量梯度下降


坐标下降


相关文章
|
5月前
|
机器学习/深度学习 Python
【机器学习Python实战】logistic回归
【机器学习Python实战】logistic回归
50 0
|
5月前
|
机器学习/深度学习 资源调度 算法
【机器学习基础】对数几率回归(logistic回归)
【机器学习基础】对数几率回归(logistic回归)
129 0
|
8月前
|
机器学习/深度学习 自然语言处理 算法
【机器学习实战项目】10分钟学会Python怎么用Logistic回归进行分类预测(一)
【机器学习实战项目】10分钟学会Python怎么用Logistic回归进行分类预测(一)
157 0
|
10月前
|
机器学习/深度学习 资源调度 算法
学习笔记: 机器学习经典算法-逻辑回归(Logistic Regression)
机器学习经典算法-个人笔记和学习心得分享
100 0
|
11月前
|
机器学习/深度学习 算法
瞎聊机器学习——LR(Logistic Regression)逻辑斯蒂回归(一)
瞎聊机器学习——LR(Logistic Regression)逻辑斯蒂回归(一)
瞎聊机器学习——LR(Logistic Regression)逻辑斯蒂回归(一)
|
机器学习/深度学习 人工智能 算法
【机器学习】逻辑回归(Logistic Regression)(理论+图解+公式推导+代码实现)
【机器学习】逻辑回归(Logistic Regression)(理论+图解+公式推导+代码实现)
476 0
【机器学习】逻辑回归(Logistic Regression)(理论+图解+公式推导+代码实现)
|
机器学习/深度学习 存储 移动开发
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
330 0
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
|
机器学习/深度学习 数据可视化 算法
吴恩达机器学习ex2 Logistic Regression (python)(下)
吴恩达机器学习ex2 Logistic Regression (python)(下)
吴恩达机器学习ex2 Logistic Regression (python)(下)
|
机器学习/深度学习 算法 数据可视化
吴恩达机器学习ex2 Logistic Regression (python)(上)
吴恩达机器学习ex2 Logistic Regression (python)
吴恩达机器学习ex2 Logistic Regression (python)(上)
|
机器学习/深度学习 算法 数据挖掘
全网最快入门———R语言机器学习实战篇7《logistic回归》
R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
全网最快入门———R语言机器学习实战篇7《logistic回归》

热门文章

最新文章