逻辑回归推导与python实现

本文详细介绍了逻辑回归的概念、工作原理及其实现过程。首先,阐述了逻辑回归作为广义线性回归模型在数据挖掘、疾病诊断等领域的应用。接着,讲解了逻辑回归的两个关键步骤——线性变化和logistic函数,以及如何通过梯度下降法更新模型参数。最后,给出了使用TensorFlow2和Keras API实现逻辑回归的Python代码示例。
摘要由CSDN通过智能技术生成

1 简介

logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。

2 逻辑回归过程

逻辑回归大致有两个个过程:线性变化、logistic函数

2.1 线性变化

Y = x w T Y = xw^T Y=xwT

2.2 logistic函数

logistic函数主要是将Y映射到(0,1)之间,并且导数比较好计算
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+ez1
将上一步的结果代入,
g w ( x ) = 1 1 + e − x w T g_w(x)=\frac{1}{1+e^{-xw^T}} gw(x)=1+exwT1

3 逻辑回归梯度下降更新公式

3.1 损失函数

逻辑回归的损失函数有几种理解方式,这里从最大似然估计角度出发。

概率分布函数可以统一写成:
p ( y ∣ x ; w ) = ( g w ( x ) ) y ( 1 − g w ( x ) ) ( 1 − y ) p(y|x;w)=(g_w(x))^y(1-g_w(x))^{(1-y)} p(yx;w)=(gw(x))y(1gw(x))(1y)
似然函数:
L ( w ) = ∏ i p ( y i ∣ x i ; w ) L(w) = \prod_i{p(y_i|x_i;w)} L(w)=ip(yixi;w)

l ( w ) = − l o g ( L ( w ) ) = − ∑ i y i l o g ( g w ( x i ) ) − ∑ i ( 1 − y i ) l o g ( 1 − g w ( x i ) ) l(w)=-log(L(w))=-\sum_i{y_ilog {(g_w(x_i))}}-\sum_i{(1-y_i)log {(1-g_w(x_i))}} l(w)=log(L(w))=iyilog(gw(xi))i(1yi)log(1gw(xi))

3.2 梯度下降更新公式

∂ l ( w ) ∂ w j = − ( y − g w ( x ) ) x j \frac{\partial l(w)}{\partial w_j}=-(y-g_w(x))x_j wjl(w)=(ygw(x))xj

w j = w j − a ∂ l ( w ) ∂ w j w_j=w_j-a\frac{\partial l(w)}{\partial w_j} wj=wjawjl(w)

4 python实现

使用TensorFlow2,keras API实现

from keras import losses ,optimizers
from keras import layers
import keras
import tensorflow as tf
import numpy as np
def build_model():
  model = keras.Sequential([
    layers.Dense(1, activation='sigmoid',input_shape=[3],use_bias = True)
  ])
  # 优化器使用Adam
  adam = optimizers.Adam(lr=0.01)
  # 损失函数使用二进制交叉熵函数,评价函数使用二分类评价函数
  model.compile(loss='binary_crossentropy',
                optimizer=adam,
                metrics=['binary_accuracy'])
  return model
def prepare_data(n):
  x = np.arange(n)
  x = np.append(x,[np.sin(x),np.cos(x)])
  x = x.reshape((3,n)).T
  y = np.zeros((n))
  for i in range(x.shape[0]):
    if x[i][0]*x[i][1]*x[i][2] >n/2:
      y[i]=1
    else :
      y[i]=0
  return (x,y)
(x,y)=prepare_data(1000)
model=build_model()
model.summary()
model.fit(x,y,epochs=30)

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一朝英雄拔剑起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值