中企动力 > 商学院 > 量化教程
  • ?

    教程 | 如何构建自定义人脸识别数据集

    Cui

    展开

    选自pyimagesearch

    作者:Adrian Rosebrock

    机器之心编译

    参与:Geek AI、路

    本文介绍了构建自定义人脸识别数据集的三种方法:使用 OpenCV 和 webcam 工具收集人脸图像数据;以编程的方式下载人脸图像;手动收集人脸图像。

    在接下来的几篇博文中,作者将带领大家训练一个「计算机视觉+深度学习」的模型来执行人脸识别任务。但是,要想训练出能够识别图像或视频流中人脸的模型,我们首先得收集人脸图像的数据集。

    如果你使用的是「Labeled Faces in the Wild」(LFW)这样预先准备好的数据集,那么你可以不用进行这项困难的工作了。你可以使用我们下一篇博文中的方法创建自己的人脸识别应用。

    然而,对于大多数人来说,我们希望识别出的人脸往往不包含在任何现有数据集中,例如:我们自己的、朋友的、家人或者同事的人脸图像。

    为了完成这个任务,我们需要收集我们想要识别的人脸样本,并且以某种方式量化它们。

    这个过程通常被称为「人脸识别注册」(facial recognition enrollment)。我们称之为「注册」是因为在这个过程中,我们会将用户注册、登记为我们的数据集和应用中的一个真人样本。

    本文将介绍注册过程的第一步:创建自定义人脸识别数据集。

    如何创建自定义人脸识别数据集

    本教程中,我们将介绍 3 种创建自定义人脸识别数据集的方法。第一种方法使用 OpenCV 和 webcam 工具完成两个任务:(1)在视频中检测出人脸;(2)将人脸图像或视频帧的样本保存到磁盘上。

    第二种方法将讨论如何以编程的方式下载人脸图像。

    最后,我们将讨论如何手动收集人脸图像,以及这种方法何时是适用的。

    让我们开始构建人脸识别数据集吧!

    方法 1:通过 OpenCV 和 webcam 进行人脸注册

    图 1:通过使用 OpenCV 和 webcam,我们可以检测出视频流中的人脸,并且将样本存储到磁盘上。这个过程可用于创建一个本地人脸识别数据集。

    这种方法适用于以下情况:

    1. 你要创建一个」能现场使用的」人脸识别系统;

    2. 你需要拥有接触特定人的物理途径,以收集他们的人脸图像数据。

    这样的系统尤其适用于公司、学校或者其他人们每天亲自出现在现场的组织。

    为了收集这些人的人脸图像样本,我们可能需要将他们置于一个特殊的房间中,房间中事先安装好了视频摄影机,用于:(1)检测视频流中人脸的 (x, y) 坐标;(2)将包含用户人脸的视频帧写入磁盘。我们可能甚至需要好几天或者几周的时间执行上述操作,以收集下列几种情况下的人脸样本:

    不同的光照条件一天中不同的时间不同的情绪和情感状态

    通过收集不同情况下的人脸样本,我们可以创建一个更加多样化、更具代表性的特定用户人脸图像数据集。

    接下来,我们使用一个简单的 Python 脚本构建自定义人脸识别数据集。这个 Python 脚本可以完成以下任务:

    1. 连接到我们的 webcam;

    2. 检测人脸;

    3. 将包含人脸的视频帧写入磁盘。

    想要获取本文中使用的代码,请滚动到本文的「Downloads」部分。

    准备好之后,请打开 build_face_dataset.py 文件,然后我们来一步一步解读这份代码:

    在 2-7 行中,我们导入了所需程序包。尤其是我们所需要的 Opencv 和 imutils 包。安装 Opencv 的方法请参考我提供的这篇安装指南(https://pyimagesearch/opencv-tutorials-resources-guides/)。而 imutils 包则可以很容易地通过 pip 工具进行安装或升级:

    $ pip install --upgrade imutils

    如果你使用的是 Python 虚拟环境,请不要忘记使用 workon 命令!

    环境安装好之后,我们接下来将讨论两个需要用到的命令行参数:

    命令行参数会在运行时被一个名为 argparse 的程序包(这个程序包会在安装 Python 环境时被自动安装)解析。如果你对于 argparse 和命令行参数不太熟悉,我强烈推荐你迅速浏览这篇博文(https://pyimagesearch/2018/03/12/python-argparse-command-line-arguments/)。

    我们有两个需要用到的命令行参数:

    --cascade:哈尔级联(Haar cascade)文件在磁盘上的路径。--output:输出文件夹的路径。人脸图像会被存储在这个文件夹中,因此我推荐你用人脸主人的名字来命名这个文件夹。例如,如果你收集的是「John Smith」的人脸图像,你可以将所有的图片存放在 dataset/john_smith 文件夹中。

    下面,我们将加载人脸的哈尔级联文件并且初始化视频流:

    在第 18 行中,我们加载了 OpenCV 的哈尔级联 detector。这个 detector 会在接下来的逐帧循环中完成繁重的任务。

    我们在第 24 行初始化并开始我们的视频流。

    注意:如果你使用的是树莓派,请注释掉第 24 行,并且取消第 25 行的注释。

    为了让摄像头预热,我们简单地将程序暂停 2 秒(第 26 行)。

    我们还初始化了一个计数器 total,用于表示在磁盘上存储的人脸图像数量(第 27 行)。

    现在让我们在视频流上进行逐帧循环:

    在第 30 行中,我们开始循环(按下「q」键则退出循环)。

    从这一行起,我们获取了一个视频帧 frame,创建了该帧的一个副本,并且改变了图像的尺寸(第 34-36 行)。

    现在,是时候执行人脸检测了!

    我们可以使用 detectMultiScale 方法检测视频帧 frame 中的人脸。该函数需要用到下列参数:

    image:一个灰度图;scaleFactor:指定在每个尺度上,图像缩小多少;minNeighbor:为了保证检测的有效性,该参数指定每一个候选矩形边界框需要有多少相邻的检测点;minSize:可能的最小图片尺寸。

    不幸的是,有时我们需要对这种方法进行调优,以消除误判或者检测出一张完整的人脸,但是对于「近距离」拍摄的人脸图像的检测来说,这些参数是一个很好的起点。

    话虽如此,你是否也在寻找一种更加先进、更加可靠的方法呢?在之前的博文中(https://pyimagesearch/2018/02/26/face-detection-with-opencv-and-deep-learning/),我用 OpenCV 和深度学习实现了人脸检测。你可以通过文章中使用了预训练模型的深度学习方法很容易地更新本文中的脚本。该方法的好处是,不用调参并且训练十分快。

    这种人脸识别方法的结果是一个 rects(矩形边界框)列表。在第 44、45 行中,我们在 rects 上进行循环,并且在帧上画出矩形边框,以方便展示。

    最后一步,我们将在循环中进行两个工作:(1)在屏幕上展示视频帧;(2)处理按键响应。具体代码如下:

    在第 48 行中,我们在屏幕上展示了视频帧,接下来在第 49 行中获取了键入值。

    根据按下的是「k」还是「q」,我们会:

    如果按下「k」键,我们将保留视频帧并将它存储到磁盘上(第 53-56 行),并且增加表示获取到的总帧数的计数器 total(第 58 行)。我们需要在想保留的每一帧处按下「k」键。我建议保留不同角度、不同的帧区域、戴/不戴眼镜等不同情况下拍摄的人脸图像。如果按下「q」键,则退出循环,准备退出脚本(quit)。

    如果没有按下任何键,我们就回到循环的开头,从视频流中获取一帧。

    最终我们将在终端上打印出最终存储的图像数量,并进行清理:

    现在让我们运行脚本,收集人脸图像吧!

    请确保你已经从本文的「Downloads」部分下载了代码和哈尔级联。

    在你的终端设备中执行下列命令:

    $ python build_face_dataset.py --cascade haarcascade_frontalface_default.xml --output dataset/adrian[INFO] starting video stream...[INFO] 6 face images stored[INFO] cleaning up...

    在运行完脚本之后,我们发现有 6 张图像被存储到了 dataset 文件夹的 adrian 子文件夹中:

    $ ls dataset/adrian00000.png 00002.png 00004.png00001.png 00003.png 00005.png

    我建议将人脸图像样本存在以图像所属人的名字命名的子文件夹中。

    通过这种方式可以强化你的自定义人脸识别数据集的组织结构。

    方法 2:通过编程下载人脸图像

    图 2:另一种构建人脸识别数据集的方法(如果此人是公众人物,或者在网络上出现过),是通过一个脚本在谷歌上进行图像搜索,或者使用一个利用了 Bing 图像搜索 API 的 Python 脚本。

    如果你不能在现场拍摄一个人的图像,或者他们是在网络上存在感很强的公众人物(在某种程度上),你可以通过各种平台上的 API 以编程的方式下载他们的人脸图像样本。选择哪种 API 很大程度上取决于你想要收集的是谁的人脸图像。

    例如,如果一个人一直在 Twitter 或 Instagram 上发帖,你可能想要用其中一种(或者其他的)社交网络 API 获取人脸图像。

    另一种选择是,使用像谷歌或 Bing 这样的搜索引擎:

    使用这篇文章中的方法(https://pyimagesearch/2017/12/04/how-to-create-a-deep-learning-dataset-using-google-images/),你可以使用谷歌图像「Google Images」手动+编程地为给定的查询下载示例图像。在我看来,一个更好的选择可能是,使用 Bing 的图像搜索 API,它是完全自动化的且不需要手动干预。我在这篇文章中实现了这个全自动化方法(https://pyimagesearch/2018/04/09/how-to-quickly-build-a-deep-learning-image-dataset/)。

    使用后一种方法,我可以从《侏罗纪公园》和《侏罗纪世界》中下载 218 张人脸图像。

    通过 Bing 图像搜索 API 下载 Owen Grady 的人脸图像的命令示例如下:

    $ mkdir dataset/owen_grady$ python search_bing_api.py --query "owen grady" --output dataset/owen_grady

    现在让我们来看整个数据集(删除不包含该人物人脸的图像后):

    $ tree jp_dataset --filelimit 10jp_dataset├── alan_grant [22 entries]├── claire_dearing [53 entries]├── ellie_sattler [31 entries]├── ian_malcolm [41 entries]├── john_hammond [36 entries]└── owen_grady [35 entries]6 directories, 0 files

    在短短 20 多分钟内(包括删除误判样本的时间),我就能收集到《侏罗纪公园》/《侏罗纪世界》的自定义人脸数据集:

    图 3:通过 Python 和 Bing 图像搜索 API 以编程的方式创建出的人脸识别数据集示例。图中是《侏罗纪公园》系列电影中的六个人物。

    方法 3:手动收集人脸图像

    图 4:手动下载人脸图像是最不可取的选项,但你不该忘记它。当一个人并不经常在网络上出现,或者图像没有标签时,你可以使用这种方法。

    最后一种创建自定义人脸识别数据集的方法也是最不可取的一种,是手动寻找并存储人脸图像样本。

    这种方法显然是最乏味的,且需要耗费最多的人工工作时间——通常我们更喜欢「自动化」的解决方案,但是在某些情况下,你不得不付诸人工。

    使用此方法,你需要手动检查:

    搜索引擎的搜索结果(例如,谷歌和 Bing)社交网络资料(Facebook、Twitter、Instagram、SnapChat 等)图片分享服务(Google Photos、Flickr 等)

    然后手动将这些图像存储到磁盘上。

    在这些场景下,用户通常具备某种类型的公开资料,但是比以编程的方式用爬虫爬到的图像要少得多。

    PyImageSearch Gurus(免费)示范课程

    图 5:在 PyImageSearch Gurus 课程(https://pyimagesearch/pyimagesearch-gurus/)中,你将学会构建人脸识别安防系统。当一个未经授权的入侵者坐在你的桌前时,它会通过文本消息(包含图像)提醒你。

    总结

    本文介绍了三种为人脸识别任务创建自定义人脸数据集的方法。

    你具体会选择哪种方法完全取决于你自己的人脸识别应用。

    如果你正在构建一个「现场」的人脸识别系统,例如用于教室、公司或其他组织的人脸识别系统,你可能会让用户进入专门用于收集示例人脸图像的房间,然后在那里继续从视频流中捕获人脸图像 (方法 1)。

    另一方面,如果你正在构建一个包含公众人物、名人、运动员等的人脸识别系统,那么在网上可能有他们足够多的人脸图像样本。在这种情况下,你可以利用现有的 API 以编程方式下载人脸图像样本 (方法 2)。

    最后,如果你试图识别的面孔在网上没有公开的个人资料(或者个人资料非常有限),你可能需要手动收集和管理人脸数据集 (方法 3)。这显然是最人工、最繁琐的方法,但在某些情况下,如果你想识别某些面孔,可能需要使用这种方法。

  • ?

    量化交易机构的前世今生(量化交易系列知识之二)

    狭窄″

    展开

    “作为一名证券量化交易的普及使者,我在这里承诺本人名下的所有文章,通俗易懂,绝不出现诸如:“一长窜英文单词的源代码,通篇线性回归y = w'x+e,e为误差服从均值为0的正态分布,马尔科夫模型。”因为这不是大家想要看到与学习的量化交易。我立志于实现并普及平民化量化交易。”

    正文部份:

    quant,一个逼格满满的词。如果你有朋友向你淡定从容的介绍他的职业是一名quant,那你一定不要放弃赞许他的绝好机会,因为从事这个职业的人在全中国,确实比较稀少,收入高且确实逼格满满。

    量化交易-数学与金融建模

    quant的工作就是设计并实现金融的数学模型(主要采用计算机编程),这些quant供职的机构一般来说,我们都把它称作为量化交易从业机构,因为这些机构往往绝对代表了全中国最会赚钱的公司。那么他们手下的员工,啧啧啧。收入一定不会差。

    量化,是什么时候开始的?怎样开始的?起初,它并不是行业里的说法,而是一种学术上的说法。我们基本上可以公认量化投资开始于1900年。法国的数学家 Louis Bachelier,他当初写的博士论文,文章的名字叫做《投机理论》。基本上,这篇论文里面讲述了我们如何对未来做一个判断。如果今天对一个价格能做出正确的判断,那就非常简单。我们的判断如果正确的话,就会知道什么时候买,什么时候卖,百分之一百正确的话(当然这是不可能的),那就永远会赚钱。

    1900年以后,在20世纪30年代的时候,哥伦比亚商学院的教授 Benjamin Graham 和 David Dodd 他们写了一本书叫《证券分析》。写这本书的背景是什么?30年代是什么时候?是1929年股市刚刚崩溃的时候。那说到 Benjamin Graham,如果对他不熟悉的话,大家肯定对他的学生非常熟悉,沃伦巴菲特就是他的学生。他写这本书的目的是想告诉投资人,你今天买卖股票,不是说一拍脑袋,想怎么买怎么买,想怎么卖怎么卖,你可以通过对它的研究来发掘公司的基本面情况,然后再来做决定,今天这只股票到底是应该买还是应该卖。从此以后一直到1952年,Harry Markowitz 写了现代资产配置理论(modern portfolio theory),并因此在1990年获得诺贝尔经济学奖。对于量化权益来说,现代资产配置理论就是基础,就是在考虑到风险的情况下,如何得到最佳的投资组合。

    国外量化投资的发展历程,也就是先有量化投资的方式与理论的出现,再有量化投资基金、其它量化产品形式的出现,量化交易机构的诞生——世界上第一只量化产品是一只被动型的量化投资基金,由巴克莱国际投资管理公司(BGI)设计并发行,世界上第一只主动型量化投资基金也是由BGI设计并发行。

    巴克莱银行(Barclays Bank)

    科普时间:巴克莱银行(Barclays Bank),全球规模最大的银行及金融机构之一,总部设于英国伦敦。巴克莱银行于1690年成立,是英国最古老的银行,具有逾300年历史,是全世界第一家拥有ATM机的银行,并于1966年发行了全英第一张信用卡,1987年发行了全英第一张借记卡。BGI作为旗下资产管理业务——巴克莱全球投资者(BGI)

    看来很多金融与投资领域的前沿技术都让英国人抢了一个先,这也理所当然,资本主义大跃进与工命革命也都是英国人先的事。

    为什么花这么大篇幅讲了一讲,量化投资是怎么进入证券交易的,巴克莱银行与旗下BGI公司的事呢。因为,这里就不得不引出我们今天的主题,国内量化交易究竟是复制了资本主义国家量化的发展模式,还是另辟蹊径,走出了不一样的中国特色社会主义量化交易发展模式呢?

    答案是否定的:先有量化,再有量化投资的方式。证券投资交易市场逃不出科学发展的必然规律。我们中国也不例外。

    这里分享一个很有名的案例,这个案例被例入了各大商学院MBA课程。

    最牛出租车司机

    这个人特别的牛啊,他上了当年的热搜的,感兴趣的朋友可以去查查。在那个年代,依靠他主观老道的从业经验,科学的分析,精确的算法,合理的跑单路线规划。他依靠他主观的跑车策略成为了他们出租车司机行业收入的金字顶端。当年月入10000元,代表了他进入整个出租车司机行业最优秀的1%。后来,网约车来了!

    当年第一批用上了网约车的接单跑出租车的人,用上了大数据,科学算法。收入过万的从业者已经占到所有出租车从业者的10%。这就是量化,不管是人的主观经验跑车技巧,以及依靠大数据、算法的网约车派单策略。我们已经进入了全民量化的时代。

    出租车牛人-也就是传统量化主观分析时代(定量分析),网约车-也就是现代量化时代(现代量化分析)

    以网约车、外卖平台的发展代表,我们中国自此进入,全民量化经济时代。

    时光冉冉,目光焦点回归到证券投资市场。

    国内第一支量化基金—光大保德信量化核心基金发行时间为2004年7月20日。我们国内的量化交易研究得怎么样呢?

    我们国内目前搞量化研究的,主要有以下两种模式:

    一、自产自销模式:

    代表机构:券商量化研究团队、公募基金、私募基金,

    形式:封闭自研,绝不外泄。

    目前成果:绝大多数未跑赢市场(国内能查到的目前存续期的72只量化基金,当然也有表现优异的基金公司,感兴趣的可以自行查阅)

    研究目的:为即将发行的量化产品作技术支撑

    数据来源:天天基金网

    以笔者的观点来看,这类券业从业机构由于其行业的特殊性,做的是闭门造车的事。大多数量化类产品未跑赢市场也是大概率的事件。以某国内知名大型综合AA级券商XX证券公司的的情况来说,其门下量化研发团队不足10人,数据来源除沪深交易所来源之外,核心其它类型的数据,甚至需要外调。别问我怎么知道的,因为笔者在该券商曾供职8年。

    二、合作开发,开源共享。

    代表机构:量化交易平台、各类quant平台

    形式:开源协作,核心保密

    目前成果:可喜可贺,量化交易被证明有效(笔者身边用量化交易的朋友)。但无法统计,只能佐证。

    研究目的:为券商、公(私)募基金输送 量化交易策略、人才

    开源的研发环境、研究平台,举全国量化爱好研究者之力,共同完善量化交易市场才是正道。

    目前国内比较优秀的量化平台(除期货外汇市场的量化交易平台),详述如下:

    joinQuant聚宽量化交易平台

    BigQuant - 人工智能量化投资平台

    优矿- 大数据时代的量化投资 - 通联量化实验室

    MindGo量化交易平台

    果仁网-量化投资平台

    (警告一下:除了券商、公(私)募基金,全中国证券量化从业平台机构不超过10家,当然我说的量化是真量化,注意那些“照猫画虎”的伪量化机构。也就是所谓的依靠各类图表形态、拐点买入、主力资金动向等等的机构,其实他们依旧是一些打着量化的名义,卖着指标的软件公司。本质上依然做的是主观买入指标的研究。)

    ---------------------

    以上量化平台,笔者卧底多年,明查暗访探询多年,以自身专业知识,期望从我的个人角度尽可能给读者解析清楚,笔者还是希望通俗易懂的给大家讲明白。那么他们究竟是一个什么样的量化交易平台呢,

    答案就是——贵族量化交易!门槛太高!

    为什么是贵族量化呢,笔者给大家提供一幅图,大家就能明白:

    这是一个简单的策略

    笔者以及一大部份证券爱好人士希望执行量化交易的,对量化交易的美好期望就此幻灭。我不懂程序开发,不懂python、更不了解pandas。该平台上明明白白写着新手教程,一个简单的策略,各贵族量化平台机构难道是需要免费教学,课程为期1年?毕业后我再来转入实战?

    那么国内实现证券量化交易的方式,除去购买券商产品、公(私)募基金、除去到这个贵族了弟学校平台系统学习,有没有一种平民化,快速可执行的量化交易实现方式呢?

    我将在下一讲、重点讲解可实现的平民量化交易的方式,讲一讲我们散户是怎么实现量化交易的。

  • ?

    炒外汇入门教程-外汇投资者必读

    Nicole

    展开

    炒外汇教程

    1、什么是个人外汇买卖?

    答:个人外汇买卖一般有实盘和虚盘之分,目前只能进行实盘外汇买卖。

    2、个人实盘外汇买卖和个人虚盘外汇买卖有什么区别?

    答:个人实盘外汇买卖,俗称“外汇宝”,是指个人客户在银行通过柜面服务人员或其他电子金融服务方式进行的不可透支的可自由兑换外汇(或外币)间的交易。

    个人虚盘外汇买卖,是指个人在银行交纳一定的保证金后进行的交易金额可放大若干倍的外汇(或外币)间的交易。

    3、个人实盘外汇买卖业务与传统的储蓄业务有什么不同?

    答:传统的储蓄业务是一种存取性业务,以赚取利息为目的。个人实盘外汇买卖是一种买卖性业务,以赚取汇率差额为主要目的,同时客户还可以通过该业务把自己持有的外币转为更有升值潜力或利息较高的外币,以赚取汇率波动的差价或更高的利息收入。

    4、哪些人可以进行个人实盘外汇买卖?

    答:凡持有有效身份证件,拥有完全民事行为能力的境内居民个人,具有一定金额外汇(或外币)均可进行个人实盘外汇交易。

    5、个人实盘外汇买卖可交易货币有哪些?

    答:美元、欧元、日元、英镑、瑞士法郎、港元、澳大利亚元等主要货币,也包括加拿大元、荷兰盾、法国法郎、德国马克、比利时法郎、新加坡元等货币。

    6、个人实盘外汇买卖可以进行那些货币之间的交易?

    答:客户可以通过个人实盘外汇买卖进行以下两类的交易:一、美元兑欧元、美元兑日元、英镑兑美元、美元兑瑞士法郎、美元兑港元、澳大利亚元兑美元(还可以进行美元兑加拿大元、美元兑荷兰盾、美元兑法国法郎、美元兑德国马克、美元兑比利时法郎、美元兑新加坡元)。二、以上非美元货币之间的交易,如英镑兑日元、澳大利亚元兑日元等,在国际市场上,此类交易被称为交叉盘交易。

    7、个人实盘外汇买卖中的基准货币指的是什么货币?

    答:在个人实盘外汇买卖中,英镑、澳元、和欧元兑美元的报价,英镑、澳元和欧元是基准货币,其余的货币兑美元的报价中,美元是基准货币。

    8、客户手上只有人民币没有外币,可以进行个人实盘外汇买卖吗?

    答:不可以。因为个人实盘外汇买卖是外币和外币之间的买卖,而人民币并不是可自由兑换货币,因此人民币不可以进行个人实盘外汇买卖。

    9、个人实盘外汇买卖的报价如何产生?

    答:银行根据国际外汇市场行情,按照国际惯例进行报价。个人外汇买卖的价格是由基准价格和买卖价差两部分构成。买价为基准价格减买卖差价,卖价为基准价格加买卖价差。因受国际上各种政治、经济因素,以及各种突发事件的影响,汇价经常处于剧烈的波动之中,因此客户在进行个人实盘外汇买卖时,应充分认识到风险与机遇并存。

    10、外币现钞与现汇一样吗?

    答:不一样。现钞通常指外币的钞票和硬币或以钞票、硬币存入银行所生成的存款。现汇主要是指以支票、汇款、托收等国际结算方式取得并形成的银行存款。

    11、个人外汇买卖为什么有现钞、现汇价格之分?现钞、现汇在个人实盘外汇买卖中是否用相同的价格?

    答:外币现钞只能运送到国外才能起到支付作用,而运送现钞银行需承担运费、保费、利息等费用,所以银行一般要在个人外汇买卖价格上予以一定的区别。

    12、现钞、现汇之间可否通过个人外汇买卖业务互换?

    答:根据国家外汇管理有关规定,现钞不能随意换成现汇。个人外汇买卖业务本着钞变钞,汇变汇的原则。

    13、个人实盘外汇买卖对交易金额有无特殊规定?

    答:有。叙做个人实盘外汇买卖客户通过柜台进行交易,最低金额一般为100美元,电话交易、自助交易的最低金额略有提高,无论通过以上那种方式交易,都没有最高限额。

    14、个人实盘外汇买卖有哪些交易手段?

    答:柜台交易、电话交易、自助交易等3种交易手段。各有优点:柜面交易,有固定的交易场所,可感受到人气氛围,特别适合初涉外汇宝交易的投资者;电话交易,成交迅捷,并可异地操作,特别适合工作繁忙的白领投资者;自助交易,信息丰富,并提供多种技术分析图表,特别适合对外汇交易有一定经验的投资者。另外家居银行和网上银行都有可能增加个人外汇买卖业务。

    15、个人实盘外汇买卖的交易时间有多长?

    答:如果客户进行柜面交易或自助交易,交易时间仅限银行正常工作日的工作时间一般为9:00至17:00(有的分行可延长至21:00)。如果客户进行电话交易,一般为早8:30至21:00。

    16、进行个人实盘外汇买卖,需要什么手续?

    答:如果客户进行柜面交易,只需将个人身份证件以及外汇现金、存折或存单交柜面服务人员即可。如要进行电话交易或自主交易,则需带上本人身份证件、外汇现金、存折或存单,到银行网点电话交易或自主交易的开户手续后,才可进行交易。

    17、个人实盘外汇买卖有那些交易方式?

    答:目前有市价交易和委托交易两种。市价交易,又称时价交易,即根据银行当前的报价即时成交;委托交易,又称挂盘交易,即投资者可以先将交易指令留给银行,当银行报价到达投资者希望成交的汇价水平时,银行电脑系统就立即根据投资者的委托指令成交,目前此种交易方式只适用于电话交易、自助交易。

    18、个人实盘外汇买卖一旦成交,能否撤销?

    答:不能。根据国际外汇市场惯例,外汇交易的步骤为询价、报价、成交、证实(交易汇率、买卖货币名称、买卖金额)。一旦成交,汇价水平、交易金额、交易币种等细节已经确定,对交易双方都具有约束力,不可以反悔,也不可以撤销。因此,个人实盘外汇买卖一旦成交,不能撤销。

    19、个人实盘外汇买卖的清算方式是T+0还是T+1?

    答:T+0。客户进行柜面交易,及时完成了货币的互换。客户进行电话交易或自主交易在完成一笔交易之后,银行电脑系统立即自动完成资金交割。也就是说,如果行情动荡,投资者可以在一天内抓住多次获利机会。

    20、什么是“止损”?

    答:客户在进行个人实盘外汇买卖时,如果市场汇率向不利客户的方向变化,使投资者面临较大的汇率波动风险。为了防止损失进一步扩大,投资者应及时将头寸平仓。

    空头:持有卖单的投资者

    多头:持有多单的投资者

    空开:没有持仓的投资者,判断市场将下跌,而进行卖出开仓

    多开:没有持仓的投资者,判断市场将上涨,而进行买入开仓

    空平:原进行卖出开仓的投资者,进行买入平仓

    多平:原进行买入开仓的投资者,进行卖出平仓

    21、什么是外汇市场?

    答:外汇市场是指由银行等金融机构、自营交易商、大型跨国企业参与的,通过中介机构或电讯系统联结的,以各种货币为买卖对象的交易市场。它可以是有形的---如外汇交易所,也可以是无形的---如通过电讯系统交易的银行间外汇交易。据国际清算银行最新统计显示,国际外汇市场每日平均交易额约为1.5万亿美元。

    22、谁是外汇市场的主要参与者?

    答:外汇市场的参与者主要包括各国的中央银行、商业银行、非银行金融机构、经纪人公司、自营商及大型跨国企业等。它们交易频繁,交易金额巨大,每笔交易均在几百万美元,甚至千万美元以上。外汇交易的参与者,按其交易的目的,可以划分为投资者和投机者两类。

    23、外汇市场是如何产生的?

    答:国际经济交往形成外汇的供给与需求,外汇的供给与需求导致外汇交易,而从事外汇交易的场所,就称为外汇市场。

    24、 全球主要外汇市场有哪些?

    答:目前,世界上大约有30多个主要的外汇市场,最重要的有欧洲的伦敦、法兰克福、苏黎世和巴黎,美洲的纽约和洛杉矶,澳洲的悉尼,亚洲的东京、新加坡和香港等。全球最大的外汇交易中心在哪里?

    25、为什么银行买入价低于卖出价?

    答:银行买入价是指银行买入基准货币的报价。银行卖出价是指银行卖出基准货币的报价。买入价和卖出价的差价代表银行承担风险的报酬。交易频繁的欧元、日元、英镑、瑞士法郎等,买卖差价相对较小,而一些交易清淡的币种差价就比较大。

    26、国际外汇市场上的汇率有几种表示方式方法?

    答:一般有两种,直接标价法与间接标价法。

    27、什么是直接标价法?

    答:直接标价法又称价格标价法。是以本国货币来表示一定单位的外国货币的汇率表示方法。一般是1个单位或100个单位的外币能够折合多少本国货币。大多数国家都采取直接标价法。市场上大多数的汇率也是直接标价法下的汇率。如:美元兑日元、美元兑港币、美元兑人民币等。

    28、什么是间接标价法?

    答:间接标价法又称数量标价法。是以外国货币来表示一定单位的本国货币的汇率表示方法。一般是1个单位或100个单位的本币能够折合多少外国货币。前英联邦国家多使用间接标价法,如英国、澳大利亚、新西兰等。市场上采取直接标价法的汇率主要有英镑兑美元、澳元兑美元等。

    29、何为交叉汇率?

    答:在国际市场上,几乎所有的货币兑美元都有一个兑换率。一种非美元货币对另外一种非美元货币的汇率,往往就需要通过这两种对美元的汇率进行套算,这种套算出来的汇率就称为交叉汇率。

    30、如何计算外汇交叉报价?

    答:计算交叉汇率的方法主要有以下几种:

    (1)同为直接报价货币

    买入价 卖出价

    USD/JPY: 120.00 120.10

    (交叉相除) 买入价 卖出价

    DEM/JPY = 66.33 66.43

    USD/DEM: 1.8080 1.8090

    (2)同为间接报价货币

    EUR/USD:1.1010——1.1020

    (交叉相除) 买入价 卖出价

    EUR/GBP = 0.6873 0.6883

    GBP/USD:1.6010——1.6020

    (3)直接报价货币与间接报价货币

    USD/JPY: 120.10 120.20

    (反向相除) 买入价 卖出价

    EUR/JPY = 132.17 132.40

    EUR/USD: 1.1005 1.1015

    31、外汇汇率中的“点”(基本点)指的是什么?

    答:按市场惯例,外汇汇率的标价通常由五位有效数字组成,从右边向左边数过去,第一位称为“X个点”, 它是构成汇率变动的最小单位;第二位称为“X十个点”,如此类推。如:1欧元= 1.1011 美元; 1美元 = 120.55日元

    欧元对美元从1.1010变为1.1015, 称欧元对美元上升了5点

    美元对日元从120.50变为120.00,称美元对日元下跌了50点

    32、什么是固定汇率?

    答:固定汇率指一国货币同另一国货币的兑换比率基本固定的汇率是围绕一个相对固定的平价的上下限范围波动。如二战后以美元为中心的固定汇率制度,国际货币基金各成员国货币兑美元的官定比价就是平价,各成员国货币汇率只能在平价上下1%波动,由中央银行出面干预。

    33、浮动汇率的类型?

    答:浮动汇率按政府是否干预,分为“自由浮动汇率”和“管理浮动汇率”两种。在现实生活中,政府对本国货币的汇率不采取任何干预措施,完全采取自由浮动汇率的国家几乎没有。由于汇率对国家的国际收支和经济的均衡有重大影响,各国政府大多通过调整利率、在外汇市场上买卖外汇以及控制资本移动等形式来控制汇率的走向。

    34、分析汇率的方法有几种?

    答:分析汇率的方法主要有两种:基础分析和技术分析。基础分析是对影响外汇汇率的基本因素进行分析,基本因素主要包括各国经济发展水平与状况,世界、地区与各国政治情况,市场预期等。技术分析是借助心理学、统计学等学科的研究方法和手段,通过对以往汇率的研究,预测出汇率的未来走势。

    35、当今世界上研究汇率变化的经典理论有哪些?

    答:主要有三个:英国学者葛逊的国际借贷说、瑞典经济学家卡塞尔的购买力平价说、英国著名经济学家凯恩斯的利率平价说。其中以利率平价说和购买力平价说对市场的影响最大。

    36、利率平价学说?

    答:解释了利率水平和汇率之间的关系。哪种货币利率高,投资者就愿意购买哪种货币,从而将促使该货币汇率上升。利率平价学说突破了传统的国际收支和物价水平的范畴,从资本流动的角度研究汇率的变化,奠定了现代汇率理论的基础。

    37、何为购买力平价学说?

    答:两国货币的比价取决于两国货币国内购买力的对比关系。如果,1只汉堡在英国价值卖1英镑,同样的汉堡在美国卖1.70美元。我们说汇率为1英镑对1.70美元。尽管购买力平价学说并不完美,但是中央银行在计算通货之间的基本比率时仍起着重要作用。因为根据购买力计算出的基础汇率与市场价之间比较,可以判断现行市场汇率于基础汇率的偏离程度,是预测长期汇率的重要手段。

    38、决定外汇汇率走向的根本原因是什么?

    答:外汇汇率的波动,虽然千变万化,和其他商品一样。归根到底是由供求关系决定的。在国际外汇市场中,当某种货币的买家多于卖家时,买方争相购买,买方力量大于卖方力量;卖方奇货可居,价格必然上升。反之,当卖家见销路不佳,竞相抛售某种货币,市场卖方力量占了上风,则汇价必然下跌。

    39、 外汇供求是受周期性波动影响吗?

    ...
  • ?

    学python?不是一个python入门教程就行,学之前你必须知道这些

    易巧

    展开

    第一 学习方向:python应用方向很多,必须明确学习方向想

    全栈开发:就是web应用开发,是用来写网站后台的数据分析:就是做大数据分析的,数据量级起码是千万级别的,做的是大数据分析网络爬虫:其实属于数据分析的部分,就是获取数据源的方式。不管是阿拉伯数据还是说字符串,都是数据的一种。经常试试需要讲某些指标量化成数据据。机器学习:这也是python最有魅力的地方,善于做图形分析,算法建模等等。所以python在人工智能,机器学习的领域有着读到的优势。

    三秋道果_python自学教程指南

    第二 学习目标:是自我提升还是转行就业,目的不一样选择的是有“巨大”区别的

    转行就业为目的:那么建议学python全栈开发。既然是就业那么就要看市场,就是人才需求市场,这里说的市场当让是说python人才需求的市场了。说到市场当然python每个方向肯定有市场了,咱们直接看主要矛盾:一个是需求量,另一个是入行的难易程度。python全栈目前是市场的需求量最大,入行也是最容易的。要是为了就业那就先这样入门入行,就不用想了。看重前景方向:那么学python大数据分析或是python机器学习。其中大数据分析相对容易,python提供的是语言的环境,数据分析会有许多对应的工具包,会包含各种分析模型,随着经验积累会很熟练照到对应项目的分析模型。机器学习这块设计的算法,算法建模,图形分析等等需要的理论基础要很好,或者说起到决定性的作用,这里咱们要好好的想想。

    三秋道果_python自学教程指南

    第三 学习建议:简单说几点

    宗旨:我觉得跟游戏一样,万虐终成神!一定多敲代码,多解决bug,问题都解决过何愁不成道果。编程习惯:好的习惯也很重要,空格,缩进等等一些小细节,不仅是的代码更好看,也会让代码更具逻辑,更具可读性。多沟通:夺取和小伙伴多碰撞,想法火花猜会更多,也会学的更快。

    第四 就是学习教程了,这里就送上pythonWeb开发,数据分析,爬虫,机器学习,都是全套的比较好的教程。

    https://pan.baidu/s/1aoOdKrpPH5rBTBuceLI5Iw

    01 Python大数据分析第一套02 Python全栈全栈第一套03 Python全栈全栈第二套04 Python全栈第三套05 Python全栈全栈第四套06 Python网络爬虫爬虫一套07 Python大数据分析大数据分析第二套08 Python机器深度学习人工智能第一套09 Python机器深度学习人工智能第二套

    第五 python基础知识点梳理:python完整数据体系思维导图。

    三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理三秋道果_python自学教程知识点梳理

    最后希望想学python的朋友们都能学好,感谢阅读。

    转载请说明出处 —— 三秋道果著

  • ?

    教程 | 深度学习初学者必读:张量究竟是什么?

    秋柔

    展开

    作者:Ted Dunning机器之心编译参与:晏奇、吴攀

    今天很多现有的深度学习系统都是基于张量代数(tensor algebra)而设计的,但是张量代数不仅仅只能用于深度学习。本文对张量进行了详细的解读,能帮你在对张量的理解上更进一步。本文作者为 MapR Technologies 的首席应用架构师 Ted Dunning。

    近段时间以来,张量与新的机器学习工具(如 TensorFlow)是非常热门的话题,在那些寻求应用和学习机器学习的人看来更是如此。但是,当你回溯历史,你会发现一些基础但强大的、有用且可行的方法,它们也利用了张量的能力,而且不是在深度学习的场景中。下面会给出具体解释。

    如果说计算是有传统的,那么使用线性代数的数值计算就是其中最重要的一支。像 LINPACK 和 LAPACK 这样的包已经是非常老的了,但是在今天它们任然非常强大。其核心,线性代数由非常简单且常规的运算构成,它们涉及到在一维或二维数组(这里我们称其为向量或矩阵)上进行重复的乘法和加法运算。同时线性代数适用范围异常广泛,从计算机游戏中的图像渲染到核武器设计等许多不同的问题都可以被它解决或近似计算,

    关键的线性代数运算:在计算机上使用的最基础的线性代数运算是两个向量的点积(dot product)。这种点积仅仅是两个向量中相关元素的乘积和。一个矩阵和一个向量的积可以被视为该矩阵和向量行(row)的点积,两个矩阵的乘积可以被视为一个矩阵和另一个矩阵的每一列(column)进行的矩阵-向量乘积的和。此外,再配上用一个值对所有元素进行逐一的加法和乘法,我们可以构造出所需要的线性代数运算机器。

    计算机之所以可凭极快速度求出用线性代数编写的程序值,部分原因是线性代数具有规律性。此外,另一个原因是它们可以大量地被并行处理。完全就潜在性能而言,从早期的 Cray-1(译者注:Cary-1 是世界上最早的一台超级计算机,于 1975 年建造,运算速度每秒 1 亿次)到今天的 GPU 计算机,我们可以发现性能增长了超过 30000 倍。此外,当你要考虑用大量 GPU 处理集群数据时,其潜在的性能,在极小成本下,比曾经世上最快速的计算机大约高出一百万倍。

    然而,历史的模式总是一致的,即要想充分利用新的处理器,我们就要让运算越来越抽象。Cray-1 和它向量化的后继者们需要其运行程序能够使用向量运算(如点积)才能发挥出硬件的全部性能。后来的机器要求要就矩阵-向量运算或矩阵-矩阵运算来将算法形式化,从而方可尽可能地发挥硬件的价值。

    我们现在正站在这样一个结点上。不同的是我们没有任何超越矩阵-矩阵运算的办法,即:我们对线性代数的使用已达极限。

    但是,我们没有必要把自己限制在线性代数上。事实证明,我们可以沿着数学这棵大树的枝叶往上再爬一段。长期以来,人们都知道在数学抽象的海洋中存在着比矩阵还要大的鱼,这其中一个候选就是张量(tensor)。张量是广义相对论重要的数学基础,此外它对于物理学的其它分支来说也具有基础性的地位。那么如同数学的矩阵和向量概念可被简化成我们在计算机中使用的数组一样,我们是否可以将张量也简化和表征成多维数组和一些相关的运算呢?很不幸,事情没有那么简单,这其中的主要原因是不存在一个显而易见且简单的(如在矩阵和向量上类似的)可在张量上进行的一系列运算。

    然而,也有好消息。虽然我们不能对张量使用仅几个运算。但是我们可以在张量上写下一套运算的模式(pattern)。不过,这还不不够,因为根据这些模式编写的程序不能像它们写的那样被充分高效地执行。但我们还有另外的好消息:那些效率低下但是编写简单的程序可以被(基本上)自动转换成可非常高效执行的程序。

    更赞的是,这种转换可以无需构建一门新编程语言就能实现。只需要一个简单的技巧就可以了,当我们在 TensorFlow 中写下如下代码时:

    v1 = tf.constant(3.0)v2 = tf.constant(4.0)v3 = tf.add(node1, node2)

    实际情况是,系统将建立一个像图 1 中显示的数据结构:

    图 1:上方的代码被转译成一个可被重建的数据结构,而且它会被转成机器可执行的形式。将代码转译成用户可见的数据结构可让我们所编写的程序能被重写从而更高效地执行,或者它也可以计算出一个导数,从而使高级优化器可被使用。

    该数据结构不会在上面我们展示的程序中实际执行。因此,TensorFlow 才有机会在我们实际运行它之前,将数据结构重写成更有效的代码。这也许会牵涉到我们想让计算机处理的小型或大型结构。它也可生成对我们使用的计算机 CPU、使用的集群、或任何手边可用的 GPU 设备实际可执行的代码。对它来说很赞的一点是,我们可以编写非常简单但可实现令人意想不到结果的程序。

    然而,这只是开始。

    做一些有用但不一样的事

    TensorFlow 和像它一样的系统采用的完全是描述机器学习架构(如深度神经网络)的程序,然后调整那个架构的参数以最小化一些误差值。它们通过创建一个表征我们程序的数据结构,和一个表征相对于我们模型所有参数误差值梯度的数据结构来实现这一点。这个梯度函数的存在使得优化变得更加容易。

    但是,虽然你可以使用 TensorFlow 或 Caffe 或任何其它基本上同样工作模式的架构来写程序,不过你写的程序不一定要去优化机器学习函数。如果你写的程序使用了由你选择的包(package)提供的张量标注,那它就可以优化所有类型的程序。自动微分和最先进的优化器以及对高效 GPU 代码的编译对你仍然有利。

    举个简例,图二给出了一个家庭能耗的简单模型。

    图 2:该图显示了一间房子的日常能耗情况(圆圈),横轴代表了温度(华氏度)。能耗的一个分段线性模型叠加在了能耗具体数据上。模型的参数按理来说会形成一个矩阵,但是当我们要处理上百万个模型时,我们便可以用到张量。

    该图显示了一间房子的能耗使用情况,并对此进行了建模。得到一个模型不是什么难事,但是为了找出这个模型,笔者需要自己写代码来分别对数百万间房子的能耗情况进行建模才行。如果使用 TensorFlow,我们可以立即为所有这些房子建立模型,并且我们可以使用比之前得到这个模型更有效的优化器。于是,笔者就可以立即对数百万个房间的模型进行优化,而且其效率比之前我们原始的程序要高得多。理论上我们可以手动优化代码,并且可以有人工推导的导数函数。不过完成这项工作所需要的时间,以及更重要的,调试花费的时间会让笔者无法在有限时间里建立这个模型。

    这个例子为我们展示了一个基于张量的计算系统如 TensorFlow(或 Caffe 或 Theano 或 MXNet 等等)是可以被用于和深度学习非常不同的优化问题的。

    所以,情况可能是这样的,对你而言最好用的机器学习软件除了完成机器学习功能以外还可以做很多其它事情。

    原文链接:http://kdnuggets/2017/06/deep-learning-demystifying-tensors.html

  • ?

    pandas基础教程1

    Yvette

    展开

    Pandas是基于Numpy构建的(不知道pandas和我们的国宝有什么关系),而Numpy和Pandas的数据类型是在基础数据类型上建立,彼此相关,又彼此不同。Numpy对象最重要特点向量化运算,pandas对象最重要特点是字典和列表混合。

    pandas,首先需要了解他主要两个数据结构:Series和DataFrame。

    series是线性的数据结构,是一个一维数组,Pandas 会默然用0到n-1来作为series的index, 但也可以自己指定index( 可以把index理解为‘字典’里面的‘键 ’)。下例为为指定index的用法。可以通过通过位置获取数据。

    1

    指定index:我们可以指定intex就像字典指定‘键’一样,我们也可以使用字典或者numpy创建Series。如下例。

    2

    DataFrame:是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表。DataFrame的单元格可以存放数字、字符串等,这和excel表很像。同时DataFrame可以设置列名columns与行名index,可以通过通过位置获取数据也可以通过列名和行名定位。

    34

    相关搜索

    • match函数
    • series函数
    • python
  • ?

    NLP入门+实战必读:一文教会你最常见的10种自然语言处理技术

    仇冰旋

    展开

    大数据文摘作品

    编译:糖竹子、吴双、钱天培

    自然语言处理(NLP)是一种艺术与科学的结合,旨在从文本数据中提取信息。在它的帮助下,我们从文本中提炼出适用于计算机算法的信息。从自动翻译、文本分类到情绪分析,自然语言处理成为所有数据科学家的必备技能之一。

    在这篇文章中,你将学习到最常见的10个NLP任务,以及相关资源和代码。

    为什么要写这篇文章?

    对于处理NLP问题,我也研究了一段时日。这期间我需要翻阅大量资料,通过研究报告,博客和同类NLP问题的赛事内容学习该领域的最新发展成果,并应对NLP处理时遇到的各类状况。

    因此,我决定将这些资源集中起来,打造一个对NLP常见任务提供最新相关资源的一站式解决方案。下方是文章中提到的任务列表及相关资源。那就一起开始吧。

    目录:

    1. 词干提取2. 词形还原3. 词向量化4. 词性标注5. 命名实体消岐6. 命名实体识别7. 情感分析8. 文本语义相似分析9. 语种辨识10. 文本总结

    1. 词干提取

    什么是词干提取?词干提取是将词语去除变化或衍生形式,转换为词干或原型形式的过程。词干提取的目标是将相关词语还原为同样的词干,哪怕词干并非词典的词目。例如,英文中:

    1.beautiful和beautifully的词干同为beauti2.Good,better和best 的词干分别为good,better和best。

    相关论文:Martin Porter的波特词干算法原文

    相关算法:在Python上可以使用Porter2词干算法(https://tartarus.org/martin/PorterStemmer/def.txt)

    程序实现:这里给出了在python的stemming库中使用(https://bitbucket.org/mchaput/stemming/src/5c242aa592a6d4f0e9a0b2e1afdca4fd757b8e8a/stemming/porter2.py?at=default&fileviewer=file-view-default)

    Porter2算法做词干提取的代码:

    #!pip install stemmingfrom stemming.porter2 import stemstem("casually")

    2. 词形还原

    什么是词形还原? 词形还原是将一组词语还原为词源或词典的词目形式的过程。还原过程考虑到了POS问题,即词语在句中的语义,词语对相邻语句的语义等。例如,英语中:

    1.beautiful和beautifully被分别还原为beautiful和beautifully。2.good, better和best被分别还原为good, good和good

    相关论文1: 这篇文章详细讨论了词形还原的不同方法。想要了解传统词形还原的工作原理必读。(http://ijrat.org/downloads/icatest2015/ICATEST-2015127.pdf)

    相关论文2: 这篇论文非常出色,讨论了运用深度学习对变化丰富的语种做词形还原时会遇到的问题。(https://academic.oup/dsh/article-abstract/doi/10.1093/llc/fqw034/2669790/Lemmatization-for-variation-rich-languages-using)

    数据集: 这里是Treebank-3数据集的链接,你可以使用它创建一个自己的词形还原工具。(https://catalog.ldc.upenn.edu/ldc99t42)

    程序实现:下面给出了在spacy上的英语词形还原代码

    #!pip install spacy#python -m spacy download enimport spacynlp=spacy.load("en")doc="good better best"for token in nlp(doc): print(token,token.lemma_)

    3. 词向量化

    什么是词向量化?词向量化是用一组实数构成的向量代表自然语言的叫法。这种技术非常实用,因为电脑无法处理自然语言。词向量化可以捕捉到自然语言和实数间的本质关系。通过词向量化,一个词语或者一段短语可以用一个定维的向量表示,例如向量的长度可以为100。

    例如:“Man”这个词语可以用一个五维向量表示。

    这里的每个数字代表了词语在某个特定方向上的量级。

    相关博文:这篇文章详细解释了词向量化。

    (https://analyticsvidhya/blog/2017/06/word-embeddings-count-word2veec/)

    相关论文:这篇论文解释了词向量化的细节。深入理解词向量化必读。

    (https://analyticsvidhya/blog/2017/10/essential-nlp-guide-data-scientists-top-10-nlp-tasks/)

    相关工具:这是个基于浏览器的词向量可视化工具。

    (https://ronxin.github.io/wevi/)

    预训练词向量:这里有一份facebook的预训练词向量列表,包含294种语言。

    (https://github/facebookresearch/fastText/blob/master/pretrained-vectors.md)

    这里可以下载google news的预训练词向量。

    (https://drive.google/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit)

    #!pip install gensimfromgensim.models.keyedvectors import KeyedVectorsword_vectors=KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin',binary=True)word_vectors['human']

    程序实现:这段代码可以用gensim训练你自己的词向量

    sentence=[['first','sentence'],['second','sentence']]model = gensim.models.Word2Vec(sentence, min_count=1,size=300,workers=4)

    4. 词性标注

    什么事词性标注?简单来说,词性标注是对句子中的词语标注为名字、动词、形容词、副词等的过程。例如,对句子“Ashok killed the snake with a stick”,词性标注会识别:

    Ashok 代词killed 动词the 限定词snake 名词with 连词a 限定词stick 名词. 标点

    论文1:

    choi aptly的这篇《The Last Gist to theState-of-the-Art 》介绍了一种叫动态特征归纳的新方法。这是目前词性标注最先进的方法。(https://aclweb.org/anthology/N16-1031.pdf)

    论文2:这篇文章介绍了通过隐马尔科夫模型做无监督词性标注学习的方法。(https://transacl.org/ojs/index.php/tacl/article/viewFile/837/192)

    程序实现:这段代码可以在spacy上做词性标注

    #!pip install spacy#!python -m spacy download en nlp=spacy.load('en')sentence="Ashok killed the snake with a stick"for token in nlp(sentence): print(token,token.pos_)

    5. 命名实体消歧

    什么是命名实体消岐?命名实体消岐是对句子中的提到的实体识别的过程。例如,对句子“Apple earned a revenue of 200 Billion USD in 2016”,命名实体消岐会推断出句子中的Apple是苹果公司而不是指一种水果。一般来说,命名实体要求有一个实体知识库,能够将句子中提到的实体和知识库联系起来。

    论文1:Huang的这篇论文运用了基于深度神经网络和知识库的深层语义关联模型,在命名实体消岐上达到了领先水平。

    (https://arxiv.org/pdf/1504.07678.pdf)

    论文2:Ganea and Hofmann的这篇文章运用了局部神经关注模型和词向量化,没有人为设置特征。(https://arxiv.org/pdf/1704.04920.pdf)

    6. 命名实体识别

    体识别是识别一个句子中有特定意义的实体并将其区分为人名,机构名,日期,地名,时间等类别的任务。例如,一个NER会将一个这样的句子:

    “Ram of Apple Inc. travelled to Sydney on 5th October 2017”

    返回如下的结果:

    Ram ofApple ORGInc. ORGtravelledtoSydney GPEon5th DATEOctober DATE2017 DATE

    这里,ORG代表机构组织名,GPE代表地名。

    然而,当NER被用在不同于该NER被训练的数据领域时,即使是最先进的NER也往往表现不佳。

    论文:这篇优秀的论文使用双向LSTM(长短期记忆网络)神经网络结合监督学习和非监督学习方法,在4种语言领域实现了命名实体识别的最新成果。(https://arxiv.org/pdf/1603.01360.pdf)

    程序实现:以下是如何使用spacy执行命名实体识别。

    import spacynlp=spacy.load('en')sentence="Ram of Apple Inc. travelled to Sydney on 5th October 2017"for token in nlp(sentence): print(token, token.ent_type_)

    7. 情感分析

    什么是情感分析?情感分析是一种广泛的主观分析,它使用自然语言处理技术来识别客户评论的语义情感,语句表达的情绪正负面以及通过语音分析或书面文字判断其表达的情感等等。例如:

    “我不喜欢巧克力冰淇淋”—是对该冰淇淋的负面评价。

    “我并不讨厌巧克力冰激凌”—可以被认为是一种中性的评价。

    从使用LSTMs和Word嵌入来计算一个句子中的正负词数开始,有很多方法都可以用来进行情感分析。

    博文1:本文重点对电影推文进行情感分析(https://analyticsvidhya/blog/2016/02/step-step-guide-building-sentiment-analysis-model-graphlab/)

    博文2:本文重点对印度金奈洪水期间的推文进行情感分析。(https://analyticsvidhya/blog/2017/01/sentiment-analysis-of-twitter-posts-on-chennai-floods-using-python/)

    论文1:本文采用朴素贝叶斯的监督学习方法对IMDB评论进行分类。(https://arxiv.org/pdf/1305.6143.pdf)

    论文2:本文利用LDA的无监督学习方法来识别用户生成评论的观点和情感。本文在解决注释评论短缺的问题上表现突出。(http://cs.cmu.edu/~yohanj/research/papers/WSDM11.pdf)

    资料库:这是一个很好的包含相关研究论文和各种语言情感分析程序实现的资料库。(https://github/xiamx/awesome-sentiment-analysis)

    数据集1:多域情感数据集版本2.0(http://cs.jhu.edu/~mdredze/datasets/sentiment/)

    数据集2:Twitter情感分析数据集(http://sananalytics/lab/twitter-sentiment/)

    竞赛:一个非常好的比赛,你可以检查你的模型在烂番茄电影评论的情感分析任务中的表现。(https://kaggle/c/sentiment-analysis-on-movie-reviews)

    8. 语义文本相似度

    什么是语义文本相似度分析?语义文本相似度分析是对两段文本的意义和本质之间的相似度进行分析的过程。注意,相似性与相关性是不同的。

    例如:

    汽车和公共汽车是相似的,但是汽车和燃料是相关的。

    论文1:本文详细介绍了文本相似度测量的不同方法。是一篇可以一站式了解目前所有方法的必读文章。(https://pdfs.semanticscholar.org/5b5c/a878c534aee3882a038ef9e82f46e102131b.pdf)

    论文2:本文介绍了用CNN神经网络去比对两个短文本。(http://casa.disi.unitn.it/~moschitt/since2013/2015_SIGIR_Severyn_LearningRankShort.pdf)

    论文3:本文利用Tree-LSTMs方法得到了文本的语义相关和语义分类的最新成果。(https://nlp.stanford.edu/pubs/tai-socher-manning-acl2015.pdf)

    语言识别

    什么是语言识别?语言识别指的是将不同语言的文本区分出来。其利用语言的统计和语法属性来执行此任务。语言识别也可以被认为是文本分类的特殊情况。

    博文:在这篇由fastText撰写的博文中介绍了一种新的工具,其可以在1MB的内存使用情况下识别170种语言。(https://fasttext.cc/blog/2017/10/02/blog-post.html)

    论文1:本文讨论了285种语言的7种语言识别方法。(http://ep.liu.se/ecp/131/021/ecp17131021.pdf)

    论文2:本文描述了如何使用深度神经网络来实现自动语言识别的最新成果。(https://repositorio.uam.es/bitstream/handle/10486/666848/automatic_lopez-moreno_ICASSP_2014_ps.pdf?sequence=1)

    10. 文本摘要

    什么是文本摘要?文本摘要是通过识别文本的重点并使用这些要点创建摘要来缩短文本的过程。文本摘要的目的是在不改变文本含义的前提下最大限度地缩短文本。

    论文1:本文描述了基于神经注意模型的抽象语句梗概方法。(https://arxiv.org/pdf/1509.00685.pdf)

    论文2:本文描述了使用序列到序列的RNN在文本摘要中达到的最新结果。(https://arxiv.org/pdf/1602.06023.pdf)

    资料库:Google Brain团队的这个资料库拥有使用为文本摘要定制的序列到序列模型的代码。该模型在Gigaword数据集上进行训练。(https://github/tensorflow/models/tree/master/research/textsum)

    应用程序:Reddit的autotldr机器人使用文本摘要来梗概从文章到帖子的各种评论。这个功能在Reddit用户中非常有名。(https://reddit/r/autotldr/comments/31b9fm/faq_autotldr_bot/)

    程序实现:以下是如何用gensim包快速实现文本摘要。

    fromgensim.summarization import summarizesentence="Automatic summarization is the process of shortening a text document with software, in order to create a summary with the major points of the original document. Technologies that can make a coherent summary take into account variables such as length, writing style and syntax.Automatic data summarization is part of machine learning and data mining. The main idea of summarization is to find a subset of data which contains the information of the entire set. Such techniques are widely used in industry today. Search engines are an example; others include summarization of documents, image collections and videos. Document summarization tries to create a representative summary or abstract of the entire document, by finding the most informative sentences, while in image summarization the system finds the most representative and important (i.e. salient) images. For surveillance videos, one might want to extract the important events from the uneventful context.There are two general approaches to automatic summarization: extraction and abstraction. Extractive methods work by selecting a subset of existing words, phrases, or sentences in the original text to form the summary. In contrast, abstractive methods build an internal semantic representation and then use natural language generation techniques to create a summary that is closer to what a human might express. Such a summary might include verbal innovations. Research to date has focused primarily on extractive methods, which are appropriate for image collection summarization and video summarization."summarize(sentence)

    结束语

    以上就是最常见的NLP任务的入门介绍和资料汇总了,如果你有更多优质的资源,也欢迎在评论区分享哦!

  • ?

    教程 | 如何用Python和机器学习炒股赚钱?

    程苠

    展开

    作者:Gatan Rickter

    机器之心编译参与:熊猫

    相信很多人都想过让人工智能来帮你赚钱,但到底该如何做呢?瑞士日内瓦的一位金融数据顾问 Gatan Rickter 近日发表文章介绍了他利用 Python 和机器学习来帮助炒股的经验,其最终成果的收益率跑赢了长期处于牛市的标准普尔 500 指数。虽然这篇文章并没有将他的方法完全彻底公开,但已公开的内容或许能给我们带来如何用人工智能炒股的启迪。机器之心对本文进行了编译介绍,代码详情请访问原文。

    我终于跑赢了标准普尔 500 指数 10 个百分点!听起来可能不是很多,但是当我们处理的是大量流动性很高的资本时,对冲基金的利润就相当可观。更激进的做法还能得到更高的回报。

    这一切都始于我阅读了 Gur Huberman 的一篇题为《Contagious Speculation and a Cure for Cancer: A Non-Event that Made Stock Prices Soar》的论文。该研究描述了一件发生在 1998 年的涉及到一家上市公司 EntreMed(当时股票代码是 ENMD)的事件:

    「星期天《纽约时报》上发表的一篇关于癌症治疗新药开发潜力的文章导致 EntreMed 的股价从周五收盘时的 12.063 飙升至 85,在周一收盘时接近 52。在接下来的三周,它的收盘价都在 30 以上。这股投资热情也让其它生物科技股得到了溢价。但是,这个癌症研究方面的可能突破在至少五个月前就已经被 Nature 期刊和各种流行的报纸报道过了,其中甚至包括《泰晤士报》!因此,仅仅是热情的公众关注就能引发股价的持续上涨,即便实际上并没有出现真正的新信息。」

    在研究者给出的许多有见地的观察中,其中有一个总结很突出:

    「(股价)运动可能会集中于有一些共同之处的股票上,但这些共同之处不一定要是经济基础。」

    我就想,能不能基于通常所用的指标之外的其它指标来划分股票。我开始在数据库里面挖掘,几周之后我发现了一个,其包含了一个分数,描述了股票和元素周期表中的元素之间的「已知和隐藏关系」的强度。

    我有计算基因组学的背景,这让我想起了基因和它们的细胞信号网络之间的关系是如何地不为人所知。但是,当我们分析数据时,我们又会开始看到我们之前可能无法预测的新关系和相关性。

    选择出的涉及细胞可塑性、生长和分化的信号通路的基因的表达模式

    和基因一样,股票也会受到一个巨型网络的影响,其中各个因素之间都有或强或弱的隐藏关系。其中一些影响和关系是可以预测的。

    我的一个目标是创建长的和短的股票聚类,我称之为「篮子聚类(basket clusters)」,我可以将其用于对冲或单纯地从中获利。这需要使用一个无监督机器学习方法来创建股票的聚类,从而使这些聚类之间有或强或弱的关系。这些聚类将会翻倍作为我的公司可以交易的股票的「篮子(basket)」。

    首先我下载了一个数据集:http://54.174.116.134/recommend/datasets/supercolumns-elements-08.html,这个数据集基于元素周期表中的元素和上市公司之间的关系。

    然后我使用了 Python 和一些常用的机器学习工具——scikit-learn、numpy、pandas、matplotlib 和 seaborn,我开始了解我正在处理的数据集的分布形状。为此我参考了一个题为《Principal Component Analysis with KMeans visuals》的 Kaggle Kernel:https://kaggle/arthurtok/principal-component-analysis-with-kmeans-visuals

    import numpy as np

    import pandas as pd

    from sklearn.decomposition

    import PCA

    from sklearn.cluster

    import KMeans

    import matplotlib.pyplot as plt

    import seaborn as sb np.seterr(pide='ignore', invalid='ignore')

    # Quick way to test just a few column features

    # stocks = pd.read_csv('supercolumns-elements-nasdaq-nyse-otcbb-general-UPDATE-2017-03-01.csv', usecols=range(1,16))

    stocks = pd.read_csv('supercolumns-elements-nasdaq-nyse-otcbb-general-UPDATE-2017-03-01.csv') print(stocks.head()) str_list = []

    for colname, colvalue in stocks.iteritems():

    if type(colvalue[1]) == str: str_list.append(colname)

    # Get to the numeric columns by inversion

    num_list = stocks.columns.difference(str_list) stocks_num = stocks[num_list] print(stocks_num.head())

    输出:简单看看前面 5 行:

    概念特征的皮尔逊相关性(Pearson Correlation)。在这里案例中,是指来自元素周期表的矿物和元素:

    stocks_num = stocks_num.fillna(value=0, axis=1) X = stocks_num.values

    from sklearn.preprocessing import StandardScaler X_std = StandardScaler().fit_transform(X) f, ax = plt.subplots(figsize=(12, 10)) plt.title('Pearson Correlation of Concept Features (Elements & Minerals)')

    # Draw the heatmap using seaborn

    sb.heatmap(stocks_num.astype(float).corr(),linewidths=0.25,vmax=1.0, square=True, cmap="YlGnBu", linecolor='black', annot=True) sb.plt.show()

    输出:(这个可视化例子是在前 16 个样本上运行得到的)。看到元素周期表中的元素和上市公司关联起来真的很有意思。在某种程度时,我想使用这些数据基于公司与相关元素或材料的相关性来预测其可能做出的突破。

    测量「已解释方差(Explained Variance)」和主成分分析(PCA)

    已解释方差=总方差-残差方差(explained variance = total variance - residual variance)。应该值得关注的 PCA 投射组件的数量可以通过已解释方差度量(Explained Variance Measure)来引导。Sebastian Raschka 的关于 PCA 的文章对此进行了很好的描述,参阅:http://sebastianraschka/Articles/2015_pca_in_3_steps.html

    # Calculating Eigenvectors and eigenvalues of Cov matirx

    mean_vec = np.mean(X_std, axis=0) cov_mat = np.cov(X_std.T) eig_vals, eig_vecs = np.linalg.eig(cov_mat)

    # Create a list of (eigenvalue, eigenvector) tuples

    eig_pairs = [ (np.abs(eig_vals[i]),eig_vecs[:,i]) for i in range(len(eig_vals))]

    # Sort from high to low

    eig_pairs.sort(key = lambda x: x[0], reverse= True)

    # Calculation of Explained Variance from the eigenvaluestot = sum(eig_vals) var_exp = [(i/tot)*100 for i in sorted(eig_vals, reverse=True)] cum_var_exp = np.cumsum(var_exp)

    # Cumulative explained variance# Variances plot

    max_cols = len(stocks.columns) - 1plt.figure(figsize=(10, 5)) plt.bar(range(max_cols), var_exp, alpha=0.3333, align='center', label='inpidual explained variance', color = 'g') plt.step(range(max_cols), cum_var_exp, where='mid',label='cumulative explained variance') plt.ylabel('Explained variance ratio') plt.xlabel('Principal components') plt.legend(loc='best') plt.show()

    输出:

    从这个图表中我们可以看到大量方差都来自于预测主成分的前 85%。这是个很高的数字,所以让我们从低端的开始,先只建模少数几个主成分。更多有关分析主成分合理数量的信息可参阅:http://setosa.io/ev/principal-component-analysis

    使用 scikit-learn 的 PCA 模块,让我们设 n_components = 9。代码的第二行调用了 fit_transform 方法,其可以使用标准化的电影数据 X_std 来拟合 PCA 模型并在该数据集上应用降维(dimensionality reduction)。

    pca = PCA(n_components=9) x_9d = pca.fit_transform(X_std) plt.figure(figsize = (9,7)) plt.scatter(x_9d[:,0],x_9d[:,1], c='goldenrod',alpha=0.5) plt.ylim(-10,30) plt.show()

    输出:

    这里我们甚至没有真正观察到聚类的些微轮廓,所以我们很可能应该继续调节 n_component 的值直到我们得到我们想要的结果。这就是数据科学与艺术(data science and art)中的「艺术」部分。

    现在,我们来试试 K-均值,看看我们能不能在下一章节可视化任何明显的聚类。

    K-均值聚类(K-Means Clustering)

    我们将使用 PCA 投射数据来实现一个简单的 K-均值。

    使用 scikit-learn 的 KMeans() 调用和 fit_predict 方法,我们可以计算聚类中心并为第一和第三个 PCA 投射预测聚类索引(以便了解我们是否可以观察到任何合适的聚类)。然后我们可以定义我们自己的配色方案并绘制散点图,代码如下所示:

    # Set a 3 KMeans clustering

    kmeans = KMeans(n_clusters=3)

    # Compute cluster centers and predict cluster indices

    X_clustered = kmeans.fit_predict(x_9d)# Define our own color map

    LABEL_COLOR_MAP = {0 : 'r',1 : 'g',2 : 'b'} label_color = [LABEL_COLOR_MAP[l] for l in X_clustered]

    # Plot the scatter digram

    plt.figure(figsize = (7,7)) plt.scatter(x_9d[:,0],x_9d[:,2], c= label_color, alpha=0.5) plt.show()

    输出:

    这个 K-均值散点图看起来更有希望,好像我们简单的聚类模型假设就是正确的一样。我们可以通过这种颜色可视化方案观察到 3 个可区分开的聚类。

    当然,聚类和可视化数据集的方法还有很多,参考:https://goo.gl/kGy3ra

    使用 seaborn 方便的 pairplot 函数,我可以以成对的方式在数据框中自动绘制所有的特征。我们可以一个对一个地 pairplot 前面 3 个投射并可视化:

    # Create a temp dataframe from our PCA projection data "x_9d"

    df = pd.DataFrame(x_9d) df = df[[0,1,2]] df['X_cluster'] = X_clustered

    # Call Seaborn's pairplot to visualize our KMeans clustering on the PCA projected data

    sb.pairplot(df, hue='X_cluster', palette='Dark2', diag_kind='kde', size=1.85) sb.plt.show()

    输出:

    构建篮子聚类(Basket Clusters)

    你应该自己决定如何微调你的聚类。这方面没有什么万灵药,具体的方法取决于你操作的环境。在这个案例中是由隐藏关系所定义的股票和金融市场。

    一旦你的聚类使你满意了,你就可以设置分数阈值来控制特定的股票是否有资格进入一个聚类,然后你可以为一个给定的聚类提取股票,将它们作为篮子进行交易或使用这些篮子作为信号。你可以使用这种方法做的事情很大程度就看你自己的创造力以及你在使用深度学习变体来进行优化的水平,从而基于聚类或数据点的概念优化每个聚类的回报,比如 short interest 或 short float(公开市场中的可用股份)。

    你可以注意到了这些聚类被用作篮子交易的方式一些有趣特征。有时候标准普尔和一般市场会存在差异。这可以提供本质上基于「信息套利(information arbitrage)」的套利机会。一些聚类则和谷歌搜索趋势相关。

    看到聚类和材料及它们的供应链相关确实很有意思,正如这篇文章说的一样:https://fairphone/en/2017/05/04/zooming-in-10-materials-and-their-supply-chains/

    我仅仅使用该数据集操作了 Cobalt(钴)、Copper(铜)、Gallium(镓)和 Graphene(石墨烯)这几个列标签,只是为了看我是否可能发现从事这一领域或受到这一领域的风险的上市公司之间是否有任何隐藏的联系。这些篮子和标准普尔的回报进行了比较。

    通过使用历史价格数据(可直接在 Quantopian、Numerai、Quandl 或 Yahoo Finance 使用),然后你可以汇总价格数据来生成预计收益,其可使用 HighCharts 进行可视化:

    我从该聚类中获得的回报超过了标准普尔相当一部分,这意味着你每年的收益可以比标准普尔还多 10%(标准普尔近一年来的涨幅为 16%)。我还见过更加激进的方法可以净挣超过 70%。现在我必须承认我还做了一些其它的事情,但因为我工作的本质,我必须将那些事情保持黑箱。但从我目前观察到的情况来看,至少围绕这种方法探索和包装新的量化模型可以证明是非常值得的,而其唯一的缺点是它是一种不同类型的信号,你可以将其输入其它系统的流程中。

    生成卖空篮子聚类(short basket clusters)可能比生成买空篮子聚类(long basket clusters)更有利可图。这种方法值得再写一篇文章,最好是在下一个黑天鹅事件之前。

    如果你使用机器学习,就可能在具有已知和隐藏关系的上市公司的寄生、共生和共情关系之上抢占先机,这是很有趣而且可以盈利的。最后,一个人的盈利能力似乎完全关乎他在生成这些类别的数据时想出特征标签(即概念(concept))的强大组合的能力。

    我在这类模型上的下一次迭代应该会包含一个用于自动生成特征组合或独特列表的单独算法。也许会基于近乎实时的事件,这可能会影响那些具有只有配备了无监督学习算法的人类才能预测的隐藏关系的股票组。

    原文链接:https://hackernoon/unsupervised-machine-learning-for-fun-profit-with-basket-clusters-17a1161e7aa1

  • ?

    《学Python量化,通往财务自由》| 资产收益率

    柯克沃尔

    展开

    1.资产收益率

    我准备在接下来的一段日子里,为大家分享一些关于使用Python进行量化分析的教程,其中会涉及到交易策略和模型、时间序列分析、量化指标、金融知识等,感兴趣的朋友可以关注下。

    在前几天中,我们会先补充一些基础知识,有经验的朋友可以跳过,等待后续的更新。

    今天我们简单地介绍关于收益率的一些概念,方便大家理解我们后续的量化教程的分享。这些都很简单,但是请有经验的读者理解,毕竟有些读者没有这些基础,后边理解起来可能会有些吃力。

    一、收益率简介

    在金融领域,收益率是我们耳熟能详的一个名词。资产的收益率是指投入资产所带来的收益占当初投资成本的比例,计算公式如下:

    也就是说,想要得到收益率,我们得先知道投资成本和投资收益分别是多少。投资成本很容易计算:

    不同的资产会有不同形式的收益,其中一种形式是由资产价格变化所产生的收益,成为资本利得(CapitalGain),资本利得并不总是正收益,负收益(损失)也是资本利得。在投入资产与卖出资产这段持有期里所产生的其他形式的收益也有很多,比如房产的租金、股票的分红、债券的利息等。将投资期间所有的投资收益加总起来,即可得到期间投资收益:

    期间投资收益除以期初投资的成本,即可得到期间收益率(Holding Period Return):

    以上计算收益率时并没有考虑交易成本,现实中不同的资产会有不同的交易成本,比如投资房地产可能会有中介费用、认购开放式基金需要支付手续费(申购费)、买卖股票会有手续费和印花税等。收益扣除买卖资产时的交易成本后就是净收益:

    一般来说,投资人购买资产时,未来的收益率是不确定的。但是作为投资人,投资的目的是获得正收益,也就是说,购买资产时,投资人预期未来会获得正收益。预期收益率(Expected Rate of Return)是指投资人购买某资产之前,预估未来可以获得的收益率水平,是一种事前(Ex ante)的收益率。与之对应的是实际收益率,即在确定了实际损益后计算的收益率,是一种事后(Ex Post)的或者已经实现(Realized)的收益率。

    二、单期与多期简单收益率

    资产持有时间的不同往往会带来不同的收益。在计算单个资产的收益率或者比较不同的资产收益率时,我们需要先确定资产的持有期。

    1. 单期简单收益率

    如果把一段时间内每一期的资产价格按照时间先后顺序排列起来,将得到资产价格的时间序列。把最早一期的价格用表示,之后的一期为,以此类推,就可以得到这一时间序列。假设投资者在时投入某资产,投入价格为,持有一期后以的价格卖掉。假设该资产在这一期的持有期间内,无其他收益、也不考虑交易成本,那么投资者的单期简单收益率(One Period Simple Return)的计算公式为:

    简单毛收益率(Simple Gross Return)为1+Rt:

    2. 多期简单收益率

    3. 单期与多期简单收益率之间的关系

    第t期的k期收益率与单期收益率的关系为:

    这个很好理解,就是将最近k期的收益率都加上1,然后相乘,最后再减去1,得到的就是我们的k期多期收益率。

    我们也可以将k期收益率直接相加,即:

    两者的区别是,前者使用的是复利的算法,每期的收益都会投入到下一期资产中;后者使用的是没有复利的算法,即每一期的本金都是一致的,每期的收益不会作为下一期的本金。

    4. 年化收益率

    年化收益率也很容易理解,假如我们的资产持有期为T期,收益率为,一年有m期,那么以非复利的算法来考虑,我们的年化收益率为:

    以复利的算法来考虑,我们的年化收益率为:

    以上的各种收益率的计算都很简单,就是简单的数学计算,所以这次我们就不用代码来演示了,后续稍微复杂的地方,我们都会用代码来演示一下。

    5. 其他重要概念

  • ?

    贾扬清撰文详解Caffe2:从强大的新能力到入门上手教程

    仲雨柏

    展开

    选自 Nvidia Blog作者:Aaron Markham、贾扬清机器之心编译

    昨天,Facebook 推出了 Caffe2,一个兼具表现力、速度和模块性的开源深度学习框架。它沿袭了大量的 Caffe 设计,可解决多年来在 Caffe 的使用和部署之中发现的瓶颈问题。最终,Caffe2 打开了算法实验和新产品的大门。通过在内部用于各种深度学习和增强现实任务,Caffe2 已经在 Facebook 对于规模和性能的需求上得到了锻造。同时,它为移动端应用提供了令人印象深刻的新功能,例如高级相机和即时通讯功能。英伟达作为 Caffe2 的开发合作者,计划对 Caffe2 的深度学习应用推出一系列博客文章。本文即是该系列博文的第一篇,将介绍 Caffe2 的深度学习基础知识,证明其灵活性和速度;本文还将介绍为什么你想要使用 Caffe2、是什么使 Caffe2 区别于 Caffe,最后还会通过一个预训练的目标分类模型给出一个 Caffe2 使用案例。

    一次编码,任意运行

    在保有扩展性和高性能的同时,Caffe2 也强调了便携性。「便携性」通常使人想起 overhead——它如何在诸多不同的平台上工作?overhead 如何影响扩展的能力?Caffe2 当然已把这些考虑在内,其从一开始就以性能、扩展、移动端部署作为主要设计目标。Caffe2 的核心 C++ 库能提供速度和便携性,而其 Python 和 C++ API 使你可以轻松地在 Linux、Windows、iOS、Android 甚至 Raspberry Pi 和 NVIDIA Tegra 上进行原型设计、训练和部署。也许你会问:物联网呢?Caffe2 将适用于大量设备。尽管你并不想在物联网设备上训练网络,但你可以在其上面部署训练好的模型。

    当 GPU 可用时,Caffe2 也不会错失这个良机。在 Facebook 和英伟达的合作下,Caffe2 已经可以充分利用英伟达 GPU 深度学习平台。Caffe2 可使用最新的英伟达深度学习 SDK 库——cuDNN、cuBLAS 和 NCCL——来实现高性能、多 GPU 加速训练和推理。

    绝大多数内置函数都可根据运行状态在 CPU 模式和 GPU 模式之间无缝切换。这意味着无需额外编程即可享用深度学习超级加速的便利。这引出了 Caffe2 激动人心的另一个方面:多 GPU 和多主机处理。Caffe2 使并行化网络训练变得简单,现在实验和扩展对你而言也非常简单。

    最近的 ImageNet 训练基准使用了 64 块最新的英伟达 GPU 和 ResNet-50 神经网络架构。Facebook 工程师实现的 Caffe2 的 data_parallel_model(https://github/caffe2/caffe2/blob/master/caffe2/python/data_parallel_model.py)能够在 Facebook 的 8 个 Big Basin 人工智能服务器(每个服务器配有 8 个英伟达 Tesla P100 GPU 加速器,8 个服务器共有 64 块 GPU)上进行分布式神经网络训练。图 1 是这些系统的扩展结果:近乎直线的深度学习训练扩展,带有 57 倍的吞吐量加速。

    图 1: 通过 Resnet-50 模型在多达 64 个英伟达 Tesla P100 GPU 加速器上训练的 Caffe2 扩展系数

    Caffe2 的新功能

    你也许记得在 Caffe 中一切都表征为一个「网」(Net),它由「层」组成,这些层是以神经网络中心化方式来定义计算。然而,这创建了一种非常刚性的计算模式,并带来了很多硬编码例程,尤其在深度神经网络训练方面。

    Caffe2 采用了更现代的计算图(computation graph)来表征神经网络或者包括集群通信和数据压缩在内的其它计算。这一计算图采用「算子」(operator)的概念:在给定输入的适当数量和类型以及参数的情况下,每个算子都包含了计算输所必需的逻辑。尽管 Caffe 中的层总是采用张量(矩阵或多维数组),但 Caffe2 中的算子可采用并产生包含随意对象的「blob」,这一设计使得很多过去在 Caffe 中不可实现的事情成为可能:

    CNN 分布式训练可由单个计算图表征,不管是在一个或多个 GPU 还是在多台机器上训练。这对 Facebook 规模的深度学习应用很关键。在专业硬件上轻松进行异构计算。例如,在 iOS 上,Caffe2 计算图可从 CPU 获取图像,将其转化为 Metal GPU 缓存对象,并将计算完全保留在 GPU 上,以获得最大吞吐量。更好地管理运行时间资源,比如使用 memonger 优化静态内存,或者预打包训练网络以获得最佳性能。float、float16、int8 混合精度和其他量化模型的计算。

    Caffe2 有超过 400 个算子,具备广泛的功能。你可以浏览算子目录(http://caffe2.ai/docs/operators-catalogue.html)、查看稀疏操作(http://caffe2.ai/docs/sparse-operations.html)并学习如何编写自定义算子(http://caffe2.ai/docs/custom-operators.html)。

    安装与设置

    你要做的第一件事就是查看 Caffe2 的 GitHub 主页,clone 或 fork 该项目的 Github repo。

    git clone https://github/caffe2/caffe2.git

    如果你安装不了 Caffe2,你可以查看以下安装指南:http://caffe2.ai/docs/getting-started.html,尝试这个 Docker 镜像:https://hub.docker/r/caffe2ai/caffe2/,或者在你选择的云提供商上运行。其文档也为每个选项提供了指令。然而,我们建议你通过建立 GPU 支持的云实例,来验证 GPU 的处理速度。以下是使用 Docker 建立 GPU 支持的 Caffe2 的快速方式:

    docker pull caffe2ai/caffe2 && docker run -it caffe2ai/caffe2:latest \python -m caffe2.python.operator_test.relu_op_test

    尝试一个预训练的模型

    现在让我们实际上手试一试!在这第一个教程中,我会教你如何轻松使用 Caffe2 的 Model Zoo 和模型下载器(model downloader),以帮你自己动手实验一些其它模型。Model Zoo 链接:http://caffe2.ai/docs/zoo.html

    使用 Caffe2 的模型下载器

    这是一个下载模块(https://github/caffe2/caffe2/blob/master/caffe2/python/models/download.py),你可以使用它来获取预训练好的网络。你可以将该模块整合到你的脚本中,或者在命令行中使用它:

    python -m caffe2.python.models.download

    比如,这行命令可以下载 squeezenet 预训练模型:

    python -m caffe2.python.models.download squeezenet

    下载了 squeezenet 之后,你可以加载它。这个模型下载器模块有一个安装(install)选项,你可以使用 -i 开启。否则你就需要在下载文件后自己移动它。一旦安装完成,你也可以直接将这些模型导入到你的 Python 脚本:

    python -m caffe2.python.models.download -i squeezenet

    运行一个预训练模型:目标分类

    让我们试试用 Caffe2 做一次目标分类。如果你已经下载了一个预训练模型,这做起来就很简单。如果你还没有下载 squeezenet,你可以使用上述方法下载,也可从 S3 下载 init_net.pb 和 predict_net.pb 文件。

    init_net.pb:https://s3.amazonaws/caffe2/models/squeezenet/init_net.pbpredict_net.pb:https://s3.amazonaws/caffe2/models/squeezenet/predict_net.pb

    将下载好的文件放到 $PYTHONPATH/caffe2/python/models/squeezenet 文件夹。你的 Python 代码需要 Caffe2 的 workspace 来存放该模型的 protobuf 负载和权重,并将它们加载到 blob、init_net 和 predict_net 中。你将需要 workspace.Predictor 来接收这两个 protobuf,然后剩下的就交给 Caffe2 处理了。Caffe2 有一个简单的 run 函数,可以输入图像并进行分析,然后返回一个带有结果的张量。

    # load up the caffe2 workspacefrom caffe2.python import workspace# choose your model here (use the downloader first)from caffe2.python.models import squeezenet as mynet# helper image processing functionsimport caffe2.python.tutorials.helpers as helpers# load the pre-trained modelinit_net = mynet.init_netpredict_net = mynet.predict_net# you must name it somethingpredict_net.name = "squeezenet_predict"workspace.RunNetOnce(init_net)workspace.CreateNet(predict_net)p = workspace.Predictor(init_net.SerializeToString(), predict_net.SerializeToString())# use whatever image you want (local files or urls)img =「https://upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Orange-Whole-%26-Split.jpg/1200px-Orange-Whole-%26-Split.jpg」img = "https://upload.wikimedia.org/wikipedia/commons/a/ac/Pretzel.jpg"img = "https://cdn.pixabay/photo/2015/02/10/21/28/flower-631765_1280.jpg"# average mean to subtract from the imagemean = 128# the size of images that the model was trained withinput_size = 227# use the image helper to load the image and convert it to NCHWimg = helpers.loadToNCHW(img, mean, input_size)# submit the image to net and get a tensor of resultsresults = p.run([img])response = helpers.parseResults(results)# and lookup our result from the listprint response

    该结果是一个概率的张量(一个多维数组)。本质上来看,每一行都表示了目标与神经网络所识别出的内容相匹配的几率。

    注意,当该 workspace 的 Predictor 函数被调用来加载该预训练的模型时,下一步就是调用 .run 并给该函数传递一个图像数组。

    p = workspace.Predictor(init_net, predict_net)results = p.run([img])

    图像预处理

    为了更快的处理速度和传统上的原因,图像在被送入 Caffe2 之前还需要经过两步转换:

    1. 将颜色从 RGB 转换成 BGR

    2. 将图像封装成像素数组,并提供批(batch)中图像的数量(在这案例中是 1)、通道(按 BGR 排列的像素)的数量、高度和宽度,它们分别被称为:NCHW for Number、Channels、Height 和 Width。

    这些图像预处理函数由一个助手模块(helper module)进行处理,所以你可以仅关注特定于 Caffe2 的交互。要更深入地了解图像预处理,请参阅相关 IPython 笔记:https://github/caffe2/caffe2/blob/master/caffe2/python/tutorials/Image_Pre-Processing_Pipeline.ipynb

    获得结果

    当模型完成图像数组的处理时,你会获得一个多维数组,其形式为(1, 1, 1000, 1, 1)

    results = np.asarray(results)print "results shape: ", results.shaperesults shape: (1, 1, 1000, 1, 1)

    看到 results.shape 中的那个 1000 了吗?如果该批中不止一张图片,那么这个数组就会更大,但在中间仍然有 1000 个单元。其存放了该预训练模型中每个类别的概率。所以当你查看结果时,就好像是在说:「计算机,这是一个铍(Beryllium)球的概率是多少?」还是说这是一只毒蜥或其它 998 种该模型被训练用来识别的类别。

    这是一个从 1000 长度的张量中提取出的前 3 个结果,已经过收缩和排序。这些结果按照匹配的概率进行了排序,0.98222 (98%) 是最高的。

    [array([985.0, 0.9822268486022949], dtype=object), array([309.0, 0.011943698860704899], dtype=object), array([946.0, 0.004810151644051075], dtype=object)]

    这是按照概率排列的前三个类别,说明了被检测的目标属于某个类别的概率。你可以使用这个 gist 来查看结果:https://gist.githubusercontent/aaronmarkham/cd3a6b6ac071eca6f7b4a6e40e6038aa/raw/9edb4038a37da6b5a44c3b5bc52e448ff09bfe5b/alexnet_codes。每次你运行这个示例时,你都会得到有轻微差别的结果。运行一张有一些雏菊的图片,该模型会得到:

    除了最高概率的正确答案之外,第二和第三分别是蜜蜂和刺棘蓟,鉴于蜜蜂常常和花出现在同一张照片中,所以这样的结果也有点道理。

    输入一张切开的橘子照片,可以得到:橘子(95.3%)、柠檬(4.6%)、草莓(0.006%)。

    Caffe2 的合作与共享

    Caffe2 发展的基石是对深度学习感兴趣并使用过 Caffe 以及其它开源机器学习工具的开发者、研究人员和公司组成的社区。通过在 Caffe2 上的开源以及在 Model Zoo 上的创新协作,我们希望能够推进人工智能科学的进步,并促进各个产业的收益。Caffe2 开源项目的成员能直接在列举所有模型的 Caffe2 Github Wiki 页面做贡献:https://github/caffe2/caffe2/wiki。

    我们也邀请了开发者、研究人员以及任何对创造或精调模型感兴趣的人在 Caffe2 GitHub 的「issue」页面进行分享:https://github/caffe2/caffe2/issues,也可以要求把问题添加到 Zoo 中。此外,Github 的「issue」部分不只是面向 Caffe2 的开发者。如果你创建 Caffe2 模型、改进预训练模型,甚至只是使用预训练模型,你也能在该部分对此资源和 Model Zoo 进行输入、建议与贡献。关于 Caffe2 和 Model Zoo 合作(http://caffe2.ai/docs/zoo.html)的进一步信息请移步 http://caffe2.ai。

    在 GTC 大会上学习 Caffe2

    这部分包含了我们第一篇 Parallel Forall 博客。接下来的一篇博客中我们将会深解如何使用 Caffe2 训练 ImageNet,在文章内我们会展示一些有关分布式训练的激动人心的新基准、在优化 Caffe 2 训练上的小建议以及如何使用 Caffe2 的数据并行模型的细节。

    此外 5 月 8 日 - 11 日在圣何塞市举办的 GTC 大会是每年一度的人工智能与 GPU 开发者大会,机器之心作为受邀媒体将会对此大会的精彩内容进行报道。

    原文链接:https://devblogs.nvidia/parallelforall/caffe2-deep-learning-framework-facebook/

量化教程

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。