迭代计算

100天搞定机器学习|Day57 Adaboost知识手册(理论篇)

本小妞迷上赌 提交于 2019-12-05 12:03:14
Boosting算法 Boosting是一种用来提高弱分类器准确度的算法,是将“弱学习算法“提升为“强学习算法”的过程,主要思想是“三个臭皮匠顶个诸葛亮”。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。 Boosting算法要涉及到两个部分,加法模型和前向分步算法。 加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下: $$F_M(x;P)=\sum_{m=1}^n\beta_mh(x;a_m)$$ 其中,$h(x;a_m)$就是一个个的弱分类器,$a_m$是弱分类器学习到的最优参数,$\beta_m$就是弱学习在强分类器中所占比重,$P$是所有$\alpha_m$和$\beta_m$的组合。这些弱分类器线性相加组成强分类器。 前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。也就是可以写成这样的形式: $$F_m (x)=F_{m-1}(x)+ \beta_mh_m (x;a_m)$$ 用下面的GIF看起来会更加生动 Adaboost基本概念 AdaBoost是典型的Boosting算法,属于Boosting家族的一员。 对于AdaBoost,我们要搞清楚两点: 1、每一次迭代的弱学习$h(x;a_m)$有何不一样,如何学习? 2、弱分类器权值$\beta_m$如何确定

EM算法

倖福魔咒の 提交于 2019-12-05 11:24:04
一般地,用 \(Y\) 表示观测随机变量的数据, \(Z\) 表示隐随机变量的数据, \(Y\) 和 \(Z\) 连在一起称为完全数据,观测数据 \(Y\) 又称为不完全数据。假设给定观测数据 \(Y\) ,其概率分布是 \(P(Y|\theta)\) ,其中 \(\theta\) 是需要估计的模型参数。那么不完全数据 \(Y\) 的似然函数是 \(P(Y|\theta)\) ,完全数据的联合概率分布是 \(P(Y,Z|\theta)\) 算法流程 EM算法通过迭代求 \(L(\theta)=\log P(Y|\theta)\) 的极大似然估计。每次迭代包含两步:E步,求期望;M步,求极大化: 输入:观测变量数据 \(Y\) ,隐变量数据 \(Z\) ,联合分布 \(P(Y,Z|\theta)\) ,条件分布 \(P(Z|Y,\theta)\) 输出:模型参数 \(\theta\) 选择参数的初始值 \(\theta^{(0)}\) ,开始迭代 E步:记 \(\theta^{(i)}\) 为第 \(i\) 次迭代参数 \(\theta\) 的估计值,在第 \(i+1\) 次迭代的E步,计算 \(Q\) 函数 \[\begin{aligned} Q(\theta,\theta^{(i)}) &=E_Z[\log P(Y,Z|\theta)|Y,\theta^{(i)}] \\ & =

深度学习各种优化函数详解

寵の児 提交于 2019-12-05 07:39:12
深度学习各种优化函数详解 深度学习中有众多有效的优化函数,比如应用最广泛的SGD,Adam等等,而它们有什么区别,各有什么特征呢?下面就来详细解读一下 一、先来看看有哪些优化函数 BGD 批量梯度下降 所谓的梯度下降方法是无约束条件中最常用的方法。假设f(x)是具有一阶连续偏导的函数,现在的目标是要求取最小的f(x) : min f(x) 核心思想:负梯度方向是使函数值下降最快的方向,在迭代的每一步根据负梯度的方向更新x的值,从而求得最小的f(x)。因此我们的目标就转变为求取f(x)的梯度。 当f(x)是凸函数的时候,用梯度下降的方法取得的最小值是全局最优解,但是在计算的时候,需要在每一步(xk处)计算梯度,它每更新一个参数都要遍历完整的训练集,不仅很慢,还会造成训练集太大无法加载到内存的问题,此外该方法还不支持在线更新模型。其代码表示如下: for i in range(nb_epochs): params_grad = evaluate_gradient(loss_function, data, params) params = params - learning_rate * params_grad 1 2 3 我们首先需要针对每个参数计算在整个训练集样本上的梯度,再根据设置好的学习速率进行更新。 公式表示如下: 假设h(theta)是我们需要拟合的函数,n表示参数的个数

基础之杂货铺

╄→尐↘猪︶ㄣ 提交于 2019-12-05 06:45:58
生成器 (generator) (1)列表生成式: 使代码更简洁,适合数据量比较小,如果数据量非常大,就可以用 函数 作生成器(如下例:斐波那契数列) 1 a = [i*2 for i in range(10)] 2 # 得到列表a=[0, 2, 4, ... , 18] 3 # 等价于 4 a = [] 5 for i in range(10): 6 a.append(i * 2) 7 补充:a = [该参数可以是函数 for i in range(10)] 列表生成式 (2)生成器的定义: 1) 只有 在 调用 时才会生成 相应的数据 ,一次性的【节省内存空间】,列表生成器只要把一个列表生成式的 [ ] 改成 ( ),用next()或.__next__()取值 1 c = (i*2 for i in range(10)) # 生成器 2 print(c) 3 # c: <generator object <genexpr> at 0x01E47F00> 4 for i in c: 5 print(i) 6 7 c = [i*2 for i in range(10)] # 生成式 8 print(c) 9 # c:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 列表生成器 2) 只记录 当前位置 c. __next__ () -->取下一个数据

Python17个常用内置模块总结

寵の児 提交于 2019-12-05 05:27:05
Python17个常用内置模块总结 1、getpass 2、os 3、sys 4、subprocess 5、hashlib 6、json 7、pickle 8、shutil 9、time 10、datetime 11、re 12、random 13、configparser 14、traceback 15、yaml 16、itertools 17、logging 1、getpass模块详解 pwd = getpass.getpass("请输入密码:") #输入密码不可见 yh = getpass.getuser() #显示当前登录系统用户名; 2、os模块 os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") #改变当前脚本工作目录;相当于shell下cd os.curdir #返回当前目录: ('.') os.pardir #获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') #可生成多层递归目录 os.removedirs('dirname1') #若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') #生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname'

多任务-协程

放肆的年华 提交于 2019-12-05 05:15:09
目录   迭代器   生成器   协程-yield   协程-greenlet   协程-gevent   进程、线程、协程区别    一、迭代器     迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。   1.可迭代对象     我们已经知道可以对list、tuple、str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代     但是,是否所有的数据类型都可以放到for...in...的语句中,然后让for...in...每次从中取出一条数据供我们使用,既供我们迭代吗?        >>> for i in 100:   ... print(i)   ...   Traceback (most recent call last):   File "<stdin>", line 1, in <module>   TypeError: 'int' object is not iterable   >>>   # int整型不是iterable,即int整型不是可以迭代的   # 我们自定义一个容器MyList用来存放数据,可以通过add方法向其中添加数据   >>> class MyList(object):

迭代与递归

佐手、 提交于 2019-12-05 04:35:28
迭代是逐渐逼近,用新值覆盖旧值,直到满足条件后结束,不保存中间值,空间利用率高。 递归是将一个问题分解为若干相对小一点的问题,遇到递归出口再原路返回,因此必须保存相关的中间值,这些中间值压入栈保存,问题规模较大时会占用大量内存。 迭代是更新变量的旧值。递归是在函数内部调用自身。 https://www.zhihu.com/question/20278387 表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环 算是最基础的概念, 凡是重复执行一段代码, 都可以称之为循环. 大部分的递归, 遍历, 迭代, 都是循环. 递归 的定义是, 根据一种(几种)基本情况定义的算法, 其他复杂情况都可以被逐步还原为基本情况. 在编程中的特征就是, 在函数定义内重复调用该函数. 例如斐波那契数列, 定义F(0)=1, F(1)=1, 所有其他情况: F(x)=F(x-1)+F(x-2). 所有大于1的整数经过有限次的反推之后都可以转换到两种基本情况. 而在编程中, 算法则是这样的: int F (x) { if (x==0 || x==1) return 1; //这里是退出递归的条件, 以保证在有限次递归后能够得到结果 return F(x-1)+F(x-2); //转化为更为基本的情况,

python的iterable、iterator、generator

人盡茶涼 提交于 2019-12-05 04:34:22
可迭代对象iterable 一个拥有 __iter__ 方法的对象,可以使用for循环遍历 可迭代对象有: str 、 list 、 tuple 、 dict 、 set 、 iterator 、 generator 、 file # 判断一个对象是否可迭代 >>> from collections import Iterable >>> isinstance('abc', Iterable) True >>> isinstance(100, Iterable) False 迭代器 一个实现了 __iter__ 方法和 __next__ 方法的对象,就是迭代器 迭代器是可以被 next() 函数调用并不断返回下一个值的对象 iter() 函数通过调用可迭代对象的 __iter__() 方法,获取该对象的迭代器,然后对获取到的迭代器不断使用 next() 函数来获取下一条数据 迭代器有: generator 、 iter(iterable) >>> from collections import Iterator >>> isinstance([1,2], Iterator) # 列表不是迭代器 False >>> isinstance((1,2), Iterator) False >>> isinstance([i for i in range(10)], Iterator)

生成器

别等时光非礼了梦想. 提交于 2019-12-05 04:18:56
生成器 一. 生成器的定义: 生成器的本质就是迭代器 ,在python社区中,大多数时候都把迭代器和生成器是做同一个概念。生成器和迭代器,唯一的不同就是:迭代器都是Python给你提供的已经写好的工具或者通过数据转化得来的,(比如文件句柄,iter([1,2,3])。 生成器是需要我们自己用python代码构建的工具 。最大的区别也就如此了。 二、生成器的构成 生成器表达式 通过生成器函数 python内置函数或模块提供 三、生成器函数 def func(): print(11) return 22 ret = func() print(ret) 将函数中的return换成yield,这样func就不是函数了,而是一个生成器函数 def func(): print(11) yield 22 ret = func() print(ret) 注意:结果 <generator object func at 0x031E5CB0> 执行这个函数的时候,就不再是函数的执行了,而是获取这个生成器对象. 生成器的本质就是迭代器,迭代器如果取值,生成器就如何取值 四、生成器的取值 def func(): print(11) yield 22 qener = func() # 这个时候函数不会执行,而是获取到生成器(就是那个内存地址!!) ret = next(qener) # 这个时候函数才会执行

ARIMA模型--粒子群优化算法(PSO)和遗传算法(GA)

一世执手 提交于 2019-12-05 04:07:46
ARIMA 模型 ARIMA模型(英语:AutoregressiveIntegratedMovingAverage model), 差分整合移动平均自回归模型 ,又称 整合移动平均自回归模型 (移动也可称作滑动), 时间序列 预测分析方法之一。ARIMA(p,d,q)中,AR是"自回归",p为自回归项数;MA为"滑动平均",q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。 ARIMA(p,d,q)模型是 ARMA (p,q)模型的扩展。ARIMA(p,d,q)模型可以表示为: 其中 L 是滞后算子(Lag operator), 1. 平稳性: 平稳性就是要求经由样本时间序列所得到的拟合曲线,在未来的一段时间内仍能顺着现有状态“惯性”地延续下去; 平稳性要求序列的均值和方差不发生明显变化; 方差越大,数据波动越大,方差计算公式如下式所示: 方差等于1,那么标准差也就是1,表示概率函数在对称轴左右偏差1的位置导数为0,即为拐点。期望为0,表示概率函数以y轴为对称轴。 平稳性分为严平稳和弱平稳 严平稳:严平稳表示的分布不随时间的改变而改变,如:白噪声(正态),无论怎么取,都是期望为0,方差为1; 弱平稳:期望与相关系数(依赖性)不变,未来某时刻的t值Xt就要依赖于它的过去信息,所以需要依赖性; 2. 差分法:时间序列在 t 与 t-1 时刻的差值 3. 自回归模型( AR