用Python 编写Logistics算法

2023-11-16

我们用Python来自己编写Logistics算法

首先,先将一些理论。Logistics算法用于实现线性可分的二分类问题

1. Sigmoid函数

     fx=1/(1+exp(-x))

     Sigmoid函数是常用的阈值函数之一,函数图像如下(是不是很像累积分布函数,值域都是0~1)

     

        所以,我们选用Sigmoid函数来表示二分类的概率

        Px=sig(Wx+b)

2. 损失函数

     为了考察,模型与真实值之间拟合的好坏,我们需要设定损失函数来描述模型与真实值之间的差距。在Logistics模型中,我们选取最大似然函数的对数形式来作为模型的损失函数。 

     最大似然函数:

     

     h为sigmoid函数,X为特征变量,y为分类标识(0,1)变量 ,m为变量个数

     损失函数:

     

     我们的优化目标为最小化损失函数,用到的是梯度下降算法。

3. 梯度下降算法

     

     d为梯度下降方向,w为变量

     我们顺着梯度方向更新权值W

    

      直到目标函数达到最优值

4. 梯度下降算法来实现Logistics Regression模型

    利用梯度下降算法对损失函数进行处理,求得梯度下降算法的最优值。

    

     小x是样本X的特征分量,由上式得到的更新公式为


     将上述的权重更新公式,代入模型进行训练,就得到了Logistics回归模型的权重值

5. 举个栗子

    要分类的样本

    

    我们的目标就是要得到上图的那条分界线

# -*- coding: utf-8 -*-

#%% 导入包
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

#%% 导入数据
data=pd.read_table('Logistics_Regression/lr.txt',sep='\t',names=['x','y','label'])
print(data.head())
x=data['x']
y=data['y']
label=data['label']
plt.scatter(data[label==0]['x'],data[label==0]['y'],s=10,c='b')
plt.scatter(data[label==1]['x'],data[label==1]['y'],s=10,c='r')
plt.xlabel('x')
plt.ylabel('y')
feature=data.iloc[:,0:2]
#%%
print(np.shape(np.shape(feature)[0]))
print(type(np.shape(feature)[0]))
w=lr_train_bgd(feature,label,1000,0.01)
w=pd.DataFrame(w)
print(w)
xx=np.arange(-0.5,11.5,0.01)
yy=-xx*(float(w.loc[0]/w.loc[1]))+float(w.loc[2]/(-w.loc[1]))
plt.plot(xx,yy)



#%%定义sig函数
def sig(x):
#  input: x
#  output: sigmond函数值

    import numpy as np
    return 1/(1+np.exp(-x))

#%% 训练模型
def lr_train_bgd(feature,label,maxCycle,alpha):
#   利用梯度下降算法训练LR模型
#   input: feature(特征) label(标签) maxCycle(最大迭代次数) alpha(学习率)
#   output: w(权重)
   import numpy as np
   feature['bias']=np.ones((np.shape(feature)[0],1))
   n=np.shape(feature)[1]
   w=np.mat(np.ones((n,1)))
   i=0
   while i<=maxCycle:#小于最大迭代次数
     i+=1
     h=sig(np.mat(feature)*w)
     err=np.mat(label).T-h #误差
     if i%100==0:
         print ("\t-----------iter"+str(i)+\
         ",train error rate= "+str(error_rate(h,np.mat(label).T)))
     w=w+alpha*np.mat(feature).T*err
   return w

#%%error_rate函数的实现
def error_rate(h,label):
#计算当前的损失函数值
#input: h:预测值
#       label:实际值
#output:err/m : 错误率
   import numpy as np
   m=np.shape(h)[0]
   sum_err=0.0
   for i in range(m):
       if h[i,0]>0 and (1-h[i,0])>0:
           sum_err-=(label[i,0]*np.log(h[i,0])+\
                 (1-label[i,0])*np.log(1-h[i,0]))
       else:
           sum_err-=0
   return sum_err/m
样本数据在附件中,大家快下载试试吧

6. 结果


    


得到的权重为4.527177,-4.793982,1.394178


    


     

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Python 编写Logistics算法 的相关文章

随机推荐

  • 解决keil5仿真提示内存不对齐

    仿真提示 JLink Warning Mis aligned memory write Address 0x20000000 NumBytes 2 Alignment 2 Halfword aligned 解决办法 将keil安装目录D K
  • Manjaro linuxqq闪退问题

    删除配置文件即可 rm r config QQ
  • Java中的抽象类和接口有什么区别(面试题)

    Java中的抽象类和接口有什么区别 面试题 概念 对比 补充 概念 抽象类 在面向对象的概念中 所有的对象都是通过类来描绘的 但是反过来 并不是所有的类都是用来描绘对象的 如果一个类中没有包含足够的信息来描绘一个具体的对象 这样的类就是抽象
  • 【深度】区块链技术安全威胁分析(附下载)

    解码区块链 专题文章一 区块链技术安全威胁分析 2020年4月20日 国家发改委明确 新基建 定义和范围 表态 区块链 被纳入其中 为深入探索区块链技术的发展应用 挖掘对零售行业产生的影响和机遇 苏宁零售技术研究院联合业内资深学者和企业技术
  • MSP432 串口通信

    文章目录 MSP432P401R基础使用 四 串口收发 一 MSP432P401R串口资源 二 UART模式的特性 三 库函数 四 一般配置步骤 五 代码 MSP432P401R基础使用 四 串口收发 一 MSP432P401R串口资源 详
  • python中数据结构之列表,元组,字典,集合

    一 列表 列表 引入一个新的概念 数据结构 数据结构是通过某种方式组织在一起的数据元素的集合 这些数据元素可以是数字或字符 甚至可以是其他数据结构 在 python 中 最基本的数据结构是序列 序列中的每个元素匾被分配一个序号 即元素的位置
  • php://filter(文件包含漏洞利用)

    网址 index php page php filter convert base64 encode resource index php 例如 http 120 24 86 145 8005 post index php file php
  • 论文写作 计算机类顶会顶刊,及论文发表指导

    计算机方向的一些顶级会议和期刊 转载 国内的学报期刊 SCI级 但是IF比较低 也不是特别专门针对计算机视觉 物理学报 红外与毫米波学报 etc EI级 自动化学报 光学精密工程 电子学报 软件学报 计算机研究与发展 计算机学报 征稿指南
  • C#通过TCP传送结构体

    1 定义结构体 命名空间 using System Runtime InteropServices 注意这个属性不能少 StructLayoutAttribute LayoutKind Sequential CharSet CharSet
  • 元器件选型实例(如何选一款合适的 DC-DC )

    授人以鱼不如授人以渔 实际项目的元器件选型 如何选择合适的元器件 矜辰所致 目录 前言 一 应用背景 二 选型准备 2 1 考虑因素 通用因数 结合实际 2 2 初步确定方案 三 实际选型 3 1 查找目标 3 2 筛选目标 价格和库存 3
  • 设计模式详解(四)——原型模式

    一 场景问题 在电商系统中 订单服务通常是业务核心模块之一 在提交订单的过程中 往往会出现某个订单数额较大的订单 例如一些企业订单订购公司员工节假日礼品 往往会订购成千上万件 如果不做拆分 就会导致订单票据较长 此时就会有拆分订单的操作 假
  • CSS 媒体查询

  • FTPUpload

    std string g strVer Mozilla 5 0 Windows NT 6 1 WOW64 rv 13 0 Gecko 20100101 Firefox 13 0 1 size t CallBackHeader void pS
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • [vue3]vue3中引入class类的写法

    1 在src utils topu下创建一个ts文件 topu ts class Topu Topu类中涉及到的变量 都要提前在这个部分定义好 width Number 结尾必须顿号 不然报错 height Number data any
  • Android之Adapter用法总结

    1 概念 Adapter是连接后端数据和前端显示的适配器接口 是数据和UI View 之间一个重要的纽带 在常见的View ListView GridView 等地方都需要用到Adapter 如下图直观的表达了Data Adapter Vi
  • 【解决方法】Windows7 任务计划程序 “任务计划程序服务不可用。任务计划程序将尝试重新与其建立连接。”

    目录 问题背景 问题描述 折腾过程 解决方法 适用于我的解决方法 2 其他解决方法 供参考 解决方法1 3 解决方法2 4 解决方法3 4 解决方法4 5 出错原因 参考资料 问题背景 今天刚好给家里的旧电脑加上新的内存条 组了个双通道 顺
  • FTP搭建教程

    FTP搭建教程 目录 一 FTP简介 二 搭建FTP 一 FTP简介 FTP中文为文件传输协议 简称为文传协议 它也是一个应用程序 不同的操作系统有不同的FTP应用程序 这些应用程序都遵守同一种协议以传输文件 FTP主要的功能是 上传 和
  • 1011. 在 D 天内送达包裹的能力

    传送带上的包裹必须在 D 天内从一个港口运送到另一个港口 传送带上的第 i 个包裹的重量为 weights i 每一天 我们都会按给出重量的顺序往传送带上装载包裹 我们装载的重量不会超过船的最大运载重量 返回能在 D 天内将传送带上的所有包
  • 用Python 编写Logistics算法

    我们用Python来自己编写Logistics算法 首先 先将一些理论 Logistics算法用于实现线性可分的二分类问题 1 Sigmoid函数 fx 1 1 exp x Sigmoid函数是常用的阈值函数之一 函数图像如下 是不是很像累