1. 首页 > 热点 >

最小编辑距离 最小编辑距离程序

对贝叶斯、svm和神经网络的入门级理解

对贝叶斯、svm和神经网络的入门级理解

最小编辑距离 最小编辑距离程序最小编辑距离 最小编辑距离程序


在省略了不少计算、优化的过程的情况下记录了一些自己对一下三个算法整体思路和关键点的理解,因此也只能说是“入门级理解”。以下是目录索引。

朴素贝叶斯

神经网络

贝叶斯概率可以用来解决“逆概”问题,“正向概率”问题是指比如说,一个袋子中我们已知有2个白球,3个黑球,那么一次随机摸球活动,我们摸到黑球的概率是多少。但是现实中我们更常见的情况是,事先并不知道里面有多少个什么颜色的球,只知道摸出的某一个球的颜色,由此来猜测的袋中球色分布。这就是“逆概”问题。

贝叶斯公式:P(B|A) = P(AB) / P(A)

P(B|A)后验概率,在已知A发生的情况下B发生的概率

P(AB)联合概率,两件事一同发生的概率

P(A)A的边缘概率,也称先验概率,求解时通过合并无关B的概率从而将其消去,回顾一下概率论,在离散函数就是求无关B的和,连续函数中就是取B的积分。

就是在A发生的情况下,B发生的概率为A、B一同发生的概率与A单独发生的概率的比值。

贝叶斯公式看起来很简单,但是它是很有用的。举个输入错误判断的例子,如果一个人输入thew,那么我们怎么判断他到这里写的都只是入门的知识准备,svm处理数据包括线性可分和线性不可分(给定一个数据集,如果存在某个超平面能够将它们完全正确地划分到超平面的两侧,则称数据线性可分),当数据线性不可分时通过核函数使之可分,这些东西比较复杂,有望宝宝日后深究。。。。。。底是想输入the还是thaw呢?

A:已近知道的情况,在这里是”输入thew”

B1:猜测一,“想输入的是the”

B2:猜测二,“想输入thaw”

显然这里只需要比较P(AB)

但是P(AB)是什么呢,不好理解,我们再用一次贝叶斯P(AB)=P(B|A)P(B) 代入,得到P(B|A)=P(A|B)P(B)/P(A)

这里, 关键就是P(B)和P(A|B)了。P(B)理解为这个单词在词库中出现的概率,P(A|B)为想打the却打成thew的似然概率。

显然,the的曝光率应该比thaw的高,而第二个,可以从thew的编辑距离来判断,键盘上,e和w邻近,也就是说,想打the,一不小心多敲一个w的概率非常高,然而,a与e的距离就远了,也就是说,把thaw敲成thew的概率低一点。

朴素贝叶斯,在贝叶斯定理的基础上,粗暴地加上一个非常简单的假设:各属性之间相互。举个例子,现在一个事物,有很多特征n1、n2、n3……判断它属于A类还是B类或者CDF,

假设它是A类

P(A|n1,n2,……) = P(n1, n2, ….|A)P(A) / P(n1, n2, …)

分子都是一样的, P(A)是该类的频繁性(其实这里也好理解,一般太特别的情况我们总是延迟考虑嘛),在朴素贝叶斯里面,它觉得,P(n1, n2, ..|A) 就等于P(n1|A)P(n2|A)P(n3|A)…..即各个属性相互不影响,这可是一个非常大胆的假设,我们都知道事物之间总是相互联系的嘛。

svm是建立在统计学习理论的vc维理论和结构风险最小原理基础上的,根据有限的样本信息在模型复杂度和学习能力之间寻求折中。

下面来一一解释上面这短话。

vc维是对函数类的一种度量,可以简单地理解为问题的复杂程度,vc维越高,问题越复杂。svm关注vc维,也就是说svm解决问题时候也样本维数无关。

误的积累叫做风险,分类器在样本数据上的分类结果与真是数据的距就是经验风险。经验风险很低,做其他数据分类是一塌糊涂的情况称为推广能力,或范化能力。

统计学习因此引入泛化误界的概念,指真实风险应该由经验风险和置信风险(代表我们多大程度可以信任分类器的真实分类能力)组成。后者显然无法真实测量,因此只能给出一个区间。置信风险与两个量有关,一是样本数量,量越大,学习结果越可能正确,二是分类函数的vc维,此值越大,推广能力越。

泛化误界的公式为:R(w)≤Remp(w)+Ф(n/h)

R(w)为真实风险,Remp(w)是经验风险,Ф(n/h) 是置信风险,统计学习的目标从经验最小化变成了泛化风险最小化,也称,结构风险最小。

小样本,与问题的复杂度相比,svm算法要求的样本数量是比较少的

非线性:svm擅长样本数据线性不可分的情况,主要是通过松弛变量和核函数技术来实现。

高维模式识别:可以处理样本维数很高。

svm从线性可分的分类面发展而来,如果数据可以被一个线性模型完全正确地分开,那么数据就是线性可分的。

线性函数,在一维空间是一个点,二维空间是一条直线,三维空间是一个平面,如此想象写去,我们统称为超平面。

svm是分类问题,假定其分类结果,不是1就是-1,我们的线性方程是 g(x)=wx+b。假设xi,其类别为yi,如果正确分类,有wxi+b > 0,又yi>0,则 yi(wxi+b)>0,同样的,xi不属于该类时,正确判断的情况下会有: yi(wxi+b)>0。也就是说,正确判断的情况下,yi(wxi+b)一定大于0,且其值越大,表明分类效果越好(前面强调的,svm寻求间距)。那么我们看不可以拿 |yi(wxi+b)| 作为衡量依据呢?(在各种算法中,我们总是需要寻找一个方法,来衡量我们当前思路的准确性,并通过对此的调整,以达到优化我们的函数的方法)

事实上我们还需要进一步归一化,在中,如果我们同时放大w和b,函数不会变化,间距其实也没有改变,但是会变大。因此,我们让w和b除以 ||w||。得到

我们称之前的这个为函数间隔:

归一化后得到的成为几何间隔:

在前面那个图中我们看到 maragin=2/||w||

小svm支持向量积tip: ||w|| 是什么符号?

||w||叫做向量w的范数,范数是对向量长度的一种度量,我们常说的范数其实是指它的2-范数,范数最一般的表示形式为p-范数,可以写成如下表达式:

向量w=(w1, w2, w3,…wn)

它的p-范数为

||w||与几何间隔称反比,化几何间隔其实也就是最小化这个 2/||w|| ,至于为什么不处理分母,我看了很多博客,大抵解释都是“我们常用的方法并不是固定||w||的大小而寻求几何间隔,而是固定间隔(例如固定为1),寻找最小的||w||。”,后来,我在一本书上看到:

假定 b1 是类别一中离函数最近的点,b2 属于类别二中离线性函数最近的点,简言之,这两个点在两个平行于决策面的超平面上

b1: wx1+b=1

b2: wx2 +b=-1

两式相减,得到 w(x1-x2)=2,即 ||w||d=2,故间隔为 2 / ||w||

总之,我们要寻找的分类面,它必须使 2/||w|| 最小。之后各种最小化的方法这里就pass掉了。。。。。这篇有很详细的讲解,反正每种算法的过程都总是看得我森森怀疑,大一都干嘛去了,我的线代呢?高数呢?概率论呢?微积分呢?。。。。。

神经网络

每个神经元,通过某种特定的输出函数,也称激励函数,计算处理来自其他相邻神经元的加权输入值

每个神经元之间信息传递的强度,用所谓加权值来定义,算不断自我学习,调整这个加权值

分布式表征,是神经网络研究的一个核心思想。它的意思是,当你表达一个概念时,不是用单个神经元一对一地存储;概念与神经元是多对多的关系,一个概念被分散在多个神经元里,而一个神经元参与多个概念的表达。与传统的局部表征相比,存储效率高,线性增加的神经元数目,可以表达指数级增加的大量不同概念。

此外,它的另一个特点就是,即使局部出现了故障,信息的表达也不会受到根本性的影响。

根据神经元之间的互联方式,常见网络结构有,前馈神经网络,各神经元从输入层开始,接受前一层的输入,并输入到下一级,直到输出层。反馈神经网络:从输出到输入都有反馈连接的神经网络

最常用的几个python库

贝叶斯

Python常用库大全,看看有没有你需要的。

环境管理

管理 Python 版本和环境的工具

p – 非常简单的交互式 python 版本管理工具。

pyenv – 简单的 Python 版本管理工具。

Vex – 可以在虚拟环境中执行命令。

virtualenv – 创建 Python 环境的工具。

virtualenvwrapper- virtualenv 的一组扩展。

包管理

管理包和依赖的工具。

pip – Python 包和依赖关系管理工具。

pip-tools – 保证 Python 包依赖关系更新的一组工具。

conda – 跨平台,Python 二进制包管理工具。

Curdling – 管理 Python 包的命令行工具。

wheel – Python 分发的新标准,意在取代 eggs。

包仓库

本地 PyPI 仓库服务和。

warehouse – 下一代 PyPI。

Warehousebandersnatch – PyPA 提供的 PyPI 镜像工具。

devpi – PyPI 服务和打包/测试/分发工具。

分发

打包为可执行文件以便分发。

PyInstaller – 将 Python 程序转换成的执行文件(跨平台)。

dh-virtualenv – 构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。

Nuitka – 将脚本、模块、包编译成可执行文件或扩展模块。

py2app – 将 Python 脚本变为软件包(Mac OS X)。

py2exe – 将 Python 脚本变为软件包(Windows)。

pynsist – 一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。

构建工具

将源码编译成软件。

buildout – 一个构建系统,从多个组件来创建,组装和部署应用。

BitBake – 针对嵌入式 Linux 的类似 make 的构建工具。

fabricate – 对任何语言自动找到依赖关系的构建工具。

PlatformIO – 多平台命令行构建工具。

PyBuilder – 纯 Python 实现的持续化构建工具。

SCons – 软件构建工具。localshop – 本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。

交互式解析器

交互式 Python 解析器。

bpython- 界面丰富的 Python 解析器。

ptpython – 高级交互式Python解析器, 构建于python-prompt-toolkit 之上。

文件

文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。

imghdr – (Python 标准库)检测类型。

mimetypes – (Python 标准库)将文件名映射为 MIME 类型。

path.py – 对 os.path 进行封装的模块。

pathlib – (Python3.4+ 标准库)跨平台的、面向对象的路径作库。

python-magic- 文件类型检测的第三方库 libmagic 的 Python 接口。

Unipath- 用面向对象的方式作文件和目录

watchdog – 管理文件系统的 API 和 shell 工具

日期和时间

作日期和时间的类库。

arrow- 更好的 Python 日期时间作类库。

Chronyk – Python 3 的类库,用于解析手写格式的时间和日期。

dateutil – Python datetime 模块的扩展。

delorean- 解决 Python 中有关日期处理的棘手问题的库。

moment – 一个用来处理时间和日期的Python库。灵感来自于Moment.js。

PyTime – 一个简单易用的Python模块,用于通过字符串来作日期/时间。

pytz – 现代以及历史版本的世界时区定义。将时区数据库引入Python。

when.py – 提供用户友好的函数来帮助用户进行常用的日期和时间作。

文本处理

用于解析和作文本的库。

通用

chardet – 字符编码检测器,兼容 Python2 和 Python3。

difflib – (Python 标准库)帮助我们进行异化比较。

ftfy – 让Unicode文本更完整更连贯。

fuzzywuzzy – 模糊字符串匹配。

pangu.py – 在中日韩语字符和数字字母之间添加空格。

pyfiglet -figlet 的 Python实现。

shortuuid – 一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。

unidecode – Unicode 文本的 ASCII 转换形式 。

uniout – 打印可读的字符,而不是转义的字符串。

xpinyin – 一个用于把汉字转换为拼音的库。

对贝叶斯、svm和神经网络的入门级理解

信息分为三大类:输入信息,隐含信息和输出信息

对贝叶斯、svm和神经网络的入门级理解

在省略了不少计算、优化的过程的情况下记录了一些自己对一下三个算法整体思路和关键点的理解,因此也只能说是“入门级理解”。以下是目录索引。

朴素贝叶斯

神经网络

贝叶斯概率可以用来解决“逆概”问题,“正向概率”问题是指比如说,一个袋子中我们已知有2个白球,3个黑球,那么一次随机摸球活动,我们摸到黑球的概率是多少。但是现实中我们更常见的情况是,事先并不知道里面有多少个什么颜色的球,只知道摸出的某一个球的颜色,由此来猜测的袋中球色分布。这就是“逆概”问题。

贝叶斯公式:P(B|A) = P(AB) / P(A)

P(B|A)后验概率,在已知A发生的情况下B发生的概率

P(AB)联合概率,两件事一同发生的概率

P(A)A的边缘概率,也称先验概率,求解时通过合并无关B的概率从而将其消去,回顾一下概率论,在离散函数就是求无关B的和,连续函数中就是取B的积分。

就是在A发生的情况下,B发生的概率为A、B一同发生的概率与A单独发生的概率的比值。

贝叶斯公式看起来很简单,但是它是很有用的。举个输入错误判断的例子,如果一个人输入thew,那么我们怎么判断他到底是想输入the还是thaw呢?

A:已近知道的情况,在这里是”输入thew”

B1:猜测一,“想输入的是the”

B2:猜测二,“想输入thaw”

显然这里只需要比较P(AB)

但是P(AB)是什么呢,不好理解,我们再用一次贝叶斯P(AB)=P(B|A)P(B) 代入,得到P(B|A)=P(A|B)P(B)/P(A)

这里, 关键就是P(B)和P(A|B)了。P(B)理解为这个单词在词库中出现的概率,P(A|B)为想打the却打成thew的似然概率。

显然,the的曝光率应该比thaw的高,而第二个,可以从thew的编辑距离来判断,键盘上,e和w邻近,也就是说,想打the,一不小心多敲一个w的概率非常高,然而,a与e的距离就远了,也就是说,把thaw敲成thew的概率低一点。

朴素贝叶斯,在贝叶斯定理的基础上,粗暴地加上一个非常简单的假设:各属性之间相互。举个例子,现在一个事物,有很多特征n1、n2、n3……判断它属于A类还是B类或者CDF,

假设它是A类

P(A|n1,n2,……) = P(n1, n2, ….|A)P(A) / P(n1, n2, …)

分子都是一样的, P(A)是该类的频繁性(其实这里也好理解,一般太特别的情况我们总是延迟考虑嘛),在朴素贝叶斯里面,它觉得,P(n1, n2, ..|A) 就等于P(n1|A)P(n2|A)P(n3|A)…..即各个属性相互不影响,这可是一个非常大胆的假设,我们都知道事物之间总是相互联系的嘛。

svm是建立在统计学习理论的vc维理论和结构风险最小原理基础上的,根据有限的样本信息在模型复杂度和学习能力之间寻求折中。

下面来一一解释上面这短话。

vc维是对函数类的一种度量,可以简单地理解为问题的复杂程度,vc维越高,问题越复杂。svm关注vc维,也就是说svm解决问题时候也样本维数无关。

误的积累叫做风险,分类器在样本数据上的分类结果与真是数据的距就是经验风险。经验风险很低,做其他数据分类是一塌糊涂的情况称为推广能力,或范化能力。

统计学习因此引入泛化误界的概念,指真实风险应该由经验风险和置信风险(代表我们多大程度可以信任分类器的真实分类能力)组成。后者显然无法真实测量,因此只能给出一个区间。Lnshtein – 快速计算编辑距离以及字符串的相似度。置信风险与两个量有关,一是样本数量,量越大,学习结果越可能正确,二是分类函数的vc维,此值越大,推广能力越。

泛化误界的公式为:R(w)≤Remp(w)+Ф(n/h)

R(w)为真实风险,Remp(w)是经验风险,Ф(n/h) 是置信风险,统计学习的目标从经验最小化变成了泛化风险最小化,也称,结构风险最小。

小样本,与问题的复杂度相比,svm算法要求的样本数量是比较少的

非线性:svm擅长样本数据线性不可分的情况,主要是通过松弛变量和核函数技术来实现。

高维模式识别:可以处理样本维数很高。

svm从线性可分的分类面发展而来,如果数据可以被一个线性模型完全正确地分开,那么数据就是线性可分的。

线性函数,在一维空间是一个点,二维空间是一条直线,三维空间是一个平面,如此想象写去,我们统称为超平面。

svm是分类问题,假定其分类结果,不是1就是-1,我们的线性方程是 g(x)=wx+b。假设xi,其类别为yi,如果正确分类,有wxi+b > 0,又yi>0,则 yi(wxi+b)>0,同样的,xi不属于该类时,正确判断的情况下会有: yi(wxi+b)>0。也就是说,正确判断的情况下,yi(wxi+b)一定大于0,且其值越大,表明分类效果越好(前面强调的,svm寻求间距)。那么我们看不可以拿 |yi(wxi+b)| 作为衡量依据呢?(在各种算法中,我们总是需要寻找一个方法,来衡量我们当前思路的准确性,并通过对此的调整,以达到优化我们的函数的方法)

事实上我们还需要进一步归一化,在中,如果我们同时放大w和b,函数不会变化,间距其实也没有改变,但是会变大。因此,我们让w和b除以 ||w||。得到

我们称之前的这个为函数间隔:

归一化后得到的成为几何间隔:

在前面那个图中我们看到 maragin=2/||w||

小tip: ||w|| 是什么符号?

||w||叫做向量w的范数,范数是对向量长度的一种度量,我们常说的范数其实是指它的2-范数,范数最一般的表示形式为p-范数,可以写成如下表达式:

向量w=(w1, w2, w3,…wn)

它的p-范数为

||w||与几何间隔称反比,化几何间隔其实也就是最小化这个 2/||w|| ,至于为什么不处理分母,我看了很多博客,大抵解释都是“我们常用的方法并不是固定||w||的大小而寻求几何间隔,而是固定间隔(例如固定为1),寻找最小的||w||。”,后来,我在一本书上看到:

假定 b1 是类别一中离函数最近的点,b2 属于类别二中离线性函数最近的点,简言之,这两个点在两个平行于决策面的超平面上

b1: wx1+b=1

b2: wx2 +b=-1

两式相减,得到 w(x1-x2)=2,即 ||w||d=2,故间隔为 2 / ||w||

总之,我们要寻找的分类面,它必须使 2/||w|| 最小。之后各种最小化的方法这里就pass掉了。。。。。这篇有很详细的讲解,反正每种算法的过程都总是看得我森森怀疑,大一都干嘛去了,我的线代呢?高数呢?概率论呢?微积分呢?。。。。。

神经网络

每个神经元,通过某种特定的输出函数,也称激励函数,计算处理来自其他相邻神经元的加权输入值

每个神经元之间信息传递的强度,用所谓加权值来定义,算不断自我学习,调整这个加权值

分布式表征,是神经网络研究的一个核心思想。它的意思是,当你表达一个概念时,不是用单个神经元一对一地存储;概念与神经元是多对多的关系,一个概念被分散在多个神经元里,而一个神经元参与多个概念的表达。与传统的局部表征相比,存储效率高,线性增加的神经元数目,可以表达指数级增加的大量不同概念。

此外,它的另一个特点就是,即使局部出现了故障,信息的表达也不会受到根本性的影响。

根据神经元之间的互联方式,常见网络结构有,前馈神经网络,各神经元从输入层开始,接受前一层的输入,并输入到下一级,直到输出层。反馈神经网络:从输出到输入都有反馈连接的神经网络

最常用的几个python库

众多的讲解博客都会放类似的这个图,svm就是追求使所分成的类别之间能够有的间距。因此它也称为边缘分类器

Python常用库大全,看看有没有你需要的。

环境管理

管理 Python 版本和环境的工具

p – 非常简单的交互式 python 版本管理工具。

pyenv – 简单的 Python 版本管理工具。

Vex – 可以在虚拟环境中执行命令。

virtualenv – 创建 Python 环境的工具。

virtualenvwrapper- virtualenv 的一组扩展。

包管理

管理包和依赖的工IPython – 功能丰富的工具,非常有效的使用交互式 Python。具。

pip – Python 包和依赖关系管理工具。

pip-tools – 保证 Python 包依赖关系更新的一组工具。

conda – 跨平台,Python 二进制包管理工具。

Curdling – 管理 Python 包的命令行工具。

wheel – Python 分发的新标准,意在取代 eggs。

包仓库

本地 PyPI 仓库服务和。

warehouse – 下一代 PyPI。

Warehousebandersnatch – PyPA 提供的 PyPI 镜像工具。

devpi – PyPI 服务和打包/测试/分发工具。

分发

打包为可执行文件以便分发。

PyInstaller – 将 Python 程序转换成的执行文件(跨平台)。

dh-virtualenv – 构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。

Nuitka – 将脚本、模块、包编译成可执行文件或扩展模块。

py2app – 将 Python 脚本变为软件包(Mac OS X)。

py2exe – 将 Python 脚本变为软件包(Windows)。

pynsist – 一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。

构建工具

将源码编译成软件。

buildout – 一个构建系统,从多个组件来创建,组装和部署应用。

BitBake – 针对嵌入式 Linux 的类似 make 的构建工具。

fabricate – 对任何语言自动找到依赖关系的构建工具。

PlatformIO – 多平台命令行构建工具。

PyBuilder – 纯 Python 实现的持续化构建工具。

SCons – 软件构建工具。

交互式解析器

交互式 Python 解析器。

bpython- 界面丰富的 Python 解析器。

ptpython – 高级交互式Python解析器, 构建于python-prompt-toolkit 之上。

文件

文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。

imghdr – (Python 标准库)检测类型。

mimetypes – (Python 标准库)将文件名映射为 MIME 类型。

path.py – 对 os.path 进行封装的模块。

pathlib – (Python3.4+ 标准库)跨平台的、面向对象的路径作库。

python-magic- 文件类型检测的第三方库 libmagic 的 Python 接口。

Unipath- 用面向对象的方式作文件和目录

watchdog – 管理文件系统的 API 和 shell 工具

日期和时间

作日期和时间的类库。

arrow- 更好的 Python 日期时间作类库。

Chronyk – Python 3 的类库,用于解析手写格式的时间和日期。

dateutil – Python datetime 模块的扩展。

delorean- 解决 Python 中有关日期处理的棘手问题的库。

moment – 一个用来处理时间和日期的Python库。灵感来自于Moment.js。

PyTime – 一个简单易用的Python模块,用于通过字符串来作日期/时间。

pytz – 现代以及历史版本的世界时区定义。将时区数据库引入Python。

when.py – 提供用户友好的函数来帮助用户进行常用的日期和时间作。

文本处理

用于解析和作文本的库。

通用

chardet – 字符编码检测器,兼容 Python2 和 Python3。

difflib – (Python 标准库)帮助我们进行异化比较。

ftfy – 让Unicode文本更完整更连贯。

fuzzywuzzy – 模糊字符串匹配。

pangu.py – 在中日韩语字符和数字字母之间添加空格。

pyfiglet -figlet 的 Python实现。

shortuuid – 一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。

unidecode – Unicode 文本的 ASCII 转换形式 。

uniout – 打印可读的字符,而不是转义的字符串。

xpinyin – 一个用于把汉字转换为拼音的库。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 12345678@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息