python:logistic,softmax函数

在学习时,经常会遇到分类的问题,简单的讲:分类就是设定一个阈值,将你想分类的对象与这个阈值进行比较,根据结果来进行决定分类。
最简单的分类函数是阶跃函数(简单粗暴)

但问题在于,这模型不够光滑,阶跃点从0到1突变,阶跃点难以处理,分类的效果也就那样。
logistic函数:一种常见的S形函数,它是皮埃尔·弗朗索瓦·韦吕勒在1844或1845年在研究它与人口增长的关系时命名的。(生物课上经常看到)

公式为:

g(z)=11+e−z

logistic函数的优点:
够光滑,取值从-∞到∞,而且每一点的导数都存在
python实现:

import numpy as np
import matplotlib.pyplot as plt
def logistic(x):
    return 1/(1+np.exp(-x))

x=np.arange(-6.0,6.0,0.1)
plt.plot(x,logistic(x).T,linewidth=2)
plt.show()

结果:

softmax函数:
本质是将一个K维的任意实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。
与logistic函数不同的是,logistic函数主要解决的是二分类问题,而softmax函数主要解决的是多分类问题
softmax函数公式:

σ(z)j=ezj∑Kk=1ezk

python代码:

import numpy as np
import matplotlib.pyplot as plt

def softmax(x):
    return np.exp(x)/np.sum(np.exp(x),axis=0)

x=np.arange(-2.0,6.0,0.1)
scores=np.stack([x,np.ones_like(x),0.2*np.ones_like(x)])
plt.plot(x,softmax(scores).T,linewidth=2)
plt.show()

结果:

logistic函数与softmax函数的区别:
softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布,
伯努利分布是一种离散分布,有两种可能的结果1和0。

pn={1−ppn=0n=1

多项式分布是二项分布的推广,有不止二种结果

softmax回归和多个logistic回归的关系:
softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;
多个logistic回归进行多分类,输出的类别并不是互斥的,即”苹果”这个词语既属于”水果”类也属于”3C”类别。

相关博客:
logistic函数和softmax函数

时间: 2024-11-10 07:47:29

python:logistic,softmax函数的相关文章

python中enumerate函数用法实例分析

  本文实例讲述了python中enumerate函数用法.分享给大家供大家参考.具体分析如下: 今日发现一个新函数 enumerate .一般情况下对一个列表或数组既要遍历索引又要遍历元素时,会这样写: ? 1 2 for i in range (0,len(list)): print i ,list[i] 但是这种方法有些累赘,使用内置enumerrate函数会有更加直接,优美的做法,先看看enumerate的定义: ? 1 2 3 4 5 6 7 def enumerate(collect

python简单的函数定义和用法实例

  这篇文章主要介绍了python简单的函数定义和用法,实例分析了Python自定义函数及其使用方法,具有一定参考借鉴价值,需要的朋友可以参考下 这里定义了一个温度转换的函数及其用法. ? 1 2 3 4 5 6 7 8 9 def convertTemp(temp, scale): if scale == "c": return (temp - 32.0) * (5.0/9.0) elif scale == "f": return temp * 9.0/5.0 +

Python中编写函数将数据库内容导入到EXCEL

继Python将数据库数据导入到EXCEL文章之后,这次来一个推进版,将其编写为函数,接着是class.哈哈.. 问过群里的朋友,他们大多采用工具将数据导入到excel,本人以前是用select ... into outfile 导出为csv格式,但是这样的数据是没有列标题的,每次手动添加.后来用过sqlyog 这个工具也没有列标题.后来改用Navicat,觉得以后可以过安稳日子啦,有一次新项目上线,运营要"全部"数据(真不知道他们怎么想的),用navicat 试了一次,慢的要死.还经

python通过floor函数舍弃小数位的方法

 这篇文章主要介绍了python通过floor函数舍弃小数位的方法,实例分析了Python中floor函数的功能及使用技巧,需要的朋友可以参考下     本文实例讲述了python通过floor函数舍弃小数位的方法.分享给大家供大家参考.具体分析如下: python中可以通过math库的floor函数来舍弃浮点数后面的小数位 ? 1 2 import math print(math.floor( x )) 例如:x=1.2,返回1.0 其返回值为浮点数,如果希望返回整数,可以写成: ? 1 2

python类和函数中使用静态变量的方法

  本文实例讲述了python类和函数中使用静态变量的方法.分享给大家供大家参考.具体分析如下: 在python的类和函数(包括λ方法)中使用静态变量似乎是件不可能[Nothing is impossible]的事, 但总有解决的办法,下面通过实现一个类或函数的累加器来介绍一些较为非主流的方法 方法一.通过类的__init__和__call__方法 ? 1 2 3 4 5 6 7 8 9 10 11 class foo: def __init__(self, n=0): self.n = n d

python使用range函数计算一组数和的方法

  这篇文章主要介绍了python使用range函数计算一组数和的方法,涉及Python中range函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python使用range函数计算一组数和的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 sum = 0 numbers = range(1,10) for i in numbers: sum += i print(sum) 运行结果为:45 希望本文所述对大家的Python程序设计有所帮助.       

Python基础07 函数

原文:Python基础07 函数 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句.   函数的定义 首先,我们要定义一个函数, 以说明这个函数的功能. def square_sum(a,b): c = a**2 + b**2 return c 这个函数的功能是求两个数的

python c++ 传参-python 调用C++函数,关于结构体传参问题

问题描述 python 调用C++函数,关于结构体传参问题 python 调用C++函数,C++函数的参数类型是pyobject*,其实是一个结构体数组 类似于 #define NUM 32 stuct A { int a; int b; }; struct B { int len; A ab[NUM]; } 请问在python中如何将这个结构体数组表示出来并传给 C++函数. 我在python中用类表示的 class A: def init(self): self.a=0 self.b=0 c

python web...-知道了python库内的函数如何知道这个函数所需要倒入的模块呢?就想c语言中的man命令一样。

问题描述 知道了python库内的函数如何知道这个函数所需要倒入的模块呢?就想c语言中的man命令一样. 知道了python库内的函数如何知道这个函数所需要倒入的模块呢?就想c语言中的man命令一样. 解决方案 为什么不直接google. 网络不好可以下载离线文档http://download.csdn.net/detail/dadoneo/3416807 解决方案二: 这是在线文档: 这里可以下载: 怎么搜都可以. 解决方案三: fxck,居然不能编辑答案.https://docs.pytho