Python 揭秘斐波那契定律,如何帮助码农分析股票

期货量化交易软件策略:斐波那契交易系统 我们将采用两种方法,第一种是取最后的日线数据来绘制我们的斐波那契水平,另一种是取预定数量的蜡烛作为数组以备它用。正如我们在这里提到的,赫兹量化软件将在数组中使用特定数量的蜡烛,并确定第一根蜡烛的开盘价、最后一根蜡烛的收盘价、最高值和最低值。根据该数组的走势类型,我们将绘制斐波那契对象,并获得所需的信号。正如我们在这里提到的,赫兹量化软件将取用日线最后一根蜡烛,并确定其开盘价、收盘价、最高价和最低价。根据最后一根日线蜡烛的走势类型,我们将绘制斐波那契对象,并获得所需的信号。 阅读详情

 

 

 

 

 

剖析斐波那契数列

Python学习交流群:1004391443

对于斐波那契数列相信大家并不陌生,它指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、55、89、144、233…………这个数列究竟蕴含着什么秘密呢?我们从以下三个问题展开对斐波那契数列的剖析:

(1) 斐波那契数列是怎么由来的?

斐波那契数列是由意大利中世纪数学家斐波那契(Fibonacci,公元1175-1240)在他1202年著作的《算盘书》(Liber Abaci)中以兔子繁殖为例子所引出的。

在书中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔,再过一个月就能生下一对小兔,并且此后每个月都生一对小兔,一年内没有发生死亡,那么一对刚出生的兔子,在一年内繁殖成多少对兔子?

依照假定条件计算,第一个月是一对兔子,第二个月长成了大兔,第三个月生下一对小兔总共由两对兔子……

在并不知晓斐波那契数列隐含的规律情况下,我们手动推算得到了一年内兔子繁殖的情况,如下图所示: 

 

 

 

 

 

由该繁衍规律得到的每个月兔子的数量组成了斐波那契数列,因此也称为“兔子数列”。

发生在18世纪中期的澳大利亚野兔成灾的故事体现了真实版的“兔子数列”惊人的增长速度。

当时英国殖民者为了满足自己的狩猎爱好把欧洲野兔引进了澳大利亚,由于澳大利亚气候温暖、牧草丰富,为兔子提供了良好的生存条件,加上澳大利亚本土缺乏猛禽、黄鼠狼等兔子的天敌,兔子开启了斐波那契数列式的增长,当时澳大利亚的生态遭到了严重破坏,继而开始了人兔大战……接下来让我们逐步揭开斐波那契数列的秘密。

(2) 斐波那契数列的规律是什么?

从[0、1、1、2、3、5、8、13、21、34、55、89、144、233…………]这个序列中可以发现,第一个元素为0,第二个元素为1,之后的每一个元素为之前两个元素之和。在数学上,我们可以用递归的方法来定义斐波纳契数列的生成规律,如下所示:

  • 当n=0时,F(n)=0
  •  
  • 当n=1时,F(n)=1
  •  
  • 当n>1时,F(n)= F(n-1)+ F(n-2)

(3) 斐波那契数列神奇之处在哪?

斐波那契数列存在许多神奇的性质,我们不妨对斐波那契数列中相邻的两个数求商值。当前一个数值除以后一个数值时可以得到以下的结果: 

0 ÷ 1 = 0

1 ÷ 1 = 1

1 ÷ 2 = 0.5

2 ÷ 3 = 0.6666…

3 ÷ 5 = 0.6

5 ÷ 8 = 0.625

8 ÷ 13 = 0.615…

13 ÷ 21 = 0.619…

21 ÷ 34 = 0.617…

34 ÷ 55 = 0.618…

55 ÷ 89 = 0.617…

89 ÷ 144 = 0.618…

144 ÷ 233 = 0.618…

……

我们注意到从21除以34开始以至于到数列的无穷大,商值是趋于0.618的一个无理数!

反过来当后一个数值除以其前面的数值时得到的结果如下所示:

1 ÷ 0 = 0

1 ÷ 1 = 1

2 ÷ 1 = 2

3 ÷ 2 = 1.5

5 ÷ 3 = 1.67

8 ÷ 5 = 1.6

13 ÷ 8 = 1.625

21 ÷ 13 = 1.615…

34 ÷ 21 = 1.619…

55 ÷ 34 = 1.618…

89 ÷ 55 = 1.618…

144 ÷ 89 = 1.618… 

相应的从34除以21开始直到数列无穷大,商值是趋于1.618的一个无理数!0.618与1.618彼此出奇的互为倒数,并且0.618这个数值正是有名的“黄金分割”比例!这也是斐波那契数列又称为黄金分割数列的原因。

实际上黄金分割的提出要远早于斐波那契数列。假设线段总长为1,在线段上找到一个黄金分割点,将线段分割为A和B两部分,B的长度为x,A的长度为1-x,如下图所示: 

 

 

 

 

 

A与B的长度之比等于B与全长的比,这个比例就为黄金分割,比例关系如下所示: 

 

 

 

 

 

对该公式进行转换,并求出x值,如下所示: 

 

 

 

 

 

于是B与全长的比为0.618,B与A的长度比为1.618,实际上它们指的是同样线段的黄金分割比例。

 

 

 

 

 

 Python验证数列的神奇

 

对于枯燥而繁琐的计算类工作理应交给Python来做!上文提到斐波纳契数列的生成规律是由递归方法来定义的,因此用Python递归函数生成数列会更直观、更容易理解。代码如下所示:

def Fibonacci_Generate(n):
    if n < 0:
        print('Input value is error')
        return -1
    elif n == 0:return 0
    elif n == 1:return 1
    else:
        return Fibonacci_Generate(n-1)+ Fibonacci_Generate(n-2)

分别绘制出包含10项和30项数值的斐波那契数列增长曲线,如下图所示。 

 

 

 

 

 

 

 

 

 

绘制斐波那契数列增长曲线代码如下所示:

def Fibonacci_sequence(n):
    fibs_list = []
    for i in np.arange(0, n): fibs_list.append(Fibonacci_Generate(i))
    plt.plot(np.arange(n), fibs_list, c='g', marker='o', ls='dashed' )
    plt.title("Fibonacci sequence:{}".format(n))
    plt.show()

从图中斐波那契数列增长形式上可以看出,数列在初期增长缓慢,之后呈现出以1.618为底数的指数增长速度。

虽然使用递归函数生成数列优点是定义简单,逻辑清晰,不过缺点是实现的效率极低,并且深层次递归调用时会导致栈溢出。

我们采用Python内置time模块来测试下递归函数生成30项斐波那契数列所开销时间。分别在代码的开始和结束处添加time.perf_counter()函数,用于返回系统的运行时间,由于返回值的基准点是未定义的,所以只有连续调用的结果之差才是有效的代码开销时间。我们测得的执行时间为2.918秒。代码如下所示:

start = time.perf_counter()
for i in np.arange(0, n): fibs_list.append(Fibonacci_Generate(i))
elapsed = (time.perf_counter() - start)
print("Time used:", elapsed)#Time used: 2.917980852

理论上,所有的递归函数都可以写成循环的方式,虽然循环的逻辑不如递归清晰,但在执行效率上循环优势明显,改用循环方式后所测得的执行时间仅仅为16.44微秒。代码如下所示:

# 使用循环
def Fibonacci_Generate_Loop(n):
    if n < 0:
        print('Input value is error')
        return -1
    elif n == 0:return [0]
    elif n == 1:return [0,1]
    else:
        result_list = [0,1]
        a, b = 0, 1
        for i in range(2, n + 1):
            a, b = b, a + b
            result_list.append(b)
        return result_list

在使用循环方式生成斐波那契数列时,必须要用列表来存储每次计算得到的数值,为了让代码优雅起来,我们可以使用生成器来优化。所谓生成器其实是一种特殊的迭代器,内部支持了迭代器协议。

Python中提供生成器函数和生成器表达式两种方式实现生成器,每次请求返回一个结果,不需要一次性构建一个结果列表,节省了内存空间。此处我们使用生成器函数方式实现生成器,这种方式编写为常规的def语句,使用yield语句一次返回一个结果,在每个结果之间挂起和继续它们的状态。代码如下所示:

# 使用iterrows()
def Fibonacci_Generate_iter(n):
    if n < 0:
        print('Input value is error')
        return -1
    elif n == 0:return [0]
    elif n == 1:return [0,1]
    else:
        a, b = 0, 1
        yield a
        yield b
        for i in range(2, n + 1):
            a, b = b, a + b
            yield b

上文还提到了斐波那契数列前一个数值除以后一个数值时,随着数列的增长,商值为是趋于0.618的一个无理数。接下来我们用Python验证一下。实现代码如下所示:

def Fibonacci_divide(seq):
    div_list = []
    for i in np.arange(0, len(seq)-1):
        div_list.append(seq[i]/seq[i+1])
    plt.plot(np.arange(len(div_list)), div_list, c='g', marker='o', ls='dashed' )
    plt.title("Fibonacci Fn/Fn+1:{}".format(div_list[-1]))
    plt.show()
Fibonacci_divide(list(Fibonacci_Generate_iter(100)))

我们得到了斐波那契数列的Fn/Fn+1的前100项的结果,如下图所示。从图中可知,第八项与第九项的比值开始,之后的数值都趋于0.618左右。 

 

 

 

 

 

因此再一次验证得到斐波那契数列是近似指数增长的形式,为了更确切的说明这个问题,我们看一下由数学家比内建立的斐波那契数列的通项公式,如下所示: 

 

 

 

 

 

由通项公式计算Fn/Fn+1的结果依然是0.618,如下所示:

 

 

 

 

 

 

 

 

 

 

 

 黄金分割率分析股价

 

斐波那契数列是大自然的一个基本属性,尤其是数列中的黄金分割比例部分,它出现在绘画、雕塑、建筑等多个领域,人们不约而同地认为黄金分割比例是最完美的。

比如“断臂的维纳斯”雕塑,身高2.02米,她的肚脐正是黄金分割点,肚脐以上部分和肚脐以下部分之比接近于0.618。可见黄金分割比例是作用在人们潜意识中的一种客观规律,有着极强的自然属性,当然也包括在股市的分析中:股价一直遵循着高低相间的运行规律。

当股价走势出现反转时极有可能在黄金分割比例0.382、 0.618上遇到暂时的阻力或支撑,因此通过黄金分割比例寻找出上涨/下跌趋势中的压力位和支撑位,有助于交易者更好地判断“入场”和“出场”的时机。

接下来以股票“新希望”的历史数据为例,寻找股价的支撑位和压力位。“新希望” 2019年1月至2019年6月的走势图如下所示: 

 

 

 

 

 

通常股价的拉升不会一步到位,大多采用螺旋式上涨,也就是说在新的上涨前,要有一波回撤,洗去浮动的筹码来蓄势待发,而回撤的幅度恰好符合黄金分割的比例0.618。

“新希望”这半年期间股价呈上涨趋势,中途有几次短暂的回撤走势,我们用黄金分割比例来计算下回撤的位置。计算公式为(最大值-最小值)*黄金分割比例+最小值,实现方法如下所示:

Fib_max = df_stockload.Close.max()
Fib_maxid = df_stockload.index.get_loc(df_stockload.Close.idxmax())
Fib_min = df_stockload.Close.min()
Fib_minid = df_stockload.index.get_loc(df_stockload.Close.idxmin())
Fib_382 = (Fib_max - Fib_min) * 0.382 + Fib_min
Fib_618 = (Fib_max - Fib_min) * 0.618 + Fib_min

接下来验证黄金分割比例判断支撑/阻力位的有效性,如下图所示,第一轮回撤位置正好在黄金分割率0.618所处位置,即11.61。

 

 

 

 

 

 

 

 

 

 

 

总结

 

本文以股价分析为应用场景介绍了斐波那契数列的神奇特征,尽管斐波那契的黄金分割线可以帮助交易者提高判断支撑位或阻力位的成功率。

但和其他的技术分析工具一样,它也存在一定的局限性,比如单纯以波段高点和波段低点的差值作为基准这个方式,在波动较大或者区间震荡持续较久的行情下可靠性会降低,改进的方法可以将股价按序列值大小排序,取黄金分割比例所对应位置上的序列值,这样可靠性会更高。

 

Python --相似K线匹配--实现股票走势预测 Tushare Python --相似K线匹配–实现股票走势预测 Tushare 前言 同花顺和东方财富都提供了一个免费的功能可以查找相似走势的K线,提供参考。差不多,东方财富可以选择分析的周期,同花顺是固定120日的分析周期。我们可以通过tushare的数据源获取历史交易数据自己实现一个类似功能。 一、获取历史交易数据 1.引入库,读取历史交易数据 Tushare是一个免费、开源的python财经数据接口包。注册用户后到个人中心改一下名字获取积分,基本的功能都可以用了。大家可以用我的邀请码注册 ①首先要安装tus 阅读详情

相关推荐

python波峰波谷算法_利用“偏度系数”进行“低买高卖”择时(附Python代码)

点及财经,股票期货专业投机者。前言“低买高卖”,是每一位交易者内心一直所追寻的。有的人认为,“抄底摸顶”是完全不可能的事情,因为如果每个人都去“低买高卖”,那价格走势应该是一种什么状态?无法想象!这样的思想也不无道理,只是忽略了一些东西。虽然,策略做不到每笔都能够“抄底摸顶”成功,但是,只要“概率”上能站在我们这边,就可以尽可能“接近”这一目标。因为,交易最终的目的是赚钱,过程真的不重要!“抄底摸...

weixin_39897449的博客 2715

Python 揭秘斐波那契定律,如何帮助码农分析股票?| 技术头条

作者 | 元宵大师 责编 | 胡巍巍 剖析斐波那契数列 对于斐波那契数列相信大家并不陌生,它指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、55、89、144、233…………这个数列究竟蕴含着什么秘密呢?我们从以下三个问题展开对斐波那契数列的剖析: (1)斐波那契数列是怎么由来的? 斐波那契数列是由意大利中世纪数学家斐波那契(Fibonacci,公元...

优快云资讯 2159

【Python】用A股当天收盘价去计算下一个交易日涨停价格

A股涨停的价格,不一定正好是10%,而是最靠近10%的数值,因为股价只精确到0.01,没有0.001这个数值,所以,经常会出现不是10%的情况,如下图所示: Python里的… round这个函数,说实话是真的坑…,第三位小数为5的时候,round(x,2),会出现比如 PS C:\Users\Yu> python3 Python 3.6.0 (v3.6.0:41df79263a11, De...

10相濡以沫 3545

python量化交易第四章

一.数据准备:本地化股票数据 1.1为什么要创建股票数据库 数据费用->按数据量收费,每日更新增量数据 获取速度->本地直接获取>远程访问服务器 1.2如何创建,更新股票数据库 存储方式->股票代码.csv,MySql,MangoDB等数据库 实现思路: 1.获取股票列表 2.依次存储股票数据 3.每天以增量形式更新数据 每天以增量形式更新数据 -> 如何追加数据:df.to_csv(mode=‘a’) 重复获取了怎么办:df.drop_duplicat

weixin_43853077的博客 2178

Python对股票模型数据分析实例

一、交易准则 在开始之前,我们应该了解最基础的交易系统是什么样,明白自己的交易准则是什么,确定一个自己的交易依据。比如以下六个方面: 1)市场----买卖什么 2)头寸规模----买卖多少 3)入市----何时买入 4)止损----何时退出亏损的头寸 5)止盈----何时退出盈利的头寸 6)离市----何时离市 二、简单的示例 1)买卖A股 2)全仓 3)当日涨幅超过3%买入。 4)当持有头寸亏损超过3%,平仓 5)当日跌幅大于3%或者三个连续阴线 ...

weixin_56537083的博客 4825

python计算股票趋势_量化交易之股票选股因子——走势线性回归

Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待4999元包邮去购买 >前言“回归”一词是由英国著名统计学家Francils Galton提出来的。1889年,他在研究祖先与后代身高之间的关系时发现,身材较高的父母,他们的孩子也较高,但这些孩子的平均身高并没有他们父母的平均身高高;身材较矮的父母,他们的孩子也较矮,但这些孩子的平均身高却比他们父...

weixin_39806603的博客 970

斐波那契数列的性质定理全集

定义: f(x)={0x=1,21x≥3f(x)= \begin{cases} 0& \text{x=1,2}\\ 1& x \ge 3 \end{cases}f(x)={01​x=1,2x≥3​ 性质: f(x)2−f(x−1)f(x+1)=(−1)x−1,x≥2f(x)^{2}-f(x-1)f(x+1)=(-1)^{x-1},x \ge 2f(x)2−f(x−1)f(x+1)...

txltxl0483的博客 2374

用 Python 算法识别股价支撑位和阻力位

支撑位和阻力位是技术分析的基石。在本文中,我们深入研究了各种方法,从传统的枢轴点到更先进的技术,例如 K 均值聚类和多项式回归。这些方法的多功能性使交易者能够全面了解潜在的价格障碍。

探索人工智能领域 2304

python计算股票波动率_构建防御性票组合----利用波动率选股

weixin_39902472的博客 817

从零开始:如何在Windows上搭建Airsim仿真环境(避坑指南)

本文是一份详细的Windows平台AirSim仿真环境搭建指南。文章从硬件要求、Visual Studio与虚幻引擎安装开始,逐步讲解AirSim插件编译、UE项目配置,并重点介绍了通过WSL2连接PX4飞控软件实现软件在环仿真的完整流程。内容涵盖常见问题排查与性能优化,旨在帮助开发者避开常见陷阱,高效构建可用于无人机算法开发的虚拟测试平台。

earth的博客 307

大漠多线程增强版:解决窗口消失、坐标错乱与识别卡死

多线程环境下窗口自动化面临的核心挑战,本质是GDI资源非线程安全、HWND生命周期失控及图像引擎状态污染三大底层问题。Windows GUI编程中,跨线程共享hDC、缓存失效的窗口句柄、OpenCV静态Mat等设计缺陷,导致FindPic失败、GetCursorPos异常、坐标跳变等典型故障。本方案通过线程局部存储(TLS)重构资源生命周期、WinEventHook+心跳探测构建实时窗口状态链、ABI对齐的多语言内存契约,实现稳定低延迟的并发UI识别与控制。适用于游戏多开监控、电商RPA、后台UI状态采集等

weixin_30561177的博客 477

斐波那契常见规律(总结)

斐波那契数列规律总结 随着数列项数的增加,前一项与后一项之比越来越逼近黄金分割的数值0.6180339887.. 从第二项开始,每个奇数项的平方都比前后两项之积多1,每个偶数项的平方都比前后两项之积少1。(注:奇数项和偶数项是指项数的奇偶,而并不是指数列的数字本身的奇偶,比如第五项的平方比前后两项之积多1,第四项的平方比前后两项之积少1) 斐波那契数列的第n项同时也代表了集合{1,2,…,n}...

神回 2万+

别再混淆了!一文彻底搞懂STM32的BootROM、BootLoader和启动模式(附启动流程图)

本文深入解析STM32的启动机制,详细讲解BootROM、BootLoader与启动模式的区别与联系,并提供实战指南。通过清晰的启动流程图和配置示例,帮助开发者彻底理解STM32启动流程,解决常见的启动问题,提升嵌入式开发效率。

weixin_33728268的博客 538

利用tushare获取股票数据进行一元线性回归-基于Python

基于Pyhton-用tushare进行线性回归

m0_53789767的博客 1632

Anaconda创建python环境常见命令

Anaconda功能庞大,其可以理解为一个工具,也是一个可执行命令。Anaconda可以创建多个python环境,且python环境间相互独立。

m0_59405106的博客 1万+

射频工程师必须了解的S参数四项要点

本文围绕单端 6 英寸走线的 S 参数展开深入分析,核心包含四项关键要点:低频下导线电学长度远小于信号波长,S11 呈大负分贝值、S21 接近 0 分贝;端口与走线的阻抗不匹配引发反射叠加,形成 S11 首个峰值(对应传输线四分之一波长频率);S21 相位可作为一致性检查依据,其 90° 相位差与 S11 峰值吻合;理想建模中 S11 峰值随频率上升因损耗下降,实际测量因连接器等阻抗不连续性,S11 会出现振荡上升。分析依托 Keysight ADS 工具与电磁求解器原理,为 S 参数解读提供科学支撑。

一只豌豆象的博客 1285

使用Python计算股票K线图缺口

​缺口,本人理解就是高开或者低开。高开就是跳高缺口,低开就是跳低缺口。不过从技术面上说有一套比较完整的缺口理论,感兴趣的可以手动百度。之所以形成缺口,之前本人另一篇博客《使用Python统计股票高开后的走势》提及过,股票的开盘价是由集合竞价机制决定的,当开盘前有一帮人愿意以高出昨日收盘价的价格购买股票,且数量比开盘前想要卖出股票的人多,那么股票价格就会高开。但是,有趣的不是缺口的形成,而是大A另一个不成文的规矩:缺口必补。当股价出现缺口,经过几天,甚至更长时间的变动后,然后反转过来,回到原来缺

XL-STUDIO 1256

YOLOv8改进,YOLOv8添加DCNv4可变性卷积(windows系统成功编译),全网最详细教程

DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以最小化冗余操作,从而加速计算。这些改进使得DCNv4相比DCNv3显著加快了收敛速度,并且处理速度大幅提升,前向传播速度超过三倍。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6472

python金融量化——股票数据分割+计算单支股票利益率曲线(代码)

【代码】python金融量化——股票数据分割+计算单支股票利益率曲线(代码)

长弓同学的python学习笔记 1054

在Android中实现SIM卡的读写操作

在上述代码中,我们创建了一个PhoneStateListener的实例,并重写了onSimStateChanged方法来处理SIM卡状态改变的事件。然后,我们通过调用telephonyManager的listen方法注册了这个监听器,并指定了要监听的事件类型为SIM卡状态的改变。在上述代码中,我们调用telephonyManager的sendUssdRequest方法来发送USSD命令,并通过TelephonyManager.UssdResponseCallback来处理USSD响应和发送失败的情况。

2301_79326510的博客 927

Open3D点云算法与点云深度学习案例汇总(长期更新)

Open3D-python算法专栏文章汇总,长期更新算法原理与实战案例。

纵马踏花向自由 7471

[Pytorch系列-55]:循环神经网络 - 使用LSTM网络对股票走势进行预测

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_优快云博客 本文网址: 目录 第1章 LSTM神经网络理论基础 第2章 业务说明 2.1 业务说明 2.2 环境准备 第3章 构建训练和测试数据集 3.1 下载并查看股票数据 3.2根据序列的长度, 把数据集,构建成序列数据集 3.3划分训练集,验证集 3.4构造数据迭代器dataloader 第4章 构建LSTM网络 4.1 定义网络 4.2 实例化网络 4.3 loss和优化器 第5章 ...

文火冰糖(王文兵)的博客 3749

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

python2.7 实现的实时监控指定股票价格的小程序

本文介绍一个简单的股票价格获取小工具的实现,该工具会根据输入的股票代码显示当前时间的股票价格,定时刷新,间隔时间为1s,实现思路为分析股票网站的内容,利用爬虫技术获取股票价格信息,之后编码实现GUI界面,最后打包成可执行文件。 主要涉及到的python 库有 Tkinter ,urllib2,sys,time以及Python 打包工具pyinstaller

henry的专栏 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Python股票量化投资课学习—单均线双均线策略

当前天的15日均价大于昨天的15日均价,且昨天的15日均价小于今天的15日均价时,出现买入信号。# 当前天的15日均价小于昨天的15日均价,且昨天的15日均价大于今天的15日均价时,出现卖出信号。# 买入信号出现时,发送买入指令,系统自动执行买入交易。# 卖出信号出现时,发送卖出指令,系统自动执行卖出交易。# 卖出信号出现时,发送卖出指令,系统自动执行卖出交易。# 买入信号出现时,发送买入指令,系统自动执行买入交易。# 判断是否持仓,如果持仓,则判断是否是否卖出信号。具体内容:金叉买进死叉卖出。...

可爱是名词吗? 1769

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python 量化(一)分析股票上涨的重现周期

import tushare as ts df=ts.get_hist_data('002230') #df1=ts.get_hist_data('000002',start='2017-04-25',end='2017-06-30') print(df.columns) df2=df[df['p_change']&gt;3] df3=df2[['open','high','clos...

luoganttcc的博客 2705

用聚类算法计算股票的支撑位和阻力位

本文将向您展示如何使用不同的聚类算法计算股票支撑位和阻力位。股票数据 - 我在 mongoDB 数据库中有股票数据。您还可以免费从雅虎财经获取这些数据。Python 连接 MongoDB ...

Python中文社区 3780
上一篇: Python自动抢红包,超详细教程,再也不会错过微信红包了!
下一篇: Python3 模拟登录并爬取表格数据!
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值