关于算法:分形之城递归超典型例题还没明白手把手画给你看

援用自Acwing,原题链接: 98. 分形之城目录: 题目题解代码题目<p>城市的布局在城市建设中是个大问题。</p><p>可怜的是,很多城市在开始建设的时候并没有很好的布局,城市规模扩充之后布局不合理的问题就开始浮现。</p><p>而这座名为 Fractal 的城市构想了这样的一个布局计划,如下图所示: </p> <p>当城区规模扩充之后,Fractal 的解决方案是把和原来城区构造一样的区域依照图中的形式建设在城市四周,晋升城市的等级。</p><p>对于任意等级的城市,咱们把正方形街区从左上角开始依照路线标号。</p> 尽管这个计划很烂,Fractal 布局部门的人员还是想晓得,如果城市倒退到了等级 $N$,编号为 $A$ 和 $B$ 的两个街区的直线间隔是多少。 街区的间隔指的是街区的中心点之间的间隔,每个街区都是边长为 $10$ 米的正方形。 <h4>输出格局</h4>第一行输出正整数 $n$,示意测试数据的数目。 以下 $n$ 行,输出 $n$ 组测试数据,每组一行。 每组数据包含三个整数 $N, A, B$,示意城市等级以及两个街区的编号,整数之间用空格隔开。 <h4>输入格局</h4> 一共输入 $n$ 行数据,每行对应一组测试数据的输入后果,后果四舍五入到整数。 <h4>数据范畴</h4> $1 \le N \le 31$$1 \le A,B \le 2^{2N}$$1 \le n \le 1000$<h4>输出样例:</h4> 3 1 1 2 2 16 1 3 4 33 <h4>输入样例:</h4> 10 30 50 题解这有啥不明确的,手把手画进去! 首先明确,为啥能用递归: 咱们想计算 n 等级的坐标,晓得 n-1 等级的坐标就行而后思考怎么递归? ...

July 12, 2021 · 2 min · jiezi

关于算法:最新-抖音-XGorgon-算法定位查找过程笔记-最新抖音xg算法

本次剖析抖音版本:13.3    X-Gorgon版本:0408  和 8408  可测试本次间接开始解说剖析0408和8408的区别。至于逆向记录能够参考我之前的文章! 如果最近更新了新版抖音的app的人应该曾经发现了,抖音安卓版的xg算法结尾也变成了8408结尾,因为84结尾之前都是ios平台上的xg算法,到目前为止,IOS平台的xg还是8404结尾。 最近抖音更新到13.x版本当前,抓包会发现,xg变成了8408结尾。我一开始是诧异,怎么当初安卓端也开始跟ios端的xg算法一样了?于是我下功夫钻研了一下。发现了猫腻所在。如下图 所有版本X-Gorgon和所有语言的如下图: 可测试抖音app先是检测了你的手机cpu架构,是x86还是armeabi,通过cpu架构的不同来调用so内不同的xg办法,所以导致当初最新版抖音app的xg算法有0408和8408两种。 两种都是最新版,因为我发现当我应用oppo手机装置最新版抖音抓包的xg是8408,而当我用小米或者华为装置最新版抖音,抓包当前发现xg是0408。 下图是X-Gorgon具体的校验逻辑。 总结  以上就是对抖音对一个简略的x-gorgon的剖析笔记过程,分割我看图片中,心愿可能有所帮忙,也可能对本身的产品安全方面进行一个参考借鉴。欢送评论交换分割我看图片 免责申明请勿应用本文章分享内容用于商用请勿应用本文章分享内容用大量抓取若因应用本文章分享内容用与抖音官网造成不必要的纠纷,自己盖不负责自己纯正技术喜好,若进犯抖音贵公司的权利,请告知

July 9, 2021 · 1 min · jiezi

关于算法:CS-659-图像处理

CS 659 Image ProcessingExam TwoName: Student ID #:Covering Lectures 7~13. There are 4 questions. Each is 25 points. (a) Suppose that A is an image of 6x13 and B is the structure element (note: the origin islocated at the center) shown below. A: B: 0000000000000 0 1 0 0111110001110 1 1 1 0111110001110 0 1 0 0111110001110 0111111111110 0000000000000What is the result of A ⊕ B? What is the result of A B?(b) Draw the quadtree representation for the following image. What is the size of a block representedby a node at level 2? Assuming the root is labeled as level 0, the next downwards are level 1, level 2,and so on.(a) Apply a two-step distance algorithm to obtain the chessboard distance transform on thefollowing image.(b) What is the skeleton from the above distance transformation?(c) What is the disadvantage of the skeleton obtained by this method?Apply the thinning algorithm to the following binary image. (Use 8-neighbor) Note that thedeletion of non-simple pixels starts from North, and then South, West, East, and repeat the deletionuntil no changes.How can we obtain the chain codes and crack codes by using the border followingalgorithm considering 8-connectedness? 0000010 0111110 0111000 0000111 0000010WX:codehelp ...

July 9, 2021 · 1 min · jiezi

关于算法:COMP7104-B树原理解析

COMP7104 – DASC7104 2018-2019 – Advance Database SystemsHomework 2 – Indexing and Relational AlgebraIndices (B+ Trees) Assume we have the following B+-tree of order 1. Each node in the index must have either 1or 2 keys (i.e, 2 or 3 pointers), and the leaves can hold up to 2 entries.a) What is the maximum number of insertions we can perform without changing the height of thistree? Illustrate it by giving such an insertion pattern.b) What is the minimum number of keys we can insert in order to trigger a change in the heightof this tree? Illustrate it by giving such an insertion pattern.Suppose we have an Alternative 2 unclustered index on the attribute pair (assignment_id,student_id) with a depth of 3 (one must traverse 3 index pages to reach a leaf page).Here is the schema:CREATE TABLE Submissions ( record_id integer UNIQUE, assignment_id integer, student_id integer, time_submitted integer, grade_received byte, comment text, regrade_request text,PRIMARY KEY(assignment_id, student_id) );CREATE INDEX SubmissionLookupIndex ON Submissions (assignment_id, student_id);Assume the table and its associated data takes up 12 MB on disk and that page size is 64 KB.(This includes extra space allocated for future insertions; pages are 2/3 full.)Assume also you know the size of each attribute type: integer 4B, text: 32B, byte: 1B. Pagepointers (page Ids) are 2B long, row Ids are 4B long.a) We want to scan all the records in Submissions. How many I/Os will this operation take ?b) The following instruction is executed:UPDATE StudentsSET grade_received=85WHERE assignment_id=20 AND student_id=12345;How many I/Os will this operation take?c) In the worst case, how many I/Os does it take to perform an equality search on attributegrade_received?Consider the B+ tree index of order d = 2 shown below.a) Show the index resulting from inserting a data entry with key 9 into this index.b) Show the index resulting from inserting a data entry with key 3 into the original index. Howmany page reads and page writes are necessary for this insertion?c) Show the index resulting from deleting the data entry with key 8 from the index, assuming thatthe left sibling is checked for possible redistribution.d) Show the index resulting from deleting the data entry with key 8 from the original tree, assumingthat the right sibling is checked for possible redistribution.e) Show the index resulting from starting with the original tree, inserting a data entry with key 46and then deleting the data entry with key 52.f) Show the index resulting from deleting the data entry with key 91 from the original tree.Relational Algebra. Consider the following schema:Suppliers(sid: integer , sname: string , address: string )Parts(pid: integer , pname: string , color: string )Catalog(sid: integer , pid: integer , cost: real )The key fields are underlined, and the domain of each field is listed after the field name. Thereforesid is the key for Suppliers, pid is the key for Parts, and sid and pid together form the key forCatalog. The Catalog relation lists the prices charged for parts by Suppliers.Describe in plain English (without using words such as join, project, select, etc) what thefollowing RA queries compute:a) sname (sid ((color=redParts) (cost<100Catalog ))Suppliers)b) sname (sid ((color=redParts) (cost<100Catalog )Suppliers))c) (sname ((color=redParts) (cost<100Catalog )Suppliers)) ∩(sname ((color=greenParts) (cost<100Catalog )Suppliers))d) (sid((color=redParts) (cost<100Catalog)Suppliers)) ∩(sid((color=greenParts) (cost<100Catalog)Suppliers))e) sname ((sid,sname ((color=redParts) (cost<100Catalog )Suppliers )) ∩(sid,sname ((color=greenParts)(cost<100Catalog)Suppliers))) WX:codehelp

July 9, 2021 · 3 min · jiezi

关于算法:拓端tecdatR语言蒙特卡洛方法方差分量的Metropolis-HastingsMH吉布斯Gibbs采样比较分析

原文链接:http://tecdat.cn/?p=23019 蒙特卡洛办法利用随机数从概率分布P(x)中生成样本,并从该散布中评估期望值,该期望值通常很简单,不能用准确办法评估。在贝叶斯推理中,P(x)通常是定义在一组随机变量上的联结后验散布。然而,从这个散布中取得独立样本并不容易,这取决于取样空间的维度。因而,咱们须要借助更简单的蒙特卡洛办法来帮忙简化这个问题;例如,重要性抽样、回绝抽样、吉布斯抽样和Metropolis Hastings抽样。这些办法通常波及从倡议密度Q(x)中取样,以代替P(x)。 在重要性抽样中,咱们从Q(x)中产生样本,并引入权重以思考从不正确的散布中抽样。而后,咱们对咱们须要评估的预计器中的每个点的重要性进行调整。在回绝抽样中,咱们从提议散布Q(x)中抽取一个点,并计算出P(x)/Q(x)的比率。而后咱们从U(0,1)散布中抽取一个随机数u;如果,咱们就承受这个点x,否则就回绝并回到Q(x)中抽取另一个点。吉布斯抽样是一种从至多两个维度的散布中抽样的办法。这里,提议散布Q(x)是以联结散布P(x)的条件散布来定义的。咱们通过从后验条件中迭代抽样来模仿P(x)的后验样本,同时将其余变量设置在其以后值。 尽管,重要性抽样和回绝抽样须要Q(x)与P(x)类似(在高维问题中很难创立这样的密度),但当条件后验没有已知模式时,吉布斯抽样很难利用。这一假如在更广泛的Metropolis-Hastings算法中能够放宽,在该算法中,候选样本被概率性地承受或回绝。这种算法能够包容对称和不对称的提议散布。该算法能够形容如下  初始化抽取计算从中抽取如果 设否则,设置完结  吉布斯抽样是Metropolis Hastings的一个特例。它波及一个总是被承受的提议(总是有一个Metropolis-Hastings比率为1)。 咱们利用Metropolis Hastings算法来预计规范G-BLUP模型中回归系数的方差成分。 对于G-BLUP模型。 其中,代表表型的向量和基因型的矩阵。 是标记效应的向量,是模型残差的向量,残差为正态分布,均值为0,方差为和。 思考到其余参数,的条件后验密度为: 这是一个逆卡方散布。 假如咱们须要使的先验尽可能地不具信息性。一种抉择是设置,,并应用回绝抽样来预计;然而,设置S0=0可能会导致算法卡在0处。 因而,咱们须要一个能够代替逆卡方散布的先验,并且能够非常灵活。为此,咱们倡议应用散布。因为所失去的后验不是一个适合的散布,Metropolis Hastings算法将是取得后验样本的一个好抉择。 这里咱们把作为咱们的提议散布Q。因而。 咱们的指标散布是的正态似然与的先验的乘积。因为散布的域在0和1之间,咱们用变量来代替先验,其中MAX是一个确保大于的数字,这样。 其中1和2是散布的形态参数,其平均值由给出。 咱们依照下面的算法步骤,计算出咱们的承受率,如下所示。 而后咱们从均匀分布中抽取一个随机数u,如果,则承受样本点,否则咱们回绝该点并保留以后值,再次迭代直至收敛。 Metropolis Hastings 算法MetropolisHastings=function(p, ...) chain\[1\]=x  for (i in 1:nIter) {      y\[i\] <-(SS+S0)/rchisq(df=DF,n=1,...)      logp.old\[i\]=-(p/2)\*log(chai) - (SS/(2\*chain) + (shape1-1)*(log(chain\[i\]/(MAX)))+(shape2-1)*(log(1-(chain\[i\]/(MAX))    logp.new\[i\]=-(p/2)\*log(y\[i\]) - (SS/(2\*y\[i\])) + (shape1-1)*(log(y\[i\]/(MAX)))+(shape2-1)*(log(1-(y\[i\]/(MAX))    chain\[i+1\] = ifelse (runif(1)<AP\[i\] , y\[i\], chain\[i\],...)吉布斯采样器 gibbs=function(p,...)b = rnorm(p,0,sqrt(varb),...) for (i in 1:Iter) {      chain\[i\] <-(S+S0)/rchisq(df=DF,n=1,...)绘制图plot = function(out1,out2)plot(density(chain1),xlim=xlim)lines(density(chain2),xlim=xlim)abline(v=varb,col="red",lwd=3)设置参数  运行吉布斯采样器##################out1=gibbs(p=sample.small,...)out2=gibbs(p=sample.large,...)在不同的状况下运行METROPOLIS HASTINGS小样本量,先验out.mh=mh(p=sample.small,nIter=nIter,varb=varb,shape1=shape.flat,shape2=shape.flat, MAX=MAX)   样本量小,值的形态1参数大 p=sample.smallnItervarbshape.skew\[1\]shape.skew\[2\] MAX plot(out.mh, out.gs_1)   样本量小,值的形态1参数大MetropolisHastings(p) makeplot(out.mh, out.gs_1)## Summary of chain for MH: ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. ##  0.2097  0.2436  0.2524  0.2698  0.2978  0.4658 样本量小,的形态参数雷同(大) plot(out.mh, out1) 大的样本量,先验 plot(out.mh, out2) 大样本量,形态1参数的 plot(out.mh, out2) 大样本量,值的大形态2参数 plot(out.mh, out_2) 大样本量,的形态参数雷同(大) plot(out.mh, out2) 参考文献 Gelman, Andrew, et al. Bayesian data analysis. Vol. 2. London: Chapman & Hall/CRC, 2014. ...

July 9, 2021 · 1 min · jiezi

关于算法:DenseBox思想超前的早期Anchorfree研究-CVPR-2015

DenseBox检测算法的设计非常超前,现在很多Anchor-free办法有其影子,如果过后不是比Faster R-CNN晚了一点呈现,可能指标检测畛域很早就开始往Anchor-free的方向倒退了 起源:晓飞的算法工程笔记 公众号论文: DenseBox: Unifying Landmark Localization withEnd to End Object Detection 论文地址:https://arxiv.org/abs/1509.04874Introduction DenseBox是晚期的Anchor-free指标检测算法,过后R-CNN系列在小物体的检测上有显著的瓶颈,所以作者提出DenseBox,在小物体的检测也有不错的体现。在DenseBox提出的早些工夫,驰名的Faster R-CNN呈现了,其弱小的性能主导了指标检测算法往anchor-based的方向倒退。直到FPN的呈现后,Anchor-free算法的性能才有了很大的晋升,更多的工作开始波及Anchor-free畛域。目前很多Anchor-free指标检测钻研都有DenseBox的影子,所以DenseBox的设计思路还是很超前的。 DenseBox for Detection DenseBox的整体设计如图1所示,单个卷积网络同时输入多个预测框及其类别置信度,输入的特色图大小为$5\times \frac{m}{4}\times \frac{n}{4}$。假如像素$i$位于$(x_i, y_i)$,其冀望的5维向量为$\hat{t}_i=\{\hat{s}, \hat{dx^t}=x_i - x_t, \hat{dy^t}=y_i - y_t, \hat{dx^b}=x_i - x_b, \hat{dy^b}=y_i - y_b \}$,第一个为分类置信度,后四个为像素地位到指标边界的间隔,最初,将所有像素的输入转化为预测框,通过NMS解决后进行最初的输入。 Ground Truth Generation DenseBox在训练时没有将残缺的图片作为输出,而是截取蕴含指标以及足够背景的较大区域进行训练。在训练时,将截取的图片resize大$240\times 240$,保障人脸位于截取区域的核心以及高度大概50像素,输入$5\times 60\times 60$的特色图。正样本区域是指标中心点半径为$r_c$内的圆,$r_c$与指标的大小相干,论文设置为0.3。如果截取的区域蕴含多个人脸,仅保留中心点在截取区域核心0.8到1.25范畴内的人脸,其它均认为是负样本。 Model Design DenseBox的网络结构如图3所示,蕴含16个卷积层,前12个卷积层由VGG19初始化,网络也增加了一些不同层之间的特色交融,能够综合不同感触域的特色。 Multi-Task Training 网络同时进行分类和地位预测,网络由两个工作独特学习,分类工作的损失值间接通过L2损失计算: 地位预测工作的损失值也通过L2损失计算: 因为论文采纳了截取图片的形式进行训练,就会面临样本制作的问题,而DenseBox在正负样本制作以及学习下面做了一些工作: Ignoring Gray Zone,灰色区域是处于正负点之间的过渡区域,不参加损失值的计算。对于一个非正样本点,如果其半径为2的范畴内存在正样本点,则纳入灰色区域。Hard Negative Mining,在训练过程中,依据公式1将样本排序,取top 1%作为hard-negative,可能帮忙网络重点学习这些难样本。Loss with Mask,依据像素点的类型定义特色图的掩膜$M(\hat{t}_i)$,并联合公式1、公式2以及掩膜输入最终的损失值: ...

July 9, 2021 · 1 min · jiezi

关于算法:算法LRU缓存机制

题目:设计和实现一个 LRU (最近起码应用) 缓存机制 。LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存。int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。void put(int key, int value) 如果关键字曾经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到下限时,它应该在写入新数据之前删除最久未应用的数据值,从而为新的数据值留出空间。是否能够在 O(1) 工夫复杂度内实现这两种操作?解决办法:哈希表 + 双向链表1、双向链表:节点凑近头部是最近应用的,凑近尾部是最久未应用的,在双向链表的头部增加节点、在双向链表的尾部删除节点的复杂度也为 O(1)。2、哈希表:通过缓存数据的键映射到其在双向链表中的地位(定位),查找节点工夫复杂度:o(1)。3、为了在链表操作过程中更少的判断头尾节点是否为null,采纳哨兵机制,头尾都增加哨兵(与传统双向链表性能貌似无很大差异,只是判断nullptr较多容易出错)。源码剖析://节点定义struct DLinkedNode{ int key, value; //节点在hash表里的键值和值 DLinkedNode* prev; //此节点的前驱节点 DLinkedNode* next; //此节点的后继节点 DLinkedNode() :key(0), value(0), prev(nullptr), next(nullptr) {} //构造函数,赋值key和value DLinkedNode(int _key, int _value) :key(_key), value(_value), prev(nullptr), next(nullptr) {} //带参构造函数(重载)}; //LRU 缓存类class LRUCache {private: unordered_map<int, DLinkedNode*> cache; //哈希映射表 DLinkedNode* head; //双向链表头结点 DLinkedNode* tail; //双向链表尾结点 int size; //以后节点个数 int capacity; //LRU缓存最大节点个数(容量) public: LRUCache(int _capacity) :capacity(_capacity), size(0){ head = new DLinkedNode(); //哨兵节点,造成环形链表 tail = new DLinkedNode(); head->next = tail; tail->prev = head; } //获取数据 int get(int key){ //判断是否缓存命中 if (!cache.count(key)){ return -1; } //因为最近拜访了,所以移到链表最前端 DLinkedNode* node = cache[key]; moveToHead(node); return node->value; } //插入数据 void put(int key, int value){ //如果缓存未命中,则创立新的节点,插入哈希,移到链表头部(最近拜访数据) //缓存区满的话,要移除链表尾部节点,因为是最久未拜访的数据 if (!cache.count(key)){ DLinkedNode* node = new DLinkedNode(key, value); cache[key] = node; addToHead(node); ++size; if (size > capacity){ DLinkedNode* removed = removeTail(); cache.erase(removed->key); delete removed; --size; } } else{ //取到此节点 DLinkedNode* node = cache[key]; //赋值新值 node->value = value; //移到链表头部,变为最近拜访的数据 moveToHead(node); } } private: void addToHead(DLinkedNode* node){ node->prev = head; node->next = head->next; head->next->prev = node; head->next = node; } void removeNode(DLinkedNode* node){ node->prev->next = node->next; node->next->prev = node->prev; } //挪动节点到头部 void moveToHead(DLinkedNode* node){ //移除掉此节点 removeNode(node); //最近拜访数据放到头部 addToHead(node); } //移除尾部节点 DLinkedNode* removeTail(){ DLinkedNode* node = tail->prev; removeNode(node); return node; }}; /*测试数据:#include<iostream>#include<unordered_map>using namespace std; int main(){ LRUCache* lRUCache = new LRUCache(2); lRUCache->put(1, 1); // 缓存是 {1=1} lRUCache->put(2, 2); // 缓存是 {1=1, 2=2} lRUCache->get(1); // 返回 1 lRUCache->put(3, 3); // 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3} lRUCache->get(2); // 返回 -1 (未找到) lRUCache->put(4, 4); // 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3} lRUCache->get(1); // 返回 -1 (未找到) lRUCache->get(3); // 返回 3 lRUCache->get(4); // 返回 4 system("pause"); return 0;}*/

July 9, 2021 · 2 min · jiezi

关于算法:算法二进制中1的个数

题目:对于一个字节(8bit)的变量,求其二进制“1”的个数。例如6(二进制0000 0110)“1”的个数为2,要求算法效率尽量高。解法一:除法 对于二进制数来说,除一个2,就少一位,能够判断这个少的位来确定“1”的个数。 例如:6(0000 0110) 0000 0110 / 2 = 0000 0011 ----少的一位为0 0000 0011 / 2 = 0000 0001 ----少的一位为1 0000 0001 / 2 = 0000 0000 ----少的一位为1 操作数数曾经为0,到此结束 参考代码 int Count_1(int val){ int num = 0; while(val) { if(val % 2 != 0) //用取模取得去除的一位 ++num; val /= 2; } return num;}性能:工夫复杂度O(log2v),即二进制数的位数;空间复杂度O(1) 解法二:移位 对于二进制数来说,除法是用移位实现。 例如:6(0000 0110) 0000 0110 >> 1 = 0000 0011 ----少的一位为0 0000 0011 >> 1 = 0000 0001 ----少的一位为1 ...

July 9, 2021 · 4 min · jiezi

关于算法:HARRVJ与递归神经网络RNN混合模型预测和交易大型股票指数的高频波动率

原文链接:http://tecdat.cn/?p=5277本文剖析了S&P500指数和SPY ETF,VIX指数和VXX ETN的稳定率的可预测性和可交易性。只管已有大量对于预测高频稳定的文献,但大多数仅依据统计误差评估预测。实际上,这种剖析只是对预测的理论经济意义的一个小的批示。因而,在咱们的办法中,咱们还通过交易适当的稳定率衍生品来测试咱们的预测。 简介波动性在资产定价和调配以及风险管理中起着核心作用,例如危险价值(_VaR_)与冀望损失(_ES_)。对计量经济学家,统计学家和从业者来说,建模和预测波动性十分重要。然而,传统的狭义自回归条件异方差(GARCH)和随机稳定率(SV)模型的利用并不适宜用于应用高频数据的利用。 本文将HAR-RV-J与递归神经网络(RNN)和混合 HAR-RV-J- RNN模型进行比拟,以预测波动性,从而剖析预测性。 循环神经网络人工神经网络是一种功能强大的非参数工具,用于信号滤波,模式识别和插值,也能够容忍有误差的数据,并找到模型参数之间的非线性关联 。 大多数计量经济模型是通过捕捉工夫序列的特定特色(例如长记忆)或假如变量之间的函数关系而开发的,人工神经网络的次要长处是它们蕴含非线性并蕴含所有变量。 具备一个暗藏层的单输入RNN模型  混合模型混合模型也被设计为RNN。然而,作为附加输出,咱们将线性模型的预测提供给RNN。咱们还保留了四个根本输出。因而,在混合模型的状况下,输出的总数减少到5。 所有其余模型参数放弃不变。具体地,如上确定暗藏神经元的数量。此外,模型架构放弃雷同。 应用混合模型的动机源于心愿利用每个模型。通过将线性预测提供给RNN,咱们能够从预测工作中删除任何线性重量。这应该为更好地匹配线性预测误差的非线性残差留出更多空间。 数据咱们的根底数据集包含来自于1996年1月2日至2016年6月2日开始的规范普尔500指数。 后果每日S&P500 RV。留神:顶部面板别离显示每日实现的稳定率及其对数变换,和。上面的图表显示了跳转成分,和 论断本文剖析了异质自回归模型的后劲,包含跳跃预测实现稳定率(RV)。对于这种办法,咱们依据规范普尔500指数的5年日内数据的20年历史计算RV。咱们的结果表明,根底HAR-RV-J模型的确可能提供令人满意的RV预测。 有问题欢送分割咱们!

July 8, 2021 · 1 min · jiezi

关于算法:SAPDFSAF升级版合理的损失值加权以及金字塔特征选择-ECCV-2020

针对anchor-point检测算法的优化问题,论文提出了SAPD办法,对不同地位的anchor point应用不同的损失权重,并且对不同的特色金字塔层进行加权独特训练,去除了大部分人为制订的规定,更加遵循网络自身的权值进行训练 起源:晓飞的算法工程笔记 公众号论文: Soft Anchor-Point Object Detection 论文地址:https://arxiv.org/abs/1911.12448论文代码:https://github.com/xuannianz/SAPD not officialIntroduction Anchor-free检测办法分为anchor-point类别和key-point类别两种,绝对于key-point类别,anchor-point类别有以下有点:1) 更简略的网络结构 2) 更快的训练和推理速度 3) 更好地利用特色金字塔 4) 更灵便的特色金字塔抉择,但anchor-point类别的准确率个别比key-point类别要低,所以论文着力于钻研妨碍anchor-point类别准确率的因素,提出了SAPD(Soft Anchor-Point Detecto),次要有以下两个亮点: Soft-weighted anchor points。anchor-point算法在训练时个别将满足几何关系的点设置为正样本点,其损失值权重均为1,这造成定位较不精确的点偶然分类置信度更高。实际上,不同地位的点的回归难度是不一样的,越凑近指标边缘的点的损失值权重应该越低,让网络集中于优质anchor point的学习。Soft-selectedpyramid levels。anchor-point算法每轮训练会抉择特色金字塔的其中一层特色进行训练,其它层均疏忽,这在肯定水平上造成了节约。因为其余层尽管响应不如被抉择的层强,但其特色散布应该与被抉择层是相似的,所以能够赋予多层不同权重同时训练。Detection Formulation with Anchor Points 论文首先介绍了大抵的anchor point指标检测办法的网络结构以及训练方法。 Network architecture 网络蕴含骨干网络以及特色金字塔,特色金字塔每层蕴含一个detection head,特色金字塔层标记为$P_l$,$l$为层数,层的特色图大小为输出$W\times H$的$1/s_l$倍,$s_l=2^l$为stride。个别,$l$的范畴为3到7,detection head蕴含分类子网和回归子网,子网均以5个$3\times 3$卷积层结尾,而后每个地位别离预测$K$个分类置信度以及4个偏移值,偏移值别离为以后地位到指标边界的间隔。 Supervision targets 对于指标$B=(c, x, y, w, h)$,核心区域为$B_v=(c, x, y, \epsilon w, \epsilon h)$,$\epsilon$为缩放因子。当指标$B$被赋予金字塔层$P_l$且anchor point $p_{lij}$位于$B_v$内时,则认为$p_{lij}$是正样本点,分类指标为$c$,回归指标为归一化的间隔$d=(d^l, d^t, d^r, d^b)$,别离为以后地位到指标四个边界的间隔: $z$为归一化因子。对于负样本点,分类指标为背景($c=0$),定位指标为null,不须要学习。 Loss functions 网络输入每个点$p_{lij}$的$K$维分类输入$\hat{c}_{lij}$以及4维地位回归输入$\hat{d}_{lij}$,别离应用focal loss和IoU loss进行学习: ...

July 8, 2021 · 1 min · jiezi

关于算法:算法原地算法移除元素使用-O1-额外空间原地修改数组

题目形容: 给你一个数组 nums 和一个值 val,你须要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要应用额定的数组空间,你必须仅应用 O(1) 额定空间并 原地 批改输出数组。 元素的程序能够扭转。你不须要思考数组中超出新长度前面的元素。 解答: public int removeElement(int[] nums, int val) { int bravo =0; for(int i = 0; i<nums.length;i++){ if(nums[i] != val){ nums[bravo++] = nums[i]; } } return bravo; }阐明:我把原地算法解释为吃包子算法。别离有两个人,后面的人负责判断,前面的人负责吃。后面的人只判断这是不是包子——即≠val的元素。如果为真,前面的人则吃掉。不必管非包子的元素。这种题考查的是思路,失常的思路是判断相等的局部而后想方法移除。而这种算法的思维则是只关注相等的局部,并将其汇总到一起,

July 8, 2021 · 1 min · jiezi

关于算法:R语言分解商业周期时间序列数据线性滤波器HP滤波器Baxter-滤波器Beveridge-Nelson分解等去趋势方法

原文链接:http://tecdat.cn/?p=23000合成南非GDP数据本文蕴含各种过滤器,可用于合成南非GDP的办法。咱们做的第一件事是革除以后环境中的所有变量。这能够通过以下命令进行。 rm(list = ls())graphics.off()载入数据如前所述,南非的GDP数据将其作为工夫序列存储在gdp中,咱们执行以下命令。 gdp <- ts(dat.tmp, start = c(1960, 2), frequency = 4)为了确保这些计算和提取的后果是正确的,咱们检查一下数据的图表。 plot(gdp) 线性滤波器_去除数据线性趋势_为了预计一个线性趋势,咱们能够利用一个包含工夫趋势和常数的线性回归模型。为了预计这样一个模型,咱们应用lm命令,如下。  lin.mod$fitted.values  # 拟合值与工夫趋势无关ts(lin.trend, start = c(1960, 1))  # 为趋势创立一个工夫序列变量gdp - linear  # 周期是数据和线性趋势之间的差别回归的拟合值蕴含与线性趋势无关的信息。这些信息须要从模型对象lin.mod中提取,在下面的块中,咱们将这些值调配给工夫序列对象linear。而后从数据中剔除趋势,就失去了周期。 而后咱们能够借助上面的命令来绘制这个后果,其中趋势和周期被绘制在不同的数字上。 plot.ts(gdp, ylab = "")  lines(linear, col = "red")  legend("topleft", legend = c("data", "trend") _霍德里克 - 普雷斯科特_ (Hodrick-Prescott,HP) _滤波器_对数据进行去趋势解决要用风行的HP滤波法合成这个数据。在这种状况下,咱们将lambda的值设置为1600,这也是对季度数据的倡议。 hp(gdp, freq = 1600)plot.ts(gdp, ylab = "")  # 绘制工夫序列plot.ts(hp.decom$cycle, ylab = "")  # 绘制周期图 这仿佛更精确地反映了咱们对南非经济体现的了解。 用Baxter-King滤波器去趋势数据为了利用Baxter-King 滤波器。在这种状况下,咱们须要指定周期的频带,其下限被设定为32,上限被设定为6。 bk(gdp, pl = 6, pu = 32)plot.ts(gdp, ylab = "")plot.ts(cycle, ylab = "") 这仿佛再次为南非经济流动的周期性提供了一个相当精确的表述。还要留神的是,周期的示意比以前提供的要平滑得多,因为乐音不包含在周期中。 Christiano-Fitzgerald滤波器去趋势数据这个滤波器的性质与下面提供的十分类似。此外,产生与Baxter-King滤波器高度类似的后果。 plot.ts(gdp, ylab = "")plot.ts(cfcycle, ylab = "") 用Beveridge-Nelson合成法 "去趋势 "数据 为了将数据合成为随机趋势和安稳周期,咱们能够采纳Beveridge-Nelson合成法。当采纳这种技术时,咱们须要指定与安稳局部无关的滞后期的数量。在我上面的例子中,我假如有八个滞后期。 plot.ts(gdp, ylab = "")lines(bn.trend, col = "red")plot.ts(bn.cycle, ylab = "")比拟周期的不同衡量标准而后,咱们能够将所有这些后果联合在一张图上,思考各自的相似性和差别。在这个例子中,我创立了一个工夫序列ts.union,然而我也能够先绘制一个繁多的序列,而后再应用lines命令在下面绘制间断的图。   ts.union(lin.cycle, hp.decom, bp.decom,     cf.decom, bn.cycle)plot.ts(comb, ylab = "") 谱合成在咱们思考应用谱技术之前,最好先革除以后环境中的所有变量,并敞开所有的图。下一步是确保你能够通过应用library命令来拜访这些包中的程序。 library(tsm)library(TSA)library(mFilter)应用谱技术进行合成。咱们能够为三个工夫序列变量生成数值,而后将它们组合成一个繁多的变量。 2 * cos(2 * pi * t * w\[1\]) + 3 * sin(2 * pi * t *     w\[1\])  # no.obs点上的6个周期的频率4 * cos(2 * pi * t * w\[2\]) + 5 * sin(2 * pi * t *     w\[2\])  #频率为10个周期的观察点6 * cos(2 * pi * t * w\[3\]) + 7 * sin(2 * pi * t *     w\[3\])  # 在没有观测点的状况下,频率为40个周期y <- x1 + x2 + x3为了察看这些变量,咱们能够把它们绘制在一个独自的轴上。 par(mfrow = c(2, 2), mar = c(2.2, 2.2, 2, 1), cex = 0.8)plot(x1, type = "l", main = "x1")plot(x2, type = "l", main = "x2")plot(x3, type = "l", main = "x3")plot(y, type = "l", main = "y") 尔后,咱们能够应用周期图来思考这些工夫序列变量的每一个属性。 gram(y, main = "y", col = "red") 当然,咱们能够利用一个过滤器,从总体工夫序列变量中去除一些不须要的成分。为此,咱们能够利用上上限绝对较窄的Christiano-Fitzgerald滤波器。尔后,咱们应用利用于与周期无关的信息的周期图,来考察它是否胜利地剔除了一些频率成分。 cf(y0)gram(cycle) 这个后果将表明,滤波器曾经排除了大部分的高频率成分。为了看看这个周期与之前的数据有什么关系,咱们把通过滤波器的周期性信息绘制在重量上。此外,咱们还将这个后果绘制在综合周期的变量上。 plot(x1, type = "l", lty = 1)lines(cycle, lty = 3, lwd = 3)plot(y, type = "l", lty = 1)lines(cycle, lty = 3, lwd = 3) 在这两种状况下,它仿佛都对过程中的趋势做了正当的形容。   南非商业周期的谱合成法为了思考如何在实践中应用这些频谱合成,咱们当初能够思考将这些技术利用于南非商业周期的各种特色中。 下一步将是运行所有的过滤器,这些过滤器被利用于辨认南非商业周期的不同办法。 当初,让咱们对商业周期的每一个规范利用一个周期图。 线性滤波器提供了一个很差的后果,因为趋势显著占主导地位(这不是周期应该有的)。这与Hodrick-Prescott滤波器的特色造成比照,后者的趋势信息曾经被去除。Baxter & King和Christiano & Fitzgerald的带通滤波器也是这种状况。在这两种状况下,噪声也曾经被去除。最初的后果与Beveridge-Nelson合成无关,咱们留神到周期包含大量的趋势和大量的噪声。 小波合成为了提供一个小波合成的例子,咱们将把该办法利用于南非通货膨胀的数据。这将容许应用在这个过程中推导出对趋势的另一种掂量办法,这能够被认为是代表外围通货膨胀。请留神,这种技术能够利用于任何阶数的单整数据,所以咱们不须要首先思考变量的单整阶数。 而后,咱们将利用消费者价格指数的月度数据,该数据蕴含在SARB的季度布告中。数据能够追溯到2002年。为了计算通货膨胀的同比指标,咱们应用diff和lag命令。 diff/cpi\[-1 * (length - 11):length\]为了确保所有这些变量的转换都已正确进行,咱们对数据进行绘图。  plot(inf.yoy) 因为咱们在这种状况下次要对辨认平滑的趋势感兴趣,咱们将应用贝希斯函数。这样的函数是Daubechies 4小波,它利用修改的离散小波变换办法。此外,咱们还将应用三个母小波来解决各自的高频成分。  wt(yoy, "d4")而后咱们能够为每个独立的频率成分绘制后果,如下所示。  plot.ts(yoy)for (i in 1:4) plot.ts(d4\[\[i\]\] 如果咱们当初想在数据上绘制趋势(父小波)。  plot.ts(inf, ylab = "inf")lines(ren) 请留神,因为各自的频段是相加的,咱们能够将其中一个母频段退出到趋势中,如下所示。  inf.tmp <- inf.tren + inf.d4$w3inf.tren2 <- ts(inf.tmp, start = c(2003, 1), frequency = 12)plot.ts(inf.yoy, ylab = "inf")lines(inf.tren2, col = "red") 相干经济变量的周期性成分之间的相关性为了确定周期的特色是否适合,咱们能够思考宏观经济总量的一些不同周期性办法之间的相关性。例如,咱们能够思考产出和生产(或待业)的周期性在不同的滞后期应该是相干的。如果它们不相干,那么该办法可能无奈精确形容各自变量的周期性成分。 在本文应用的例子中,代码可能有点难以了解,但咱们激励你本人去钻研,以进步你对这个编码环境的总体了解。  下一步是读入数据并为数据的各种周期性成分创立一些矩阵。 yd <- dat\[5:n.obs, \] - dat\[1:(n.obs - 4), \]  # 存储输入yc_li <- matrix(rep(0, n.obs * n.var), ncol = n.var)yc_hp <- matrix(rep(0, n.obs * n.var), ncol = n.var)yc_bp <- matrix(rep(0, n.obs * n.var), ncol = n.var)yc_bn <- matrix(rep(0, n.obs * n.var), ncol = n.var)应用下面蕴含的办法对数据进行过滤。  for (i in 1:n) {        # 用线性滤波器对数据进行去趋势解决    lin.mod <- lm(dat\[, i\] ~ time(dat\[, i\]))        # 用HP滤波器去趋势数据    yc_hp\[, i\] <- hp.cycle        #用带通滤波器去趋势数据    yc_bp\[, i\] <- bp.cycle        #  Beveridge-Nelson合成    yc_bn\[, i\] <- bn.\[, 2\]}计算不同提前期和滞后期的相干关系。 for (i in 1:n) {    for (j in 1:n.var) {        c\_li <- leadlag(yc\_li\[, i\], yc_li\[, j\], maxLeadLag)        c\_hp <- leadlag(yc\_hp\[, i\], yc_hp\[, j\], maxLeadLag)        c_bp         c_bn        c_yd                 for (k in 1:5) {            ynamesLong\[(cnt + k), 1\] <- paste(ynames.tmp)        }        cnt <- cnt + 5绘制后果。 # 线性趋势barplot(corrStylizedFact)box() # hp滤波器op <- par(mfrow = c(1, 3))barplot(corrStyli, ylim = c(-1, 1))box() # beveridge nelson 合成barplot(coracts, ylim = c(-1, 1), col = "red")box() ...

July 7, 2021 · 1 min · jiezi

关于算法:动手实操丨基于随机森林算法进行硬盘故障预测

摘要:业界冀望应用机器学习技术来构建硬盘故障预测的模型,更精确地提前感知硬盘故障,升高运维老本,晋升业务体验。本案例将应用随机森林算法来训练一个硬盘故障预测模型。本文分享自华为云社区《基于随机森林算法进行硬盘故障预测》,原文作者:山海之光。 试验指标把握应用机器学习办法训练模型的根本流程;把握应用pandas做数据分析的根本办法;把握应用scikit-learn进行随机森林模型的构建、训练、保留、加载、预测、统计准确率指标和查看混同矩阵的办法;案例内容介绍随着互联网、云计算的倒退,数据的存储需要与日倍增,大规模海量数据存储核心是必不可少的基础性设施。尽管新的存储介质例如SSD,曾经很多方面领有了比磁盘更好的性能,但就目前来讲,其昂扬的破费依然使大部分数据中心难以累赘,因而,大型数据中心仍然会采纳传统的机械硬盘作为存储介质。 机械硬盘生命周期通常为3到5年,在2到3年后故障率显著升高,导致换盘量陡增。据统计,在服务器硬件故障中,硬盘故障占比达到48%+,是影响服务器运行可靠性的重要因素。早在上个世纪九十年代,人们就意识到数据的贵重性远胜于硬盘本身价值,渴望有种技术能对硬盘故障进行预测并实现绝对平安的数据保护,因而S.M.A.R.T.技术应运而生。 S.M.A.R.T.,全称为“Self-Monitoring Analysis and Reporting Technology”,即“自我监测、剖析及报告技术”,是一种主动的硬盘状态检测与预警系统和标准。通过在硬盘硬件内的检测指令对硬盘的硬件如磁头、盘片、马达、电路的运行状况进行监控、记录并与厂商所设定的预设安全值进行比拟,若监控状况将或已超出预设安全值的平安范畴,就能够通过主机的监控硬件或软件主动向用户作出正告并进行轻微的主动修复,以提前保障硬盘数据的平安。除一些出厂工夫极早的硬盘外,当初大部分硬盘均装备该项技术。对于该技术的更多介绍,请查看S.M.A.R.T.-百度百科。 尽管硬盘厂商采纳了S.M.A.R.T.技术来监测硬盘的衰弱状态,然而大多数厂商都是基于设计规定制订的故障预测伎俩,预测成果十分差,不能满足日渐严格的提前预测硬盘故障的需要。因而,业界冀望应用机器学习技术来构建硬盘故障预测的模型,更精确地提前感知硬盘故障,升高运维老本,晋升业务体验。 本案例将带大家应用一份开源的S.M.A.R.T.数据集和机器学习中的随机森林算法,来训练一个硬盘故障预测模型,并测试成果。对于随机森林算法的实践解说,可参考此视频。 注意事项如果你是第一次应用 JupyterLab,请查看《ModelAtrs JupyterLab应用领导》理解应用办法;如果你在应用 JupyterLab 过程中碰到报错,请参考《ModelAtrs JupyterLab常见问题解决办法》尝试解决问题。试验步骤1. 数据集介绍本案例应用的数据集是来自于Backblaze公司的开源数据集,它是一家计算机备份和云存储服务提供商。自2013年以来,Backbreze每年都会公开公布他们的数据中心所应用硬盘的S.M.A.R.T.日志数据,无效地推动了应用机器学习技术进行硬盘故障预测的倒退。因为Backblaze公司公布的S.M.A.R.T.日志数据量较大,本案例为疾速演示应用机器学习构建硬盘故障预测模型的过程,仅应用了该公司公布的2020年的数据,相干数据曾经筹备好,放在OBS中,运行如下代码即可下载这部分数据。 留神:本步下载数据的代码须要在华为云 ModelArts Codelab 上运行 import osimport moxing as moxif not os.path.exists('./dataset_2020.zip'): mox.file.copy('obs://modelarts-labs-bj4/course/ai_in_action/2021/machine_learning/hard_drive_disk_fail_prediction/dataset_2020.zip', './dataset_2020.zip') os.system('unzip dataset_2020.zip')if not os.path.exists('./dataset_2020'): raise Exception('谬误!数据不存在!')!ls -lh ./dataset_2020 数据解释: 2020-12-08.csv:从backblaze公司公布的2020 Q4数据集中抽取进去的2020-12-08这天的S.M.A.R.T.日志数据2020-12-09.csv:从backblaze公司公布的2020 Q4数据集中抽取进去的2020-12-09这天的S.M.A.R.T.日志数据dataset_2020.csv:曾经解决过的2020年全年S.M.A.R.T.日志数据,下文中“第2.6节 类别平衡度剖析”会解释如何失去这部分数据prepare_data.py: 运行该脚本,会下载2020年全年S.M.A.R.T.日志数据,并进行解决,失去dataset_2020.csv。运行该脚本须要20G的本地存储空间 2. 数据分析应用机器学习构建任何模型之前,都须要先对数据集进行剖析,理解数据集的规模、属性名、属性值、各类统计指标及空值状况。因为咱们要先理解数据,能力用好数据。 2.1 读取csv文件pandas是罕用的python数据分析模块,咱们先用它来加载数据集中的csv文件。以2020-12-08.csv为例,咱们先加载该文件来剖析S.M.A.R.T.日志数据的状况 2.2 查看单个csv文件数据的规模 2.3 查看头5行数据应用pandas加载csv后,失去的是一个DataFrame对象,能够了解为一个表格,调用该对象的head()函数,能够查看表格的头5行数据 df_data.head() 5 rows × 149 columns 如上所示是表格的头5行数据,表头是属性名,属性名上面是属性值,backblaze网站解释了属性值的含意,翻译为如下: 2.4 查看数据的统计指标查看完表格的头5行数据,咱们再调用DataFrame对象的describe()函数,计算表格数据的统计指标 df_data.describe() 8 rows × 146 columns 如上所示是表格数据的统计指标,describe()函数默认对数值类型的列进行统计分析,因为表格的前三列’date’、‘serial_number’、'model’是字符串类型,所以这三列没有统计指标。 各行统计指标的含意解释如下:count: 该列有多少个非空值mean: 该列的均值std: 该列数值的标准差min: 该列数值的最小值25%: 该列数值的25%中位值50%: 该列数值的50%中位值75%: 该列数值的75%中位值max: 该列数值的最大值 ...

July 7, 2021 · 3 min · jiezi

关于算法:COMP9319-BWT-Encoded

COMP9319 2021T2 Assignment 2: Searching &Decoding BWT Encoded FileYour task in this assignment is to create a simple search program that implements BWT backward search, whichcan efficiently search a BWT encoded file. The program also has the capability to decode the BWT encoded fileback to its original file in a lossless manner. The original file (before BWT) contains text in multiple lines and mayinclude characters with ASCII values 10 and 32 to 126 (inclusively). There will be at least one newline character justbefore the end of file (to make sure that every line of text is ended with a newline character). Each line beginswith a line number. All line numbers of a file have the same number of digits (packed with leading zeros asappropriate). ...

July 7, 2021 · 9 min · jiezi

关于算法:RabinKarp-算法字符串快速查找

Rabin-Karp 算法(字符串疾速查找) Go 语言的 strings 包(strings.go)中用到了 Rabin-Karp 算法。Rabin-Karp 算法是基于这样的思路:即把字符串看作是字符集长度进制的数,由数值的比拟后果得出字符串的比拟后果。 奢侈的字符串匹配算法为什么慢?因为它太健忘了,前一次匹配的信息其实有局部能够利用到后一次匹配中去,而奢侈的字符串匹配算法只是简略的把这个信息扔掉,从头再来,因而,节约了工夫。好好的利用这些信息,天然能够进步运行速度。 因为实现两个字符串的比拟须要对其中蕴含的字符进行一一比拟,所需的工夫较长,而数值比拟则一次就能够实现,那么咱们首先把“搜索词”中各个字符的“码点值”通过计算,得出一个数值(这个数值必须能够示意出字符的前后程序,而且能够随时去掉某个字符的值,能够随时增加一个新字符的值),而后对“源串”中要比拟的局部进行计算,也得出一个数值,对这两个数值进行比拟,就能判断字符串是否匹配。对两个数值进行比拟,速度比简略的字符串比拟快很多。 比方咱们要在源串 "9876543210520" 中查找 "520",因为这些字符串中只有数字,所以咱们能够应用字符集 {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} 来示意字符串中的所有元素,并且将各个字符映射到数字 0~9,而后用 M 示意字符集中字符的总个数,这里是 10,那么咱们就能够将搜索词 "520" 转化为上面的数值: ("5"的映射值 M + "2"的映射值) M + "0"的映射值 = (5 10 + 2) 10 + 0 = 520 当然,如果“搜索词”很长,那么计算出来的这个数值就会很大,这时咱们能够选一个较大的素数对其取模,用取模后的值作为“搜索词”的值。 剖析一下这个数值:520,它能够代表字符串 "520",其中: 代表字符 "5" 的局部是“ "5"的映射值 (M 的 n - 1 次方) = 5 (10 的 2 次方) = 500”代表字符 "2" 的局部是“ "2"的映射值 (M 的 n - 2 次方) = 2 (10 的 1 次方) = 20”代表字符 "0" 的局部是“ "0"的映射值 (M 的 n - 3 次方) = 0 (10 的 0 次方) = 0”(n 代表字符串的长度) ...

July 6, 2021 · 4 min · jiezi

关于算法:1418菜谱

func displayTable(orders [][]string) (ret [][]string) { tb := make([]map[string]int, 501) title := []string{} foodMap := map[string]bool{} for _, v := range orders { tbNum, _ := strconv.Atoi(v[1]) food := v[2] if tb[tbNum] == nil { tb[tbNum] = map[string]int{} } if !foodMap[food] { title = append(title, food) foodMap[food] = true } tb[tbNum][food]++ } sort.Strings(title) title = append([]string{"Table"}, title...) ret = append(ret, title) for tbNum := 1; tbNum < 501; tbNum++ { if tb[tbNum] == nil { continue } row := []string{strconv.Itoa(tbNum)} for i := 1; i < len(title); i++ { if x, ok := tb[tbNum][title[i]]; ok { row = append(row, strconv.Itoa(x)) continue } row = append(row, "0") } ret = append(ret, row) } return ret}

July 6, 2021 · 1 min · jiezi

关于算法:算法面试通关

算法面试通关 教程视频:点击查看 残缺下载:点击查看 C++语言根底 第01局部 : 算法根底 第02局部:线性表 第03局部 : 栈与队列 第04局部:数组 第05局部:字符串 第06局部:二叉树 第07局部:树+贪婪 第08局部:图的存储 第09局部:图搜寻 第10局部:图的连通性 第11局部:图+贪婪 第12局部:图的利用 第13局部:查找+分治 第14局部:数表查找 第15局部:简略排序 第16局部:排序+分治 第17局部:树形排序 第18局部:调配排序 第19局部:高级数据结构 第20局部 : 动静布局 第21局部 : 动静布局优化 第22局部:高级数据结构 第23局部 : 深度搜寻利用 第24局部 : 广度搜寻利用 第25局部 : 启发式搜寻 第26局部:最大流 第27局部:最大流改良算法 第28局部:二分图最大匹配 第29局部:最大流最小割 第30局部:最小费用最大流 第31局部:比赛、面试专题 (1)\C++语言根底;目录中文件数:10个 ├─1.1 头文件、输入输出、格局、根本运算.mp4 ├─1.1 头文件、输入输出、格局、根本运算.pptx ├─2.1 if、swith语句、逻辑运算.mp4 ├─3.1 for 、 break 、 continue.mp4 ├─3.2 while 、do while.mp4 ├─4.1 函数的定义、调用、参数.mp4 ├─4.1 函数的定义、调用、参数.pptx ...

July 6, 2021 · 3 min · jiezi

关于算法:硬核技术文研发绩效AI算法的完美舞台

作者 | 胡豫陇清华大学博士后方云智能团队核心成员,AI算法利用专家 方云开创团队具备深厚技术研发和企业治理教训,依靠长期行业积攒和对数字化产业的深刻理解,以数字化形式评估研发团队,驱动企业精确度量研发组织及集体的工作效力,正当调配研发资源。帮忙技术决策者准确测评研发组织绩效(便于向上汇报、平级沟通)和集体绩效(便于向下治理)。回顾2020年度,咱们在数据分析方面,基于理论用户数据做了大量尝试,获得了显著功效,并将研究成果转化为理论利用,深度晋升了产品能力。 (一)算法钻研过程 算法钻研的根底是数据,无论是基于数学和教训常识的建模剖析,还是基于统计学和机器学习的数据分析,都须要依靠数据来发展。 算法钻研的第一步,咱们建设了自主的数据指标体系,并在这个指标体系根底上,发展后续的钻研。指标体系由三级指标组成,一级为最根底元数据,二级指标由一级指标计算失去、三级指标由二级指标和一级指标计算失去。一般来说,高级指标具备更高的信息密度,在进行信息表征时,也可能实现更加深度的信息传播成果。但另一方面,数据分析时并不是抉择的高级指标越多,越有成果。而是要依据具体场景和算法要求,抉择必要的各级指标,能力达到所需的剖析成果。例如在kmeans算法中,低级别指标反而具备更好的分类成果,而在SVM算法中,则须要高级别指标。 钻研的第二步,Kmeans。咱们鉴于元数据收集较为残缺,同时数据量不是很大的状况,联合sklearn的算法抉择疏导图,抉择了Kmeans算法对员工的行为数据进行无监督学习聚类。在抉择了若干根底指标数据的同时,咱们引入RFM思维,将员工在指定周期内的工作新鲜度(R)、工作频次(F)和工作量(M)也作为聚类指标,一并用于算法聚类,获得了非常显著的分类成果。这里的外围在于咱们不仅通过根底指标评估了员工的工作后果数据,还通过RFM办法评估了员工的工作过程数据。将这两类数据相结合做出的聚类,可能很好的对员工进行分类表征。分类后果的解读能够间接依据指标的含意进行解释。钻研第三步,SVM。在聚类获得了较好的成果的根底上,咱们认为数据品质是牢靠的,这相当于咱们有了很好的主观数据集,在此基础上,咱们提出由企业管理者对员工的体现进行打分,造成Label,这样咱们就失去了监督学习的训练集,从而能够对员工行为进行监督学习下的预测。这项工作咱们进行了多种尝试,并最终通过特色工程,选取了最为无效的15个指标,来作为员工行为的表征指标。 这里咱们回顾一下钻研的历程,以作为当前钻研的教训参考。SVM最后剖析时,咱们抉择了多于60个指标进行监督学习,然而学习效果并不好,类别间的区分度很低,这次要是因为过多的指标导致SVM算法无奈分明地寻找到类别间的界限。所以咱们通过一些特色工程的办法,来进行降维。首先通过pearson相关度剖析,咱们将大量的指标依据关联度,分为了24类,每一类中的指标都具备高度的相关性。因而能够在每一类指标中选出一个最具代表性的指标。这个选取过程由咱们钻研团队依据理论状况,抉择了最具代表性的24个指标。其次,24个指标做SVM仍然过多,咱们用RFE算法来判断哪些指标对学习准确率影响最大,从而来选出最无效的那些指标。RFE过程中,咱们应用Lasso、Ridge、Logistic、RFClassifier、linerSVM这5种算法来作为筛选器,别离失去每一种算法下最无效的特色,进而,咱们选取那些被更多算法视为“无效”的特色,例如工作均匀实现时长,在5种筛选器种都被认为无效,那么这个特色对于咱们做监督学习,就是一个很好的特色。 此外,特色筛选还应思考一个问题,那就是筛选器和分类器是否要具备雷同的算法范式。例如,如果分类筹备用SVM,那么筛选器待业要选SVM类的。这样能力保障筛选进去的特色,在对应的分类算法下是最为无效的。 钻研第四步,数据分布拟合。尽管在前三步钻研中咱们获得了肯定的功效,但通过认真测验已有的数据咱们发现数据依然存在两方面问题,一是一些数据还是会存在漏填、错填的问题,这属于数据谬误问题。二是在填报比拟残缺的数据中,存在一些极值数据,这些数据并不一定是谬误数据,也有可能是个别员工行为表现异样导致。无论是哪种状况导致的数据异样(前提是曾经预处理过缺失值),咱们都能够通过拟合数据的散布,来判断数据的散布状况,并寻找那些离群点。 在数据分布拟合钻研中,咱们通过对多种散布函数的尝试,最终提出可通过正态分布、F散布、卡方散布、Gamma散布这四种常见的散布函数来拟合员工行为数据。以正态分布为例,如果咱们拟合某个指标合乎正态分布,那么咱们能够认为左右两侧5%区间以内的数据是惯例行为,而两侧5%以外的数据是异样行为。并且通过进一步剖析咱们发现,一侧5%到千分之一之间的数据,有时也属于正当行为,而一侧千分之一以外的数据,才最有可能称为异样行为。通过这样的剖析,咱们就能够通过数据分布拟合的形式,来发现员工的异样行为数据,并提出对应的管理策略。 此外,咱们还曾提出在拟合时,要拟合显著能力认为数据合乎某一散布。但如果这样判断,咱们发现有的数据并不满足显著的要求,然而数据确自身具备很强的实用信息,因而咱们提出,不用以显著为剖析前提。而这其实也表明,数字化时代,要以更加符合实际的剖析伎俩来剖析数据,领导业务。而不必拘泥于过于学术或刻板的剖析规范。 总结而言,在这四条主线钻研思路下,咱们对单干客户的员工行为数据发展了特色工程、非监督学习、监督学习、数据分布拟合等一系列规范的算法钻研。进而,结合实际利用场景,将钻研后果转化为了具体利用。接下来总结一下所造成的具体利用。 (二)产品转化后果 研究成果向产品转化,是一个一直积攒,由质变引起量变的过程。在最后的钻研中,咱们会在多个点上发展钻研,但最终哪些研究成果能转变为理论利用,是不确定的。而随着钻研的增多,可能转变为理论产品性能的成绩就会浮现,这体现在三个档次。第一档次,一些好的钻研点,一些对特定场景的解决方案,可能转变为理论产品性能。第二档次,单个性能点看似没有太大价值,然而当呈现某个典型性能点后,咱们会意识到,其余看似无用的性能点,却是对这个典型性能点的无效补充。第三档次,多个研究会呈现出一些共性,这些共性可能转化为产品思路和产品模式,这是要比单点产品性能更具价值的中央。这样的由钻研向产品转化的思路,扎根实际,又提炼总结,是具备很好的参考意义的。 咱们在多个钻研点摸索后,一直思考如何将钻研点转化为实用的性能,这既要联合客户需要,也要联合咱们本人对用户痛点、产品性能的设计。2020年度的钻研,咱们始终在做的主线是员工行为画像,无论是监督学习还是非监督学习,都是为了选定一套适合的指标和权重,来达成对员工的排名。在这个思路下,咱们整合多种排名算法,最终提出:由用户自主抉择排名模式。在不同的排名模式下,咱们为用户提供不同的算法或排名形式,这就相当于咱们当前端智能化的形式,满足了用户在前端多样化的需要。而这也正是数字化时代,产品以智能化形式,为用户提供个性化性能的体现。具体而言,咱们为用户提供四种可选模式,来实现对员工排名。 模式一、行业最佳实际,以成熟用户已有案例,制订一套指标和相应权重。用户选取想要的案例类别,咱们依据其理论数据,计算相应排名后果。这里打分模式有两种,一是产品自定义给出,二是依据已有打分排名,用Kmeans确认不同类别优良度,回归树反推指标权重。 模式二:AI聚类算法,系统对员工进行天然状态进行三次或屡次kmeans聚类,每次调整指标品种和权重,而后由客户抉择一种合乎预期的聚类后果,那么客户的抉择就对应了指标品种和权重。 模式三:AI监督学习,对员工进行kmeans聚类,失去n个类别,客户对n类按优良度进行排序打分,接下来,零碎根据打分状况,通过RFE算法(Estimator选用决策树回归或决策树分类),判断不同指标重要度。 模式四:AI辅助定制(纯手动),由用户指定n个指标,并为n个指标确定权重,系统对员工进行排名,可抉择算法有:加权求和、RandomForestRegressor、GradientBoostingRegressor。备注,后两种具体实现形式是,依据加权求和打分失去y,x就是输出的加权指标。而后训练失去模型。方云智能多种AI绩效评价办法均已通过实际验证,并实现产品化。 (三) 算法准确率剖析 数据分析时后果个别须要有肯定的准确度,才能够说算法对问题实现了肯定解决。在数字化转型的过程中,咱们不用以相对的预测准确率来判断算法好坏。这是因为咱们在评估员工行为时,训练集标注或者人的认知,都是极具主观性的,而且这种主观性又是会动态变化的,所以算法可能捕捉到的,有时候兴许是客观规律,但有时候兴许就只是管理者的一时情绪。咱们评估算法的好坏,应该从实际登程,对于合乎认知、法则的算法是好算法,然而能解释或捕获短期用户态度的算法,也是牢靠的。具体而言,咱们针对已有的钻研,给出下述准确率总结。 一、Kmeans是非监督学习,无准确率,但能够论述咱们对老黄牛和南郭先生的发现,是合乎治理常识的。 SVM预测,咱们首先失去了一个要害论断,治理严格水平高、中、低,对应员工体现中、高、低。这一论断的得出是合乎常识法则的,那么咱们也能够反推认为算法是无效的。 二、依据对过来员工数据+label进行SVM训练,咱们预测将来的准确率最后仅为60%,但通过样本筛选,参数调优后,准确率可达到93%。 三、数据合理性剖析中,咱们通过以不同的散布拟合员工行为数据,选出95%区间内的员工,再进一步选出95%到0.001之间的员工,精确选出数据呈现问题的员工。具体实际结果表明,咱们的确捕捉到了行为极值点,也捕捉到了5%以外但行为正当的点。 (四)钻研总结和下一步打算 算法钻研、数据分析的目标,最终还是为了找到新的用户需要,开发新的产品性能。第二局部中咱们总结了由钻研向产品理论性能转化的思路。一是好的钻研点间接转变为理论产品性能。二是一些低价值的性能点撑持典型性能点后。三是钻研体现出的共性思路,转化为产品思路和产品模式。 接下来咱们的钻研也致力于从这三个方面来摸索更多的产品性能和产品模式。目前提的主思路有: 一是将项目管理的常识和流程植入产品,帮忙企业管理者简略、高效的实现项目管理。这其中将人员动态分配到不同的工作中,就会是非常典型的一个性能。在此基础上,员工行为的剖析和排名就会成为很好的辅助性能,咱们能够根据员工行为特点,将他们调配到不同状况的工作中。 二是深入单点性能。咱们在SVM训练模型时发现,每个月的模型放到下个月或者其余月份来预测,准确率不稳固。其中很可能的起因是每个月的评估规范有所稳定。那咱们就能够在长期数据上,对每个月都进行模型训练,失去多个模型。在此基础上,将将来一个月的数据放在过来多个月的模型上预测,这样就会呈现一个月的数据在多个月模型下评估各不相同的状况,这就能反馈出每个月评估规范的稳定状况。 三是产品模式的降级。咱们能够采纳轻量化前端,收集一些简略必要的数据后,将简单的剖析都放在后端来实现。性能上的出现就是,用户在前端进行一些个性化的数据和模式抉择,零碎可能在后端为用户进行多样化的剖析,出现给用户智能化的操作界面(如智能化流程、模板化流程)、剖析后果(排名、雷达图、行为空间映射等),甚至是客制化流程、数据,算法,零碎提供剖析后果。 收费试用地址:www.farcloud.com

July 6, 2021 · 1 min · jiezi

关于算法:SE2205数据结构与算法

SE2205: Algorithms and Data Structures for Object-Oriented DesignLab Assignment 3Assigned: Mar 20, 2019; Due: April 8, 2019 @ 10:00 a.m.If you are working in a group of two, then indicate the associated student IDsand numbers in the Assignment3.java file as a comment in the header.1 ObjectivesIn this assignment, you will implement an algorithm that computes the maximum flow possible in a flownetwork digraph. A flow network can represent a network of pipelines having different flow rates. Pleaserefer to the diagram in Figure 1 for an example of a flow network. In a flow network, there are two specialnodes called the source and destination nodes (marked as S and D in Figure 1). Material such as oilfluids can propagate through the network starting from the source S and flow into the destination node D.Intermediate nodes (i.e. 1 to 7 in the example) can represent pumping stations.Figure 1: A sample flow network1.1 ConstraintsSince a flow network is a special kind of network subject to physical limitations, flow and capacity constraintsdo apply. Every edge ei,j or pipeline connected by vertices vi and vj has a maximum capacity of ci,j . Hence,due to this physical capacity limitation, any substance flowing through pipeline ei,j must have a flow offi,j that is between 0 and ci,j (i.e. 0 ≤ fi,j ≤ ci,j ). Referring back to Figure 1, e0,2 has a flow of f0,2 = 11and a capacity of 12. Since f0,2 ≤ c0,2, this is a valid flow.Next, suppose three pipelines or edges meet at a single node and two pipelines leave that node (considere2,5, e3,5, e4,5, e5,6, e5,7). Any substance flowing into a node must be equal to the substance flowing out ofthe node and this is called flow conservation. In Figure 1, f2,5 + f3,5 + f4,5 = 18 and f5,6 + f5,7 = 18 andmore generally this can be expressed as Pi∈Vfj,i for all vj with the exception of S and D asthese are source and sink nodes (generate or consume substance).Finally, there is the notion of back flow. For instance, if there exists positive flow fi,j on edge ei,j ,then it is possible for substance to flow in the opposite direction ej,i where 0 ≤ fj,i ≤ fi,j . If there is nosubstance in the pipeline then nothing can propagate in the opposite direction. However, if there is somematerial flowing through the pipe in one direction, then it is entirely possible for this material to flow in theopposite direction.1.2 General Algorithm for Finding Maximum Flow in the NetworkIf you attempt to increase the flows on edges of the flow network provided in Figure 1, you will notice that thisis not possible. Suppose you are increasing flow on e0,2 by 1 to 12. In order to satisfy flow conservation, the1flow on e2,5 must also increase by 1. This is impossible as this will violate the maximum capacity restrictionon e2,5 (i.e. maximum flow possible through this edge is 11 not 12). Hence, if you attempt to increase theflow like this on every edge, you will realize that this is not feasible. For this reason, all flows listed in Figure1 are the maximum possible flows throughout the flow network. The amount of substance leaving from node0 which is the source node is 23 and similarly the amount of substance entering the destination node 8 isalso 23. For this reason, the maximum flow throughout this flow network is 23! In this assignment, you willimplement a well known algorithm to compute the maximum flow throughout a flow network. In general,this algorithm is composed of the following steps: Find a path p from S to D that consists of no edges with flow that is equal to the full capacity of theedge (i.e. fi,j 6= ci,j ) Find the maximum flow that can be added to the path so that none of the edges in the path violatetheir flow capacity constraintsAdd this flow to every edge in the path pRepeat the above until no more paths exist in the graph from S to D to which more flow can be addedThis assignment is divided into two parts. In the first part, you will implement a breadth-first searchalgorithm to discover a path from S to D to which more flow can be added to all edges in this path. Thesepaths will be referred to as augmenting paths. In the second part, you will implement code that calls onthis path discovering algorithm repeatedly to add flow to the flow network until no more flow can be added.You can assume that you are provided with the definitions to the Graph ADT and Edge class (you canassume that all the functions provided in the ”Graphs” lecture slides are available). An Edge is composedof the following members: public int flow; public int flowCap;Edge represents an edge and stores the current flow in that edge and the maximum capacity of that edge inthe flow and flowCap members respectively.You will implement the function public int breadthFirstPathSearch(Graph FN, int s,int d) function. This function uses breadth-first search to find an augmenting path connecting vertices sand d to which flow can be added without infringing on capacity constraints of the network. Since this is abreadth-first search algorithm, you will have to use a queue in your implementation. You can assume thatall the interface functions associated with the LinkedListQueue are provided.In order to understand the general breadth-first path-finding algorithm, consider Figures 2, 3, 4. Figure2 illustrates the initial flow network which has no flow yet on any edges. The path-finding algorithm shouldfind a path connecting s and d which are source and destination nodes that consists of no edges with flowbeing equal to the maximum edge capacity. The breadth-first search algorithm attempts to find such a paththat has the shortest distance (i.e. smallest number of edges) from s to d. A breadth-first search algorithmwill start from s and examine all children/adjacent nodes of s (by enqueueing these nodes into a queue)one by one. For the network in Figure 2, node 1 will be examined first and checked to see if it has beenvisited or not and whether the current flow in the edge (v0, v1) has not reached maximum capacity. If theseconditions are met, node 1 is set to be visited and in the index corresponding to node 1 in the parent arrayis set to node 0 as node 0 is the parent of node 1 forming the edge (v0, v1) and then node 1 is enqueued intothe queue. All the children of node 0 are examined in a similar manner and enqueued into the queue if thechecking conditions are met.After examining all adjacent nodes of node 0, parent={-1, 0, 0, 0, -1, -1, -1, -1, -1}.The next node in the queue will be node 1 and its child node 4 is examined. As 4 is unvisited and has noflow, the parent of node 4 is set to node 1, marked as visited and enqueued into the queue. Proceeding inthis manner, parent of 5 is set to 2 and node 5 is enqueued into the queue. The next node examined is 3and its children are 5 and 7. Since 5 has already been visited, its parent will not change and it will notbe enqueued into the queue. However, since 7 is not visited, its parent is set to 3, marked as visited andenqueued into the queue. This will proceed until all nodes in the graph are examined (i.e. the queue isempty). At this point, the parent array for the flow network in Figure 2 will be parent={-1, 0, 0, 0,2Figure 2: Initial network with no flowFigure 3: First Augmenting Path from S-D1, 2, 5, 3, 7}. Starting from the last index corresponding to node 8 which is the destination node, itis clear that the parent of 8 is 7, the parent of 7 is 3, the parent of 3 is 0. Hence, the augmenting path froms to d in which flow can be increased is 0-3-7-8 and this is the shortest available path from node 0 to 8 asillustrated in Figure 3.Figure 4: Second Augmenting Path from S-DSuppose that a flow of 5 has been added to the path 0-3-7-8. If the breadth-first search algorithm iscalled again to operate on this flow network, the parent of 7 will not be set to be 3 anymore as the flow on theedge (v3, v7) is 5 which is the maximum capacity of that edge (no more flow can be added without infringingon the capacity constraint of that edge). The parent of 7 in this case will be set to 5. The augmented pathresulting from this graph will then be 0-2-5-6-8 as illustrated in Figure 4. Hence, the path-finding algorithmwill successfully avoid the edge that is full. At the conclusion of the path search, the function will return 1if the destination node has been visited and 0 otherwise. If the return value is 0, then an augmenting path3does not exist that connects s to d. This breadth-first searching algorithm is called the Edmonds-Karpalgorithm. The implementation of this algorithm is summarized in the following: First set all elements in the visitedNodes array to 0 (to mark all nodes as unvisited) Initialize a queue and enqueue the starting node Begin a while-loop in which:– The queue is dequeued (say the dequeued node is vi)– For every node vj that is adjacent to the dequeued node vi, check if this adjacent node isunvisited and whether the current flow in the edge (vi, vj ) is such that more than 0 flow addedto the edge (i.e. ci,j ? fi,j > 0)– If these conditions are met, then set the parent of this adjacent node vj to be the dequeuednode vi and enqueue the adjacent node into the queue– Repeat the above until the queue is empty– Before the function terminates return 1 if d is visited and 0 otherwiseNext, you will implement the function public void maximizeFlowNetwork(Graph fN, int s,int t). This is the function that computes the maximum flow in the flow network fN. Following are thethree main components of this function: The breadthFirstPathSearch function is called to find an augmented path If such a path exists then the return value of this function is 1.(i.e. if node d is visited by the pathsearching algorithm). In this case, the maximum possible flow that can be added on all edges thatform the augmenting path is computed (this flow must heed the capacity constraints of the edge) The flow on all edges forming the augmenting path is incremented to the value computed in theprevious step. For every edge in which flow is added, ensure that you account for the back flow in theopposite direction All three steps above are repeated until no more flow can be added to the flow networkFor instance, suppose that the augmented path computed by the path searching algorithm is 0-2-5-7-8.From Figure 3, it is clear that the maximum flow that can be added/augmented to all edges in this pathis 10 due to edge (v5, v7) resulting in the flow network illustrated in Figure 4. This algorithm is called theFord-Fulkerson algorithm.Available Functions (Clarifications)If you have already completed the assignment, do not worry about this section. If you need more guidanceon the return types of the Graph ADT, then you can utilize the following function declarations (this can bedifferent): public int numVertices(); public Iterable<Vertex<V>> vertices(); public int numEdges(); public Iterable<Edges<E>> edges(); public Edge<E> getEdge(Vertex<V> u,Vertex<V> v); public Iterable<Vertex<V>> endVertices(Edge<E> e); public Vertex<V> opposite(Vertex<V> v, Edge<E> e); public int outDegree(Vertex<V> v);4 public int inDegree(Vertex<V> v); public Iterable<Edges<E>> outgoingEdges(Vertex<V> v); public Iterable<Edges<E>> incomingEdges(Vertex<V> v); public void insertVertex(Vertex<V> v); public void insertEdge(Vertex<V> u, Vertex<V> v, E x); public void removeVertex(Vertex<V> v); public void removeEdge(Edge<E> e); public Vertex<V> getVertex(int label);For the Edge<E> ADT, the value that you are storing can be flow and flow capacity (combined into E).You can assume that the following Edge<E> interface functions are available (if you have already made yourassumptions, then don’t worry about this). public int flowCapacity(); public int flow();Similarly, for the Vertex<V> ADT, you can assume that the following interface functions are available: public int getLabel();For the functions: public void maximizeFlowNetwork(Graph fN, int s, int t) and publicint breadthFirstPathSearch(Graph FN, int s, int d), the last two arguments indicate thelabels/numbers assigned to the vertices (start and end nodes). You can utilize the function getVertex toobtain the reference to the vertex corresponding to the label. Or you can assume that the two argumentsare of Vertex<V> type (change the input arguments type).GradingWe will evaluate the logic behind your function implementations (breadthFirstPathSearch andmaximizeFlowNetwork) (i.e. we will not run it). Marks will be deducted for syntax errors and logicalerrors.Code SubmissionYou will use git to submit this assignment. Create a new repository for LabAssignment3: Create a new folder SE2205B-LabAssignment3 and add the file Assignment3.java in whichyou will implement the two afore-mentioned functions. Open GitHub Desktop. Run File → Add local repository. Click Choose and browse for the folder SE2205B-LabAssignment3. You will get the following warning: This directory does not appear to be a Git repository.Would you like to create a repository here instead? Click on Create a Repository and then click on Create Repository. In the GitHub Desktop tool bar, click Publish repository, check the option Keep this codeprivate, choose your GitHub account, and then click Publish repository. Now a new repository called “SE2205B-LabAssignment3” should appear in your GitHub account. You will need to add the instructor and the TAs to this repository. For this,5– In the GitHub account click the repository SE2205B-LabAssignment3 and then click Setting– Click Collaborators & teams option.– At the bottom of the page and in the Collaborators section, enter the account id of the GitHubuser you would like to add and then click Add collaborator.– You need to add the following accounts to your repo:ENSURE that your work satisfies the following checklist: You submit before the deadline WX:codehelp ...

July 6, 2021 · 11 min · jiezi

关于算法:拓端tecdatR语言文本挖掘情感分析和可视化哈利波特小说文本数据

 原文链接:http://tecdat.cn/?p=22984一旦咱们清理了咱们的文本并进行了一些根本的词频剖析,下一步就是理解文本中的观点或情感。这被认为是情感剖析,本教程将疏导你通过一个简略的办法来进行情感剖析。 简而言之本教程是对情感剖析的一个介绍。本教程建设在tidy text教程的根底上,所以如果你没有读过该教程,我倡议你从那里开始。在本教程中,我包含以下内容。 复制的要求:重现本教程中的剖析须要什么?情感数据集:用来对情感进行评分的次要数据集根本情感剖析:执行根本的情感剖析比拟情感:比拟情感库中的情感差别常见的情绪词:找出最常见的踊跃和消极词汇大单元的情感剖析:在较大的文本单元中剖析情感,而不是单个词。复制要求本教程利用了harrypotter文本数据,以阐明文本开掘和剖析能力。 library(tidyverse) # 数据处理和绘图library(stringr) # 文本清理和正则表达式library(tidytext) # 提供额定的文本开掘性能咱们正在解决的七部小说,包含 philosophers_stone:《哈利-波特与魔法石》(1997)。chamber_of_secrets: 《哈利-波特与密室》(1998)阿兹卡班的囚徒(prisoner_of_azkaban)。Harry Potter and the Prisoner of Azkaban (1999)Goblet_of_fire: Harry Potter and the Goblet of Fire (2000)Order_of_the_phoenix: Harry Potter and the Order of the Phoenix (2003)half_blood_prince: 哈利-波特与混血王子(2005)deathly_hallows: 哈利-波特与死亡圣器(2007)。每个文本都在一个字符矢量中,每个元素代表一个章节。例如,上面阐明了philosophers_stone的前两章的原始文本。 philosophers_stone\[1:2\]## \[1\] "THE BOY WHO LIVED Mr. and Mrs. Dursley, of number four, Privet Drive, were proud to say that they were perfectly normal, thank## you very much. They were the last people you'd expect to be involved in anything strange or mysterious, because they just didn't hold## with such nonsense. Mr. Dursley was the director of a firm called Grunnings, which made drills. He was a big, beefy man with hardly## any neck, although he did have a very large mustache. Mrs. Dursley was thin and blonde and had nearly twice the usual amount of neck,## which came in very useful as she spent so much of her time craning over garden fences, spying on the neighbors. The Dursleys had a## small son called Dudley and in their opinion there was no finer boy anywhere. The Dursleys had everything they wanted, but they also## had a secret, and their greatest fear was that somebody would discover it. They didn't think they could bear it if anyone found out## about the Potters. Mrs. Potter was Mrs. Dursley's sister, but they hadn'... <truncated>## \[2\] "THE VANISHING GLASS Nearly ten years had passed since the Dursleys had woken up to find their nephew on the front step, but## Privet Drive had hardly changed at all. The sun rose on the same tidy front gardens and lit up the brass number four on the Dursleys'## front door; it crept into their living room, which was almost exactly the same as it had been on the night when Mr. Dursley had seen## that fateful news report about the owls. Only the photographs on the mantelpiece really showed how much time had passed. Ten years ago,## there had been lots of pictures of what looked like a large pink beach ball wearing different-colored bonnets -- but Dudley Dursley was## no longer a baby, and now the photographs showed a large blond boy riding his first bicycle, on a carousel at the fair, playing a## computer game with his father, being hugged and kissed by his mother. The room held no sign at all that another boy lived in the house,## too. Yet Harry Potter was still there, asleep at the moment, but no... <truncated>情感数据集有各种各样的字典存在,用于评估文本中的观点或情感。tidytext包在sentiments数据集中蕴含了三个情感词典。 sentiments## # A tibble: 23,165 × 4##           word sentiment lexicon score##          <chr>     <chr>   <chr> <int>## 1       abacus     trust     nrc    NA## 2      abandon      fear     nrc    NA## 3      abandon  negative     nrc    NA## 4      abandon   sadness     nrc    NA## 5    abandoned     anger     nrc    NA## 6    abandoned      fear     nrc    NA## 7    abandoned  negative     nrc    NA## 8    abandoned   sadness     nrc    NA## 9  abandonment     anger     nrc    NA## 10 abandonment      fear     nrc    NA## # ... with 23,155 more rows这三个词库是 AFINN bing nrc这三个词库都是基于单字(或单词)的。这些词库蕴含了许多英语单词,这些单词被调配了踊跃/消极情绪的分数,也可能是高兴、愤恨、悲伤等情绪的分数。nrc词典以二元形式("是"/"否")将单词分为踊跃、消极、愤恨、期待、讨厌、恐怖、高兴、悲伤、诧异和信赖等类别。bing词库以二元形式将单词分为踊跃和消极类别。AFINN词库给单词打分,分数在-5到5之间,负分示意消极情绪,正分示意积极情绪。   # 查看单个词库get_sentiments("afinn")get_sentiments("bing")get_sentiments("nrc")根本情感剖析为了进行情感剖析,咱们须要将咱们的数据整顿成一个参差的格局。上面将所有七本《哈利-波特》小说转换为一个tibble,其中每个词都按章节按书排列。更多细节请参见整洁文本教程。 #设定因素,按出版程序保留书籍series$book <- factor(series$book, levels = rev(titles))series## # A tibble: 1,089,386 × 3##                   book chapter    word## *               <fctr>   <int>   <chr>## 1  Philosopher's Stone       1     the## 2  Philosopher's Stone       1     boy## 3  Philosopher's Stone       1     who## 4  Philosopher's Stone       1   lived## 5  Philosopher's Stone       1      mr## 6  Philosopher's Stone       1     and## 7  Philosopher's Stone       1     mrs## 8  Philosopher's Stone       1 dursley## 9  Philosopher's Stone       1      of## 10 Philosopher's Stone       1  number## # ... with 1,089,376 more rows当初让咱们应用nrc情感数据集来评估整个《哈利-波特》系列所代表的不同情感。咱们能够看到,负面情绪的存在比侧面情绪更强烈。         filter(!is.na(sentiment)) %>%        count(sentiment, sort = TRUE)## # A tibble: 10 × 2##       sentiment     n##           <chr> <int>## 1      negative 56579## 2      positive 38324## 3       sadness 35866## 4         anger 32750## 5         trust 23485## 6          fear 21544## 7  anticipation 21123## 8           joy 14298## 9       disgust 13381## 10     surprise 12991这给出了一个很好的整体感觉,但如果咱们想理解每部小说的过程中情绪是如何变动的呢?要做到这一点,咱们要进行以下工作。 创立一个索引,将每本书按500个词离开;这是每两页的大抵字数,所以这将使咱们可能评估情绪的变动,甚至是在章节中的变动。用inner_join连贯bing词典,以评估每个词的侧面和负面情绪。计算每两页有多少个侧面和负面的词扩散咱们的数据计算出净情绪(侧面-负面)。绘制咱们的数据        ggplot(aes(index, sentiment, fill = book)) +          geom_bar(alpha = 0.5") 当初咱们能够看到每部小说的情节是如何在故事的倒退轨迹中朝着更踊跃或更消极的情绪变动。 比拟情感有了情感词典的几种抉择,你可能想理解更多对于哪一种适宜你的目标的信息。让咱们应用所有三种情感词典,并查看它们对每部小说的不同之处。         summarise(sentiment = sum(score)) %>%        mutate(method = "AFINN")bing\_and\_nrc <-                  inner\_join(get\_sentiments("nrc") %>%                                     filter(sentiment %in% c("positive", "negative"))) %>%                      spread(sentiment, n, fill = 0) %>%咱们当初有了对每个情感词库的小说文本中净情感(侧面-负面)的预计。让咱们把它们绘制进去。   ggplot(aes(index, sentiment, fill = method)) +  geom_bar(alpha = 0.8, stat = "identity", show.legend = FALSE) +  facet_grid(book ~ method) 计算情感的三种不同的词典给出的后果在相对意义上是不同的,但在小说中却有相当类似的绝对轨迹。咱们看到在小说中差不多雷同的中央有相似的情绪低谷和顶峰,但绝对值却显著不同。在某些状况下,AFINN词典仿佛比NRC词典发现了更多踊跃的情绪。这个输入后果也使咱们可能在不同的小说之间进行比拟。首先,你能够很好地理解书籍长度的差别--《菲尼克斯的秩序》比《哲学家的石头》长很多。其次,你能够比拟一个系列中的书籍在情感方面的不同。 常见情绪词同时领有情感和单词的数据框架的一个益处是,咱们能够剖析对每种情感有奉献的单词数。 word_counts## # A tibble: 3,313 × 3##      word sentiment     n##     <chr>     <chr> <int>## 1    like  positive  2416## 2    well  positive  1969## 3   right  positive  1643## 4    good  positive  1065## 5    dark  negative  1034## 6   great  positive   877## 7   death  negative   757## 8   magic  positive   606## 9  better  positive   533## 10 enough  positive   509## # ... with 3,303 more rows咱们能够直观地查看,以评估每种情绪的前n个词。         ggplot(aes(reorder(word, n), n, fill = sentiment)) +          geom_bar(alpha = 0.8, stat = "identity" 较大单位的情绪剖析很多有用的工作能够通过在词的层面上进行标记化来实现,但有时查看不同的文本单位是有用的或必要的。例如,一些情感剖析算法不仅仅关注单字(即单个单词),而是试图理解一个句子的整体情感。这些算法试图了解 我明天过的不开心。是一个悲伤的句子,而不是一个高兴的句子,因为有否定词。斯坦福大学的CoreNLP工具是这类情感剖析算法的例子。对于这些,咱们可能想把文本标记为句子。我应用philosophers_stone数据集来阐明。 tibble(text = philosophers_stone)##                                                                       sentence##                                                                          <chr>## 1                                              the boy who lived  mr. and mrs.## 2  dursley, of number four, privet drive, were proud to say that they were per## 3  they were the last people you'd expect to be involved in anything strange o## 4                                                                          mr.## 5      dursley was the director of a firm called grunnings, which made drills.## 6  he was a big, beefy man with hardly any neck, although he did have a very l## 7                                                                         mrs.## 8  dursley was thin and blonde and had nearly twice the usual amount of neck, ## 9  the dursleys had a small son called dudley and in their opinion there was n## 10 the dursleys had everything they wanted, but they also had a secret, and th## # ... with 6,588 more rows参数token = "句子 "试图通过标点符号来宰割文本。 让咱们持续按章节和句子来合成philosophers_stone文本。                         text = philosophers_stone) %>%   unnest_tokens(sentence, text, token = "sentences")这将使咱们可能按章节和句子来评估净情绪。首先,咱们须要追踪句子的编号,而后我创立一个索引,追踪每一章的进度。而后,我按字数对句子进行解嵌。这就给了咱们一个tibble,其中有每一章中按句子分列的单个词。当初,像以前一样,我退出AFINN词典,并计算每一章的净情感分数。咱们能够看到,最踊跃的句子是第9章的一半,第17章的开端,第4章的晚期,等等。         group_by(chapter, index) %>%        summarise(sentiment = sum(score, na.rm = TRUE)) %>%        arrange(desc(sentiment))## Source: local data frame \[1,401 x 3\]## Groups: chapter \[17\]## ##    chapter index sentiment##      <int> <dbl>     <int>## 1        9  0.47        14## 2       17  0.91        13## 3        4  0.11        12## 4       12  0.45        12## 5       17  0.54        12## 6        1  0.25        11## 7       10  0.04        11## 8       10  0.16        11## 9       11  0.48        11## 10      12  0.70        11## # ... with 1,391 more rows咱们能够用一个热图来形象地阐明这一点,该热图显示了咱们在每一章的停顿中最踊跃和最消极的情绪。 ggplot(book_sent) +        geom_tile(color = "white") +  最受欢迎的见解 1.探析大数据期刊文章钻研热点 2.618网购数据盘点-剁手族在关注什么 3.r语言文本开掘tf-idf主题建模,情感剖析n-gram建模钻研 ...

July 6, 2021 · 1 min · jiezi

关于算法:拓端tecdatR语言逻辑回归logistic模型分析泰坦尼克titanic数据集预测生还情况

原文链接:http://tecdat.cn/?p=22966 逻辑回归是一种拟合回归曲线的办法,y=f(x),当y是一个分类变量时。这个模型的典型用处是在给定一组预测因素x的状况下预测y,预测因素能够是间断的、分类的或混合的。  一般来说,分类变量y能够是不同的值。在最简略的状况下,y是二进制的,意味着它能够是1或0的值。机器学习中应用的一个经典例子是电子邮件分类:给定每封电子邮件的一组属性,如字数、链接和图片,算法应该决定该电子邮件是垃圾邮件(1)或不是(0)。 在这篇文章中,咱们把这个模型称为 "二项逻辑回归",因为要预测的变量是二进制的,然而,逻辑回归也能够用来预测一个能够两个以上数值的因变量。在这第二种状况下,咱们称该模型为 "多项式逻辑回归"。例如,一个典型的例子是将电影分为 "搞笑片"、"纪录片 "或 "剧情片"等。 R中的逻辑Logistic回归实现R使拟合一个逻辑回归模型变得非常容易。要调用的函数是glm(),其拟合过程与线性回归中应用的函数没有太大区别。在这篇文章中,我将拟合一个二元逻辑回归模型并解释每个步骤。 数据集咱们将在泰坦尼克号数据集上工作。这个数据集在网上有不同的版本,然而我倡议应用Kaggle提供的版本,因为它简直曾经能够应用了(为了下载它,你须要在Kaggle注册)。 数据集(训练)是一些乘客(精确的说是889人)的数据汇合,较量的指标是依据一些特色,如服务等级、性别、年龄等来预测生存率(如果乘客幸存下来就是1,如果没有就是0)。正如你所看到的,咱们将同时应用分类和连续变量。 数据清理过程在解决实在的数据集时,咱们须要思考到一些数据可能失落的状况,因而咱们须要为咱们的剖析筹备数据集。作为第一步,咱们应用read.csv()函数加载csv数据。 确保参数na.strings等于c(""),这样每个缺失值都被编码为NA。 加载和预处理数据当初咱们须要查看缺失值,并应用sapply()函数查看每个变量有多少个惟一值,该函数将作为参数传递的函数利用于数据框的每一列。 sapply(function(x) sum(is.na(x))) sapply(function(x) length(unique(x))) 绘制数据集并突出缺失值。  map(training) 解决缺失值变量cabin有太多的缺失值,不应用它。咱们也剔除PassengerId,因为它只是一个索引。 应用subset()函数,对原始数据集进行子集,只抉择相干列。  当初须要思考其余的缺失值。在拟合狭义线性模型时,R能够通过在拟合函数中设置一个参数来解决它们。 然而,我集体更喜爱 "手动"替换缺失值。有不同的办法能够做到这一点,一个典型的办法是用平均数、中位数或现有数值来替换缺失的数值。我应用平均数。 Age\[is.na(Age)\] <- mean(Age,na.rm=T) ## 用平均数代替缺失就分类变量而言,应用read.table()或read.csv()默认会把分类变量编码为因子。因子是R解决分类变量的形式。咱们能够应用以下几行代码来查看编码状况。   为了更好地理解R是如何解决分类变量的,咱们能够应用contrasts()函数。这个函数向咱们展现变量是如何虚构进去的,以及如何在模型中解释它们。   例如,你能够看到,在性别这个变量中,女性将被用作参考变量。Embarked中的缺失值,因为只有两个,咱们将剔除这两行(咱们也能够替换缺失值,保留数据点)。 data\[!is.na(Embarked),\]在进行拟合之前,数据的荡涤和格式化很重要。这个预处理步骤对于取得良好的模型拟合和更好的预测能力是十分重要的。 模型拟合咱们把数据分成两局部:训练集和测试集。训练集将被用来拟合咱们的模型,咱们将在测试集上进行测试。 ##当初,让咱们来拟合这个模型。请务必在glm()函数中指定参数family=binomial。glm(Survived ~.,family=binomial(link='logit'))##通过应用函数summary(),咱们失去了咱们模型的后果。 解释咱们的逻辑回归模型的后果首先,咱们能够看到,SibSp、票价都没有统计学意义。至于有统计学意义的变量,性别的P值最低,表明乘客的性别与存活的概率有很大关系。这个预测因素的负系数表明,在所有其余变量雷同的状况下,男性乘客生存的可能性较小。请记住,在Logit模型中,反应变量是对数几率:ln(odds) = ln(p/(1-p)) = ax1 + bx2 + 。+ z*xn。 因为男性是一个虚构变量,所以男性会使对数几率缩小2.75,而年龄减少一个单位会使对数几率缩小0.037。 当初咱们能够对模型剖析偏差表 有效偏差和_残差_之间的差别显示了咱们的模型与空模型(只有截距的模型)的比照状况。这个差距越大越好。剖析该表,咱们能够看到逐个增加每个变量时_残差_的降落。同样,退出Pclass、Sex和Age能够显著缩小残差。只管SibSp的p值很低,但其余变量仿佛对模型的改善较少。这里的大p值表明,没有变量的模型或多或少解释了雷同数量的变动。最终,咱们心愿看到的是_残差_和AIC的显著降落。 尽管不存在与线性回归的R2齐全等同的指标,但麦克法登R2指数能够用来评估模型的拟合度。 评估模型的预测能力在下面的步骤中,咱们简要地评估了模型的拟合状况,当初咱们想看看在新的数据集上预测y时,模型的体现如何。通过设置参数type='response',R将以P(y=1|X)的模式输入概率。咱们的决策边界将是0.5。如果P(y=1|X)>0.5,那么y=1,否则y=0。 Error <- mean(fitted != Survived)print(paste('准确度',1- Error)) 测试集上0.84的准确度是一个相当不错的后果。然而,请记住,这个后果在肯定水平上取决于我先前对数据的手动宰割,因而,如果想得到一个更准确的分数,最好运行某种穿插验证,如k-fold穿插验证。 作为最初一步,咱们将绘制ROC曲线并计算AUC(曲线下面积),这是二元分类器的典型性能测量。 ROC是在不同的阈值设置下,通过绘制真阳性率(TPR)与假阳性率(FPR)产生的曲线,而AUC是ROC曲线下的面积。依据教训,一个具备良好预测能力的模型的AUC应该比0.5更靠近于1(1是现实的)。 performance( measure = "tpr", x.measure = "fpr")plot(prf) auc 最受欢迎的见解 1.R语言多元Logistic逻辑回归 利用案例 2.面板平滑转移回归(PSTR)剖析案例实现 3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR) 4.R语言泊松Poisson回归模型剖析案例 5.R语言回归中的Hosmer-Lemeshow拟合优度测验 6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现 7.在R语言中实现Logistic逻辑回归 8.python用线性回归预测股票价格 9.R语言如何在生存剖析与Cox回归中计算IDI,NRI指标

July 6, 2021 · 1 min · jiezi

关于算法:拓端tecdat使用Python和SAS-Viya分析社交网络

原文链接:http://tecdat.cn/?p=7303 本示例应用Python和SAS剖析了预防高危药物钻研的后果。这个社交网络有194个节点和273个边,代表药物、使用者之间的分割。 背景SAS Viya的最新版本提供了用于摸索试验问题的全套翻新算法和通过验证的分析方法,但它也是基于开放式体系结构构建的。这意味着能够将SAS Viya无缝集成到应用程序基础架构中,并应用任何编程语言来驱动分析模型。  只管你能够持续进行并简略地收回一系列REST API调用来拜访数据  ,但通常应用编程语言来组织你的工作并使之可反复更无效。我决定应用Python,因为它在年老的数据科学家中很风行 。 出于演示目标,我应用一个名为Jupyter的接口,该接口是一个凋谢的,基于Web的交互式平台,可能运行Python代码以及嵌入标记文本。  拜访SAS云剖析服务(CAS)SAS Viya的外围是称为SAS Cloud Analytic Services(CAS)的剖析运行环境。为了执行操作或拜访数据,须要连贯会话。您能够应用连贯(倡议应用该连贯来传输大量数据),也能够通过HTTP或HTTPS通信应用REST API。   import matplotlib.colors as colors #程序包包含用于色彩范畴的程序 import matplotlib.cm as cmx import networkx as nx #出现网络图当初曾经加载了库,咱们能够发连贯到CAS并为给定的用户创立会话。   s = CAS('http://sasviya.mycompany.com:8777', 8777, 'myuser', 'mypass')对于此网络分析,我将应用一个名为_hyperGroup _的集。  s.loadactionset('hyperGroup')加载数据 为了执行任何剖析建模,咱们须要数据。 将本地CSV文件上载到服务器,并将数据存储到名为_DRUG_NETWORK_的表中。该表只有两列数值类型的_FROM_和_TO_。  inputDataset = s.upload("data/drug\_network.csv", casout=dict(name='DRUG\_NETWORK', promote = True))在剖析建模期间,通常必须更改数据结构,过滤或合并数据源。 这里的_put_函数将两个数字列都转换为新的字符列_SOURCE_和_TARGET_。  sasCode = 'SOURCE = put(FROM,best.); TARGET = put(TO,best.);\\n' dataset = inputDataset.datastep(sasCode,casout=dict(name='DRUG_NETWORK2', replace = True))数据摸索建设分析模型时的常见工作是首先理解数据。上面的示例返回数据集的前5行。  dataset.fetch(to=5, sastypes=False, format=True) #列出开始5行一个简略的汇总统计数据会显示更多详细信息,包含咱们数据集中273条边的总数。  dataset.summary() 图形布局首先,咱们将网络可视化,以根本理解其构造和大小。咱们将通过力导向算法来计算顶点的地位。Hypergroup还能够用于查找群集,计算图布局以及确定网络度量规范,例如社区和核心性。  s.hyperGroup.hyperGroup(    createOut = "NEVER", # 这样能够禁止创立通常生成的表    allGraphs = True, # 解决所有图形    inputs    = \["SOURCE", "TARGET"\], #批示边和指标列    table     = dataset, # 输出数据集    edges     = table(name='edges',replace=True), # 后果表蕴含edge属性    vertices  = table(name='nodes',replace=True)  # 蕴含点属性的后果表 ) renderNetworkGraph() # 应用networkx包创立图形 出现了以下网络,并提供了图形的第一视图。咱们能够看到两个次要分支,并理解高密度和低密度区域。  社区检测为了理解社交网络中用户的关系,咱们将剖析集体所属的社区。社区检测或聚类是将网络划分为社区,使社区子图中的链接比社区之间的链接更严密地连贯。同一社区中的人们通常具备独特的属性,并示意他们之间有着亲密的分割。  当初,更新后的节点表蕴含一个附加列_\_Community\__  ,其中蕴含咱们网络中每个节点的值。给定此数据集,咱们能够执行根本统计信息,例如跨列的不同计数: 后果表显示,确定了咱们网络中的24个社区。 让咱们看一下最大的5个最大社区,并剖析节点散布。  咱们将获取的行重定向到Python变量中。咱们将应用它来生成条形图,显示前5个最大的社区: 这表明最大的社区13具备35个顶点。 以下示例显示社区4中的节点: 最初,让咱们再次渲染网络–这次在为节点着色时思考了社区: 通常,须要依据您的网络规模和冀望的后果来调整社区的数量。将小型社区合并为大型社区。社区能够合并: 随机进入邻近社区进入顶点数量起码的相邻社区以最大数量的顶点进入曾经具备_nCommunities_顶点的社区上面将通过指定_nCommunities_参数将社区总数缩小到5 。 核心性剖析剖析核心性有助于确定谁在网络中很重要。重要人物将被很好地分割起来,因而对网络中的其余集体具备很高的影响力。就咱们针对社交网络而言,这将表明潜在的病毒传播和集体的相干危险行为。 每个度量规范都示意为节点数据集中的输入列。 让咱们应用核心性度量之一作为节点大小再次渲染网络。  子集网络分支从咱们的网络来看,社区2中的用户仿佛扮演着重要角色。这由社区的整体核心位置,也由该社区中大多数集体的高beetweenness值表明。以下代码过滤并渲染了社区2的网络,仅使咱们对该子网络有了更好的可视化。 下面的示例应用了规范的二维导向图布局。在更简单的状况下,可能还须要在剖析网络结构时思考应用其余维度。  最受欢迎的见解 1.采纳spss-modeler的web简单网络对所有腧穴进行剖析 2.用R语言和python进行社交网络中的社区检测 3.R语言文本开掘NASA数据网络剖析,tf-idf和主题建模 4.在R语言中应用航空公司简单网络对疫情进行建模 5.python附属关系图模型 基于模型的网络中密集重叠社区检测 6.应用Python和SAS Viya剖析社交网络 7.关联网络分析:已迁离北京外来人口的数据画像 8.情感语义网络:游记数据感知游览目的地形象 9.用关联规定数据挖掘摸索药物配伍中的法则

July 6, 2021 · 1 min · jiezi

关于算法:剑指-の-精选从宏观角度看对称二叉树问题

题目形容这是「牛客网」上的「JZ 58 对称的二叉树」,难度为「艰难」。 Tag : 「剑指 Offer」、「二叉树」、「层序遍历」、「迭代」、「递归」 形容: 请实现一个函数,用来判断一棵二叉树是不是对称的。 留神,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 示例1 输出:{8,6,6,5,7,7,5}返回值:true示例2 输出:{8,6,9,5,7,7,5}返回值:false要求: 工夫:1 s空间:64 M根本思维首先要明确,题目所定义的 “对称” 是对每层而言,同时思考空节点。 因而,如果咱们应用惯例的遍历形式进行查看的话,须要对空节点有所示意。 部分查看(层序遍历)咱们应用 0x3f3f3f3f 作为有效值,并建设占位节点 emptyNode 用来代指空节点(emptyNode.val = 0x3f3f3f3f)。 一个奢侈的做法是:应用「层序遍历」的形式进行「逐层查看」,对于空节点应用 emptyNode 进行代指,同时确保不递归 emptyNode 对应的子节点。 具体做法如下: 起始时,将 root 节点入队;从队列中取出节点,查看节点是否为 emptyNode 节点来决定是否持续入队:当不是 emptyNode 节点时,将其左/右儿子进行入队,如果没有左/右儿子,则用 emptyNode 代替入队;当是 emptyNode 节点时,则疏忽;在进行流程 的同时应用「长期列表」记录以后层的信息,并查看以后层是否合乎 “对称” 要求;循环流程 和 ,直到整个队列为空。代码: import java.util.*;class Solution {    int INF = 0x3f3f3f3f;    TreeNode emptyNode = new TreeNode(INF);    boolean isSymmetrical(TreeNode root) {        if (root == null) return true;        Deque<TreeNode> d = new ArrayDeque<>();        d.add(root);        while (!d.isEmpty()) {            // 每次循环都将下一层拓展完并存到「队列」中            // 同时将该层节点值顺次存入到「长期列表」中            int size  = d.size();            List<Integer> list = new ArrayList<>();            while (size-- > 0) {                TreeNode poll = d.pollFirst();                if (!poll.equals(emptyNode)) {                    d.addLast(poll.left != null ? poll.left : emptyNode);                    d.addLast(poll.right != null ? poll.right : emptyNode);                }                list.add(poll.val);            }                        // 每一层拓展完后,检查一下寄存以后层的该层是否合乎「对称」要求            if (!check(list)) return false;        }        return true;    }    // 应用「双指针」查看某层是否合乎「对称」要求    boolean check(List<Integer> list) {        int l = 0, r = list.size() - 1;        while (l < r) {            if (!list.get(l).equals(list.get(r))) return false;            l++;            r--;        }        return true;    }}工夫复杂度:在层序遍历过程中,每个节点最多入队一次,同时在 check 查看对称性过程中,每层只会被查看一次。复杂度为空间复杂度:整体查看(递归)在「层序遍历」解法中,咱们利用了 “对称” 定义对每层进行查看。 实质上这是利用 “对称” 定义进行屡次「部分」查看。 事实上,咱们还能够利用 “对称” 定义在「整体」层面上进行查看。 咱们如何定义两棵子树 a 和 b 是否 “对称” ? 当且仅当两棵子树合乎如下要求时,满足 “对称” 要求: 两棵子树根节点值雷同;两颗子树的左右子树别离对称,包含:a 树的左子树与 b 树的右子树相应地位的值相等a 树的右子树与 b 树的左子树相应地位的值相等 ...

July 6, 2021 · 1 min · jiezi

关于算法:拓端数据tecdatR语言是否对二分连续变量执行逻辑回归

原文链接:http://tecdat.cn/?p=6851教育或医学的规范状况是咱们有一个继续的衡量标准。一个例子是BMI。您能够通过70分作为规范进行问题测试。当这种状况产生时,钻研人员有时可能会对BMI模型超过30或通过/失败感兴趣。实质性问题通常属于模仿某人超过/低于该临床显着阈值的概率的线条。因而,咱们应用逻辑回归等办法对间断测量进行二分,并剖析新的二元变量。 那么这种办法在实践中如何运作?任何尝试在应用逻辑回归进行剖析之前,在不同阈值下对连续变量进行二分法的人都会晓得,预计的系数会发生变化。 咱们能够应用模仿。首先,我将介绍数据生成过程: dat <- data.frame(x = rbinom(300, 1, .5))# 后果 ys=截距为-0.5,x的系数为1,存在误差dat$yc <- -.5 + dat$x + rlogis(nrow(dat))hist(dat$yc, main = "") 而后,咱们能够yc在不同点上对后果进行二分,以确定这是否会影响x咱们应用逻辑回归的预计系数: coef(glm((yc > -2) ~ x, binomial, dat))\["x"\] # Cut it at extreme -2        x0.9619012coef(glm((yc > 0) ~ x, binomial, dat))\["x"\] # Cut it at midpoint 0       x1.002632coef(glm((yc > 2) ~ x, binomial, dat))\["x"\] # Cut it at extreme 2        x0.8382662如果咱们yc间接利用线性回归怎么办? # 首先,咱们创立一个方程来提取系数,而后# 用下面的转化为对数的公式来转化它们。trans <- function (fit, scale = pi / sqrt(3)) {       x1.157362所有这些数字彼此并没有太大的不同。当初咱们能够多次重复此过程来比拟后果中的模式。我反复2500次: colMeans(res <- t(replicate(2500, {  #  v代表十分;l/m/h代表低/中/高;以及t代表阈值;ls代表惯例回归。  c(vlt = coef(glm((yc > -2) ~ x, binomial, dat))\["x"\],    lt = coef(glm((yc > -1) ~ x, binomial, dat))\["x"\],    vlt.x      lt.x      mt.x      ht.x     vht.x     ols.x1.0252116 1.0020822 1.0049156 1.0101613 1.0267511 0.9983772这些数字是不同办法的均匀回归系数。 boxplot(res) 咱们看到尽管平均值大致相同,但当阈值极其时,预计的系数变动更大。最小变量系数是变换后的线性回归系数,因而当咱们应用线性回归办法时,后果稳固。 不同办法之间的预计系数模式如何?  ggpairs(as.data.frame(res)) 咱们看到当阈值非常低时,预计系数与阈值十分高时的预计系数十分弱相干(.13)。这些差别只是反映了阈值,在理论数据分析中可能会产生误导。 基于这些后果,预测因子与后果之间的关系也可能因后果的不同分位数而不同。分位数回归探讨的状况,能够应用分位数回归办法来查看原始间断后果中是否存在这种状况。 十分感谢您浏览本文,有任何问题请在上面留言!

July 5, 2021 · 1 min · jiezi

关于算法:R语言中贝叶斯网络BN动态贝叶斯网络线性模型分析错颌畸形数据

原文链接:http://tecdat.cn/?p=22956 贝叶斯网络(BN)是一种基于有向无环图的概率模型,它形容了一组变量及其相互之间的条件依赖性。它是一个图形模型,咱们能够很容易地查看变量的条件依赖性和它们在图中的方向。 在这篇文章中,我将简要地学习如何用R来应用贝叶斯网络。 本教程旨在介绍贝叶斯网络学习和推理的基础知识,应用真实世界的数据来摸索图形建模的典型数据分析工作流程。关键点将包含: 预处理数据;学习贝叶斯网络的构造和参数。应用网络作为预测模型。应用网络进行推理。通过与内部信息的比照来验证网络的有效性。疾速介绍贝叶斯网络定义 贝叶斯网络(BNs)的定义是: 一个网络结构,一个有向无环图 , 其中每个节点  对应于一个随机变量 ;一个全局概率分布  (带参数 ), 它能够依据图中存在的弧被分解成更小的部分概率分布。网络结构的次要作用是通过图形拆散来表白模型中各变量之间的条件独立性关系,从而指定全局散布的因子化。 每个部分散布都有本人的参数集 ; 而⋃  要比小得多,因为许多参数是固定的,因为它们所属的变量是独立的。 R实现了以下学习算法。 基于束缚的:PC, GS, IAMB, MMPC, Hilton-PC 基于分数的:爬山算法、Tabu Search 配对的:ARACNE, Chow-Liu 混合:MMHC, RSMAX2 咱们应用基于分数的学习算法,_希尔算法_。首先,咱们将先为本教程生成简略的数据集。 在这个数据集中,'状态'与'元素'和'承受'列有关系。而'类型'与'色彩'列有关系。当你创立一个带有分类数据的数据框时,列应该是一个因子类型。否则,该数据框不能用于BN构造的创立。   接下来,咱们将创立学习构造。 咱们能够在一个图中看到构造。 > plot(hc_simd) 在这个图中,状态、元素、承受、类型和色彩被称为节点。节点之间的方向用弧线形容,弧线是一个蕴含从元素到元素方向数据的矩阵。 如上弧线显示,在咱们的数据中存在'类型'到'色彩',以及'状态'到'承受'和'元素'的关系。'类型'和'状态'是两个独立的组,它们之间不存在相互依赖关系。 接下来,咱们将用数据来拟合模型。 simd_fitted 基于上述训练数据,咱们能够进行条件概率查问。 咱们查看 "Outlier "和 "Target "的状态概率。 该样本成为 "离群 "的概率为51%。 状态成为 "指标 "的概率是0%。 错颌畸形数据的贝叶斯网络分析问题:受第三类错牙合畸形影响的患者(以下牙弓突出为特色),其骨骼不均衡在生命晚期就产生,在青春期和骨骼成熟前会变得更加显著。在单个III类患者中晚期预测医治的胜利或失败,使其更容易改正,但仅从大量的状态决定因素中预测是很难做到的。起因是III类错颌畸形很少是繁多颅面部件异样的后果,所以单个的临床和放射学测量值可能不如测量值自身的相互作用具备批示性。 工作: 咱们学习一个BN,并应用它来确定和可视化在成长和医治过程中各种III类错位颌面特色之间的相互作用。咱们通过验证一些广泛承受的对于这些骨骼不均衡演变的假说来测验其一致性。咱们表明,与承受疾速上颌扩张和面罩医治的正畸患者相比,未经医治的受试者造成了不同的III类颅面成长模式。在承受医治的患者中,CoA段(上颌骨长度)和ANB角(上颌骨与下颌骨的前后关系)仿佛是承受医治的次要影响的骨骼亚空间。数据咱们将应用的数据集蕴含143名患者,在T1和T2年龄段有两组测量数据(以年为单位),用于以下变量。 医治:未经医治(NT),医治后成果不好(TB),医治后成果好(TG)。成长:一个二元变量,数值为好或坏。ANB:唐氏点A和B之间的角度(度)。IMPA:门牙-下颌平面角(度)。PPPM:腭立体-下颌立体的角度(度)。CoA:上颌骨从髁状突到唐氏点A的总长度(mm)。GoPg:下颌体从齿龈到齿龈的长度(mm)。CoGo:下颌骨的长度,从髁状突到齿状突(mm)。所有的测量都是通过X射线扫描得出的,应用一套参考点建设的图,如以下。 > str(data) 预处理和探索性数据分析首先,咱们创立一个数据框架,其中包含所有变量的差别以及增长和医治。 成长和医治变量带有对于病人预后的冗余信息,这一点从TB和TG之间成长良好的病人比例的差别中能够看出。 为了防止在模型中包含这两个变量所导致的混淆,咱们将医治从新编码为一个二元变量,0示意NT,1示意TB或TG。同样地,咱们对成长进行从新编码,0示意坏,1示意好。 因为咱们将应用高斯BN进行剖析,查看这些变量是否是正态分布;从上面的图来看,仿佛并非所有的变量都是如此。 +   hist(x, prob = TRUE )+   lines(density(x), lwd = 2 ) 这些变量是通过线性关系分割起来的吗?其中一些是,但不是全副。 > pairs(diff\[, setdiff(names(diff) 最初,咱们能够看看这些变量是否以任何形式聚在一起,因为聚在一起的变量更有可能在BN中产生分割。 > heatmap(rho) 咱们能够在热图中看到两个集群:第一个集群包含dCoGo、dGoPg和dCoA,第二个集群包含Treatment、dANB和dCoA。第一个聚类在临床上很有意思,因为它包含医治和两个都与唐氏A点无关的变量,这为医治的次要成果提供了一些线索。 ...

July 5, 2021 · 1 min · jiezi

关于算法:编码KR字符串匹配一个简单到领导都看得懂的算法

“ 常怀感恩,生存或者就不会处处深渊。” 这几天看了《柔性字符串匹配》,觉得很有意思。书是好书,只是这个脑子是不是猪脑就不晓得了,于是秉着知之为知之,不知为不知的精力,我筹备再次去求教一下我的领导,在一个月黑风高的夜晚,我给领导发了个音讯,领导这么回复了我。 01 — **KR算法 ** 话说回来,咱们明天要说的这个字符串匹配算法比之前讲过的kmp,horspool,sunday简略的多的字符串匹配算法,咱们晓得暴力匹配是通过对两个字符串进行每一个地位字符比照来查找匹配的上的子字符串。明天说的这个KR算法的思维和暴力匹配有些许相似,不过在实现上做了一些改良,这也是为什么说这个算法非常容易了解的起因,因为思路十分间接。     在计算机科学中,Rabin–Karp算法或Karp–Rabin算法(英文:Rabin–Karp algorithm或Karp–Rabin algorithm),是一种由理查德·卡普与迈克尔·拉宾于1987年提出的、应用散列函数以在文本中搜查单个模式串的字符串搜索算法单次匹配。该算法先应用旋转哈希以疾速筛出无奈与给定串匹配的文本地位,尔后对残余地位是否胜利匹配进行测验。此算法可推广到用于在文本搜查单个模式串的所有匹配或在文本中搜查多个模式串的匹配。 维基百科 依照常规,对于被匹配的字符串称之为齐全字符串,用于查找匹配的字符串称为为模式字符串。KR算法是通过计算散列值的形式从齐全字符串中进行模式字符串的匹配,也就是咱们常常说的哈希值。 KR从齐全字符串的首位开始,计算和模式字符串长度统一的子字符串的哈希值,再通过哈希值与模式字符串计算失去的哈希值进行比拟,如果哈希值不存在则字符串肯定不相等。如果哈希值相等,两个字符串可能相等,这个时候就须要通过遍历比照两个字符串的每个字符,如果所有程序字符都相等的话,则两个字符串相等。 为什么哈希值相等,然而值不肯定相等,这里波及到一个概念就是哈希碰撞,理解的童鞋间接跳过,不理解的童鞋听我举个例子,一年有365天,如果这个时候一个房间里有366集体,那么是不是肯定会有两个人的生日的同一天,尽管生日雷同,然而不是同一个人,其实哈希能够看成是固定长度的函数,而理论长度大于这个固定长度,所以值会重合,当然这个例子不是特地的精确,感兴趣的童鞋能够维基或者百度更精确的定义。 因而当两个长度一样的字符串计算出的哈希值统一的时候,还须要比对字符串对应地位上的所有字符,因而能够很简略的得出KR算法的实现代码。 func KarpRabinMatch(allString, modeString string) int { //计算模式字符串的哈希值 hashMode := hash(modeString) //下标匹配完结 end:= len(allString)-len(modeString)+1 for i := 0; i < end ; i++ { //计算子字符串的哈希值 hashKey := hash(allString[i : i+len(modeString)+1]) if hashMode == hashKey { for j := 0; j < len(modeString); j++ { if allString[i+j] != modeString[j] { break } } return i } } return -1}能够看到代码中对模式字符串哈希值(hashMode)的计算只会解决一次,在循环中,从齐全字符串的第一个字符开始的子字符串,计算对应哈希值,判断该哈希值与hashMode比拟,如果不相等往后一位计算下一个子字符串的哈希值。 ...

July 2, 2021 · 1 min · jiezi

关于算法:R语言DTWDynamic-Time-Warping-动态时间规整算法

原文链接:http://tecdat.cn/?p=22945 动静工夫规整(DTW,Dynamic time warping,动静工夫归整/规整/蜿蜒)是一种掂量两个序列之间最佳排列的算法。线性序列数据如工夫序列、音频、视频都能够用这种办法进行剖析。DTW通过部分拉伸和压缩,找出两个数字序列数据的最佳匹配,同时也能够计算这些序列之间的间隔。 DTW是干什么的?动静工夫规整算法,故名思议,就是把两个代表同一个类型的事物的不同长度序列进行工夫上的“对齐”。比方DTW最罕用的中央,语音辨认中,同一个字母,由不同人发音,长短必定不一样,把声音记录下来当前,它的信号必定是很类似的,只是在工夫上不太对参差而已。所以咱们须要用一个函数拉长或者缩短其中一个信号,使得它们之间的误差达到最小。 DTW怎么计算?因而,动静工夫规整要解决的问题就是:找到一条最优的规整门路 W = {\varpi \_1},{\varpi \_2}...{\varpi \_k} W=1,2...k,其中 {w\_k} = (i,j) wk=(i,j),即认为工夫序列1的第i个点和工夫序列2的第j个点是相似的。全副相似点的间隔之和做为规整门路间隔,用规整门路间隔来掂量两个工夫序列的类似性。规整门路间隔越小,相似度越高。 上面咱们来总结一下DTW动静工夫规整算法的简略的步骤: 1. 首先必定是已知两个或者多个序列,然而都是两个两个的比拟,所以咱们假如有两个序列A={a1,a2,a3,...,am}  B={b1,b2,b3,....,bn},维度m>n 2. 而后用欧式间隔计算出每序列的每两点之间的间隔,D(ai,bj) 其中1≤i≤m,1≤j≤n    画出下表: 3.  接下来就是依据上图将最短门路找进去。从D(a1,a2)沿着某条门路达到D(am,bn)。找门路满足:如果以后节点是D(ai,bj),那么下一个节点必须是在D(i+1,j),D(i,j+1),D(i+1,j+1)之间抉择,并且门路必须是最短的。计算的时候是依照动静布局的思维计算,也就是说在计算达到第(i,j)个节点的最短门路时候,思考的是左上角也即第(i-1,j)、(i-1,j-1)、(i,j-1)这三个点到(i,j)的最短距离。 4. 接下来从最终的最短距离往回找到那条最佳的输入门路, 从D(a1,b1)到D(am,bn)。他们的总和就是就是所须要的DTW间隔 【注】如果不回溯门路,间接在第3步的时候将左上角三个节点到下一个节点最短的点作为最优门路节点,就是贪心算法了。DTW是先计算终点到起点的最小值,而后从这个最小值回溯回去看看这个最小值都通过了哪些节点。   R语言实现在这篇文章中,咱们将学习如何找到两个数字序列数据的排列。 创立序列数据首先,咱们生成序列数据,并在一个图中将其可视化。 plot(a, type = "l")lines(b, col = "blue") 计算规整形式dtw()函数计算出一个最佳规整形式。 align(a, b)返回以下我的项目。你能够参考str()函数来理解更多信息。 当初,咱们能够绘制组合。 用双向的办法作图动静工夫规整后果的绘图:点比拟显示查问和参考工夫序列以及它们的排列形式,进行可视化查看。 Plot(align) 用密度作图显示叠加了规整门路的累积老本密度 。 该图是基于累积老本矩阵的。它将最优门路显示为全局老本密度图中的 "山脊"。 PlotDensity(align) 小结总而言之, DTW是一种十分有用的计算序列最小间隔的办法, 不论是在语音序列匹配, 股市交易曲线匹配, 还是DNA碱基序列匹配等等场景, 都有其大展身手的中央. 它的最大特点是在匹配时容许工夫上的伸缩, 因而能够更好的在一堆序列汇合中找到最佳匹配的序列. Eamonn Keogh, Chotirat Ann Ratanamahatana, Exact indexing of dynamic time warping, Knowledge and Information Systems, 2005.

July 2, 2021 · 1 min · jiezi

关于算法:拓端tecdatR语言用线性模型进行臭氧预测-加权泊松回归普通最小二乘加权负二项式模型多重插补缺失值

原文链接:http://tecdat.cn/?p=11386 在这篇文章中,我将从一个根本的线性模型开始,而后尝试找到一个更适合的线性模型。 数据预处理因为空气质量数据集蕴含一些缺失值,因而咱们将在开始拟合模型之前将其删除,并抉择70%的样本进行训练并将其余样本用于测试: N.train <- ceiling(0.7 * nrow(ozone))trainset <- sample(seq_len(nrow(ozone)), N.train)testset <- setdiff(seq_len(nrow(ozone)), trainset)一般最小二乘模型作为基准模型,咱们将应用一般的最小二乘(OLS)模型。在定义模型之前,咱们定义一个用于绘制线性模型的函数: plot.linear.model <- function(model, test.preds = NULL, test.labels = NULL,                             test.only = FALSE) {        test.residuals <- test.labels - test.preds        test.res.df <- data.frame("x" = test.labels, "y" = test.preds,                        "x1" = test.labels, "y2" = test.preds + test.residuals,                         "DataSet" = "test")        plot.res.df <- rbind(plot.res.df, test.res.df)        # annotate model with R^2 value        r.squared <- rsquared(test.preds, test.labels)    }ggplot()     return(p)}当初,咱们应用lm并钻研特色预计的置信区间来建设OLS模型: confint(model)##                     2.5 %       97.5 %## (Intercept) -1.106457e+02 -20.88636548## Solar.R      7.153968e-03   0.09902534## Temp         1.054497e+00   2.07190804## Wind        -3.992315e+00  -1.24576713咱们看到模型仿佛对截距的设置不太确定。让咱们看看模型是否依然体现良好:  查看模型的拟合度,有两个次要察看后果: 高臭氧程度被低估预计臭氧含量为负上面让咱们更具体地钻研这两个问题。 高臭氧程度被低估从图中能够看出,当臭氧在[0,100]范畴内时,线性模型非常适合后果。然而,当理论察看到的臭氧浓度高于100时,该模型会大大低估该值。 应该问一个问题,这些高臭氧含量是否不是测量误差的后果?思考到典型的臭氧程度,测量值仿佛是正当的。最高臭氧浓度为168 ppb(十亿分之一),城市的典型峰值浓度为150至510 ppb。这意味着咱们应该关注离群值。低估高臭氧含量将特地无害,因为高含量的臭氧会危害衰弱。让咱们考察数据以确定模型为何存在这些异样值的问题。    直方图表明残差散布右尾的值的确存在问题。因为残差不是真正的正态分布,因而线性模型不是最佳模型。实际上,残差仿佛遵循某种模式的泊松散布。为了找出最小二乘模型的拟合对离群值如此差的起因,咱们再来看一下数据。 ##      Ozone          Solar.R           Wind            Temp      ##  Min.   :110.0   Min.   :207.0   Min.   :2.300   Min.   :79.00  ##  1st Qu.:115.8   1st Qu.:223.5   1st Qu.:3.550   1st Qu.:81.75  ##  Median :120.0   Median :231.5   Median :4.050   Median :86.50  ##  Mean   :128.0   Mean   :236.2   Mean   :4.583   Mean   :86.17  ##  3rd Qu.:131.8   3rd Qu.:250.8   3rd Qu.:5.300   3rd Qu.:89.75  ##  Max.   :168.0   Max.   :269.0   Max.   :8.000   Max.   :94.00summary(ozone)##      Ozone          Solar.R           Wind            Temp      ##  Min.   :  1.0   Min.   :  7.0   Min.   : 2.30   Min.   :57.00  ##  1st Qu.: 18.0   1st Qu.:113.5   1st Qu.: 7.40   1st Qu.:71.00  ##  Median : 31.0   Median :207.0   Median : 9.70   Median :79.00  ##  Mean   : 42.1   Mean   :184.8   Mean   : 9.94   Mean   :77.79  ##  3rd Qu.: 62.0   3rd Qu.:255.5   3rd Qu.:11.50   3rd Qu.:84.50  ##  Max.   :168.0   Max.   :334.0   Max.   :20.70   Max.   :97.00从两组观测值的散布来看,咱们看不到高臭氧观测值与其余样本之间的微小差别。然而,咱们能够应用下面的模型预测图找到问题。在该图中,咱们看到大多数数据点都以[0,50]臭氧范畴为核心。为了很好地拟合这些察看值,截距的负值为-65.77,这就是为什么该模型低估了较大臭氧值的臭氧程度的起因,在训练数据中臭氧值有余。 该模型预测负臭氧程度如果察看到的臭氧浓度靠近于0,则该模型通常会预测负臭氧程度。当然,这不可能是因为浓度不能低于0。再次,咱们考察数据找出为什么模型依然做出这些预测。 为此,咱们将抉择臭氧程度在第5个百分位数的所有观测值,并考察其特征值: summary(ozone\[idx,\])##      Ozone        Solar.R           Wind            Temp     ##  Min.   :1.0   Min.   : 8.00   Min.   : 9.70   Min.   :57.0  ##  1st Qu.:4.5   1st Qu.:20.50   1st Qu.: 9.85   1st Qu.:59.5  ##  Median :6.5   Median :36.50   Median :12.30   Median :61.0  ##  Mean   :5.5   Mean   :37.83   Mean   :13.75   Mean   :64.5  ##  3rd Qu.:7.0   3rd Qu.:48.75   3rd Qu.:17.38   3rd Qu.:67.0  ##  Max.   :8.0   Max.   :78.00   Max.   :20.10   Max.   :80.0summary(ozone)##      Ozone          Solar.R           Wind            Temp      ##  Min.   :  1.0   Min.   :  7.0   Min.   : 2.30   Min.   :57.00  ##  1st Qu.: 18.0   1st Qu.:113.5   1st Qu.: 7.40   1st Qu.:71.00  ##  Median : 31.0   Median :207.0   Median : 9.70   Median :79.00  ##  Mean   : 42.1   Mean   :184.8   Mean   : 9.94   Mean   :77.79  ##  3rd Qu.: 62.0   3rd Qu.:255.5   3rd Qu.:11.50   3rd Qu.:84.50  ##  Max.   :168.0   Max.   :334.0   Max.   :20.70   Max.   :97.00咱们发现,在低臭氧程度下,均匀太阳辐射要低得多,而均匀风速要高得多。要理解为什么咱们会有负面的预测,当初让咱们看一下模型系数: coefficients(model)##  (Intercept)      Solar.R         Temp         Wind ## -65.76603538   0.05308965   1.56320267  -2.61904128因而,对于较低的臭氧程度,正系数Solar.R不能补救截距。 解决负臭氧程度预测让咱们首先解决预测负臭氧程度的问题。 最小二乘模型解决负预测的一种简略办法是将其替换为尽可能小的值。这样,如果咱们将模型交给客户,他就不会开始狐疑模型有问题。咱们能够应用以下性能来做到这一点: 当初让咱们验证这将如何改善咱们对测试数据的预测。请记住,R2 最后的模型是 0.604。 nonnegative.preds <- predict.nonnegative(model, ozone\[testset,\])plot.linear.model(model, nonnegative.preds, ozone$Ozone\[testset\], test.only = TRUE)  如咱们所见,此办法能够减少 R2至 0.6460.646。然而,以这种形式校对负值不会扭转咱们的模型谬误的事实,因为拟合过程并未思考到负值应该是不可能的。 泊松回归为了防止出现负预计,咱们能够应用假设为泊松散布而非正态分布的狭义线性模型(GLM): plot.linear.model(pois.model, pois.preds, ozone$Ozone\[testset\]) R2值0.616示意泊松回归比一般最小二乘(0.604)稍好。然而,其性能并不优于将负值为0.646的模型。这可能是因为臭氧程度的方差比泊松模型假如的要大得多: mean(ozone$Ozone) ``````## \[1\] 42.0991var(ozone$Ozone)## \[1\] 42.0991对数转换解决负预测的另一种办法是取后果的对数: print(rsquared(log.preds, test.labels))## \[1\] 0.616请留神,只管后果与通过Poisson回归得出的后果雷同,但这两种办法通常并不相同。 对高臭氧程度的低估现实状况下,咱们将在臭氧程度较高的状况下更好地进行测量。然而,因为咱们无奈收集更多数据,因而咱们须要利用已有的资源。应答低估高臭氧程度的一种办法是调整损失函数。 加权回归应用加权回归,咱们能够影响离群值残差的影响。为此,咱们将计算臭氧程度的z得分,而后将其指数用作模型的权重,从而减少异样值的影响。 plot.linear.model(weight.model, weight.preds, ozone$Ozone\[testset\])   该模型相对比一般的最小二乘模型更适合,因为它能够更好地解决离群值。 采样让咱们从训练数据中进行采样,以确保不再呈现臭氧含量过高的状况。这相似于进行加权回归。然而,咱们没有为低臭氧程度的观测值设置较小的权重,而是将其权重设置为0。 print(paste0("N (trainset before): ", length(trainset)))## \[1\] "N (trainset before): 78"print(paste0("N (trainset after): ", length(trainset.sampled)))## \[1\] "N (trainset after): 48"当初,让咱们基于采样数据构建一个新模型: rsquared(sampled.preds, test.labels)## \[1\] 0.612如咱们所见,基于采样数据的模型的性能并不比使用权重的模型更好。 联合看到泊松回归可用于避免负预计,加权是改善离群值预测的胜利策略,咱们应该尝试将两种办法联合起来,从而得出加权泊松回归。 加权泊松回归p.w.pois   如咱们所见,该模型联合了应用泊松回归(非负预测)和使用权重(低估离群值)的劣势。让咱们钻研模型系数: coefficients(w.pois.model)##  (Intercept)      Solar.R         Temp         Wind ##  2.069357230  0.002226422  0.029252172 -0.104778731该模型依然由截距管制,但当初是负数。因而,如果所有其余特色的值为0,则模型的预测仍将为正。 然而,假如均值应等于泊松回归的方差呢? print(paste0(c("Var: ", "Mean: "), c(round(var(ozone$Ozone), 2),        round(mean(ozone$Ozone), 2))))## \[1\] "Var: 1107.29" "Mean: 42.1"该模型的假如相对不满足,并且因为方差大于该模型假如,因而咱们有适度扩散的问题。 加权负二项式模型因而,咱们应该尝试抉择一个更适宜适度扩散的模型,例如负二项式模型: plot.linear.model(model.nb, preds.nb, test.labels)   因而,就测试集的性能而言,加权负二项式模型并不比加权泊松模型更好。然而,在进行推断时,该值应该更好,因为其假如没有被毁坏。查看这两个模型,很显著它们的p值相差很大: coef(summary(w.pois.model))##                 Estimate   Std. Error    z value     Pr(>|z|)## (Intercept)  2.069357230 0.2536660583   8.157801 3.411790e-16## Solar.R      0.002226422 0.0003373846   6.599061 4.137701e-11## Temp         0.029252172 0.0027619436  10.591155 3.275269e-26## Wind        -0.104778731 0.0064637151 -16.210295 4.265135e-59coef(summary(model.nb))##                 Estimate  Std. Error   z value     Pr(>|z|)## (Intercept)  1.241627650 0.640878750  1.937383 5.269853e-02## Solar.R      0.002202194 0.000778691  2.828071 4.682941e-03## Temp         0.037756464 0.007139521  5.288375 1.234078e-07## Wind        -0.088389583 0.016333237 -5.411639 6.245051e-08尽管泊松模型宣称所有系数都十分显着,但负二项式模型表明截距并不显着。 负二项式的置信区间能够通过以下形式找到: CI.int <- 0.95df <- data.frame(ozone\[testset,\], "PredictedOzone" = ilink(preds.nb.ci$fit), "Lower" = ilink(preds.nb.ci$fit - ci.factor * preds.nb.ci$se.fit),应用测试集中的特征值以及带有其置信区间的预测的结构数据框,咱们能够绘制依据独立变量而稳定的估计值: plots <- list()grid.arrange(plots\[\[1\]\], plots\[\[2\]\], plots\[\[3\]\])  这些图阐明了两件事: Wind和Temperature有清晰的线性关系。预计的臭氧程度Wind随减少而降落,而预计的臭氧程度随减少而Temp减少。该模型对低臭氧程度置信度较高,但对高臭氧程度置信度较低数据集优化模型后,咱们当初返回初始数据集。还记得咱们在剖析开始时就删除了所有缺失值的察看后果吗?好吧,这是不现实的,因为咱们曾经舍弃了有价值的信息,这些信息能够用来取得更好的模型。 考察缺失值让咱们首先考察缺失的值: ratio.missing <- length(na.idx) / nrow(ozone)print(paste0(round(ratio.missing * 100, 3), "%")) ``````## \[1\] "27.451%"nbr.missing <- apply(ozone, 2, function(x) length(which(is.na(x))))##   Ozone Solar.R    Wind    Temp ##      37       7       0       0nbr.missing <- apply(ozone, 1, function(x) length(which(is.na(x))))table(nbr.missing)## nbr.missing##   0   1   2 ## 111  40   2考察显示,因为短少值,以前排除了相当多的察看值。 调整训练和测试指标为了确保与以前应用雷同的观测值进行测试,咱们必须 映射到残缺的空气质量数据集: trainset <- c(trainset, na.idx)testset <- setdiff(seq_len(nrow(ozone)), trainset)估算缺失值为了取得缺失值的估计值,咱们能够应用插补。这种办法的想法是应用已知特色来造成预测模型,以便预计缺失的特色。  summary(as.numeric(imputed.data$Ozone))##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. ##    1.00   16.00   30.00   41.66   59.00  168.00请留神,aregImpute应用不同的boostrap程序样本进行多个插补,能够应用n.impute参数指定。因为咱们要应用所有运行的推算而不是单个运行,因而咱们将应用fit.mult.impute函数定义模型:    让咱们仅应用一个插补指定权重: rsquared(w.pois.preds.imputed, imputed.data$Ozone\[testset\])## \[1\] 0.431在这种状况下,基于估算数据的加权泊松模型的性能不会比仅排除失落数据的模型更好。这表明对缺失值的估算比将噪声引入数据中要多得多,而不是咱们能够应用的信号。可能的解释是,具备缺失值的样本具备不同于所有测量可用值的散布。 摘要咱们从OLS回归模型开始(R2= 0.604),并试图找到一个更适合的线性模型。第一个想法是将模型的预测截距设置为0(R2= 0.646)。为了更精确地预测离群值,咱们训练了加权线性回归模型(R2= 0.621)。接下来,为了仅预测正值,咱们训练了加权Poisson回归模型(R2= 0.652)。为了解决泊松模型中的适度扩散问题,咱们建设了加权负二项式模型。只管此模型的体现不如加权Poisson模型(R2= 0.638 ),则在进行推理时可能会更好。 尔后,咱们尝试通过应用Hmisc包估算缺失值来进一步改良模型。只管生成的模型比初始OLS模型要好,然而它们没有取得比以前更高的性能(R2=0.627)。 那么,最好的模型到底是什么?就模型假如的正确性而言,这是加权负二项式模型。就决定系数而言,R2,这是加权Poisson回归模型。因而,出于预测臭氧程度的目标,我将抉择加权Poisson回归模型。 实际上,初始模型和加权泊松模型的预测在5%的程度上存在显着差别: ## ##  Wilcoxon signed rank test## ## data:  test.preds and w.pois.preds## V = 57, p-value = 1.605e-05## alternative hypothesis: true location shift is not equal to 0当咱们比拟时,模型之间的差别变得很显著: ...

July 2, 2021 · 1 min · jiezi

关于算法:FSAF嵌入anchorfree分支来指导acnhorbased算法训练-CVPR2019

FSAF深刻地剖析FPN层在训练时的抉择问题,以超简略的anchor-free分支模式嵌入原网络,简直对速度没有影响,可更精确的抉择最优的FPN层,带来不错的精度晋升 起源:晓飞的算法工程笔记 公众号论文: Feature Selective Anchor-Free Module for Single-Shot Object Detection 论文地址:https://arxiv.org/abs/1903.00621论文代码:https://github.com/zccstig/mmdetection/tree/fsafIntroduction 指标检测的首要问题就是尺寸变动,许多算法应用FPN以及anchor box来解决此问题。在正样本判断下面,个别先依据指标的尺寸决定预测用的FPN层,越大的指标则应用更高的FPN层,而后依据指标与anchor box的IoU进一步判断,但这样的设计会带来两个限度:拍脑袋式的特征选择以及基于IoU的anchor采样。 如图2所示,60x60抉择两头的anchor,而50x50以及40x40的则抉择最小的anchor,anchor的抉择都是人们依据教训制订的规定,这在某些场景下可能不是最优的抉择。 为了解决上述的问题,论文提出了简略且高效的特征选择办法FSAF(feature selective anchor-free),可能在每轮训练中抉择最优的层进行优化。如图3所示,FSAF为FPN每层增加anchor-free分支,蕴含分类与回归,在训练时,依据anchor-free分支的预测后果抉择最合适的FPN层用于训练,最终的网络输入可同时综合FSAF的anchor-free分支后果以及原网络的预测后果。 Network Architecture FSAF的网络后果非常简单,如图4所示。在原有的网络结构上,FSAF为FPN每层引入两个额定的卷积层,别离用于预测anchor-free的分类以及回归后果。这样,在共用特色的状况下,anchor-free和anchor-based的办法可进行联结预测。 Ground-truth and Loss 对于指标$b=[x,y,w,h]$,在训练时可映射到任意的FPN层$P_l$,映射区域为$b^l_p=[x^l_p, y^l_p, w^l_p, h^l_p]$。一般而言,$b^l_p=b/2^l$。定义无效边界$b^l_e=[x^l_e, y^l_e, w^l_e, h^l_e]$和疏忽边界$b^l_i=[x^l_i, y^l_i, w^l_i, h^l_i]$,可用于定义特色图中的正样本区域、疏忽区域以及负样本区域。无效边界和疏忽边界均与映射后果成等比关系,比例别离为$\epsilon_e=0.2$和$\epsilon_i=0.5$,最终的分类损失为所有正负样本的损失值之和除以正样本点数。 Classification Output 分类后果蕴含$K$维,指标次要设定对应维度,样本定义分以下3种状况: 无效边界内的区域为正样本点。疏忽边界到无效边界的区域不参加训练。疏忽边界映射到相邻的特色金字塔层中,映射的边界内的区域不参加训练其余区域为负样本点。 分类的训练采纳focal loss,$\alpha=0.25$,$\gamma=2.0$,残缺的分类损失取所有正负区域的损失值之和除以无效区域点数。 Box Regression Output 回归后果输入为分类无关的4个偏移值维度,仅回归无效区域内的点。对于无效区域地位$(i,j)$,将映射指标示意为$d^l_{i,j}=[d^l_{t_{i,j}}, d^l_{l_{i,j}}, d^l_{b_{i,j}}, d^l_{r_{i,j}}]$,别离为以后地位到$b^l_p$的边界的间隔,对应的该地位上的4维向量为$d^l_{i,j}/S$,$S=4.0$为归一化常量。回归的训练采纳IoU损失,残缺的anchor-free分支的损失取所有无效区域的损失值的均值。 Online Feature Selection anchor-free的设计容许咱们应用任意的FPN层$P_l$进行训练,为了找到最优的FPN层,FSAF模块须要计算FPN每层对指标的预测成果。对于分类与回归,别离计算各层无效区域的focal loss损失以及IoU loss损失: 在失去各层的后果后,取损失值最小的层作为当轮训练的FPN层: Joint Inference and TrainingInference 因为FSAF对原网络的改变很少,在推理时,略微过滤下anchor-free和anchor-based分支的后果,而后合并进行NMS。 ...

July 2, 2021 · 1 min · jiezi

关于算法:详解智能优化算法遗传算法和蚁群算法

摘要:智能优化算法又称古代启发式算法,是一种具备全局优化性能、通用性强且适宜于并行处理的算法。本文次要为大家带来遗传算法和蚁群算法的具体解读。本文分享自华为云社区《智能优化算法(1)——遗传算法》,原文作者:我是一颗大西瓜 。 智能优化算法又称古代启发式算法,是一种具备全局优化性能、通用性强且适宜于并行处理的算法。这种算法个别具备紧密的理论依据,而不是单纯凭借专家教训,实践上能够在肯定的工夫内找到最优解或近似最优解。罕用的智能优化算法有:遗传算法 、模拟退火算法、禁忌搜索算法、粒子群算法、蚁群算法。 本文次要为大家带来遗传算法和蚁群算法的具体解读。 1. 遗传算法 遗传算法(Genetic algorithm, GA),模仿生物在自然环境中遗传和进化的自适应(对遗传参数的自适应调整)全局优化(随机变异一直寻找全局最优解)算法,根本思维是“优胜劣汰”,是利用最宽泛和成果最显著的智能优化算法。 1.1 编码方法算法模型通过对个体(individual,也即solution)进行二进制编码(01编码)、自然数编码、实数编码和树型编码。在对个体进行适应度计算时须要进行解码,实现问题的解空间与算法搜寻空间的互相转换。 1.2 适应度函数每个个体都有一个适应度函数(Fitness),对这个个体的优劣进行定量评估,适应度函数是算法执行“适者生存、优胜劣汰”的根据。适应度函数须要依据指标函数进行设置,令g(x)g(x)示意指标函数,令G(x)G(x)示意适应度函数,从指标函数g(x)g(x)映射到适应度函数G(x)G(x)的过程称为标定。 对于最大值优化问题,可间接将g(x)g(x)设定为适应度函数G(x)G(x),即G(x)=g(x)G(x)=g(x);对于最小值优化问题,G(x)=-\min g(x)G(x)=−ming(x);在遗传算法规定中,适应度函数为正值,但上述二式无奈保障,因而须要加上最小值或者最大值以及分段函数。 1.3 抉择操作抉择(Selection)是从以后群体中抉择适应度函数值大的个体,这些低劣个体有可能作为父代滋生下一代,个体适应度函数越大,被抉择作为父代的概率越大(有可能!) 抉择算法有很多,最根本的是轮盘赌算法: 其中,P_iPi示意个体被抉择的概率;F_iFi示意个体的适应度函数值;NN示意种群规模。 依据抉择概率P_iPi将圆盘形赌轮分为NN份,第ii个扇形的中心角为2\pi P_i2Pi。随机产生0到1之间遵从均匀分布的数rr,落在第ii个扇形的累计概率为Q_i = \sum_{j=1}^i P_jQi=∑j=1iPj,则抉择个体ii,反复NN次,就能够抉择NN个个体。 1.4 穿插操作两个个体通过穿插(Crossover)调换染色体局部基因而重组产生新的个体,也就是产生新解。穿插前须要进行随机配对。 个别状况下,对二进制编码的个体采纳点穿插的办法,也就是在两个配对字符串随机抉择一个或者多个交叉点,调换局部子串从而产生新的字符串 两个个体是否进行穿插操作由穿插概率决定,较大的穿插概率能够使遗传算法产生更多新解,放弃群体多样性,并能避免算法过早成熟,然而穿插概率过大会使算法过多搜寻不必要的解区域,耗费过多的计算工夫,个别取值在0.9左右。 1.5 变异操作生物进化中,某些染色体可能会产生基因突变(Mutation),从而产生新的染色体,这也是产生新解的另外一种重要形式。穿插操作相当于进行全局摸索,变异操作相当于进行部分开发,这也是智能优化算法必备的两种搜寻能力。 个体是否变异取决于变异概率,过低会使得局部有用基因无奈进入染色体,不能进步解的品质;过大会使子代丢失父代低劣基因,导致算法失去从过来搜寻教训的学习能力,个别状况下,变异概率取值为0.005左右。 值得注意的是,Rudolph通过马尔科夫链相干实践证实仅采纳抉择、穿插和变异三个操作的遗传算法不能收敛到全局最优解,而采纳精英保留策略的遗传算法是全局收敛的。 算法的整体流程如下图所示: 1.6 算法剖析一个好的智能算法,关键在于全局摸索和部分开发能力的均衡。全局摸索的目标是对解空间进行更全面的摸索,部分开发次要目标是对已知区域进行更精密的搜寻,心愿取得品质更好的新解。 遗传算法能够通过设置抉择压力实现全局摸索和部分开发的均衡。在算法运行初始阶段,设置较小的抉择压力能够使算法具备较好的全局摸索能力,进行广域搜寻;算法运行前期,设置较大的抉择压力能够使算法进行比拟精密的部分搜寻。 抉择压力的设置能够从适应度函数标定和抉择策略。 适应度函数标定,在算法晚期,该当放大个体适应度差距,缩小淘汰率;算法运行最初阶段,扩充个体适应度差距,保障算法能在高适应度个体对应解区域进行集中搜寻,放慢算法收敛速度。罕用办法有: 抉择策略,低抉择压力可抉择多种类型的个体,增强对未知解区域的搜寻,防止算法陷入部分极值,但算法优化速度会变得迟缓;高抉择压力可抉择低劣个体,放慢优化速度但群体多样性会降落,缩小搜寻到全局最优值的概率。除了轮盘赌算法外,抉择策略还有: 分级抉择法锦标赛抉择法Boltzmann抉择法2.蚁群算法2.1 蚁群优化算法 蚁群优化(Ant Colony Optimization, ACO)算法是源自大自然生物界的仿真类算法,其思维排汇了蚁群觅食过程中的行为个性。蚁群算法在TSP问题、二次调配问题、图着色问题、车辆调度问题、通信网络中的负载平衡问题等体现出良好的优化性能。 大自然中的蚂蚁没有视觉,依赖于同类散发在环境中的信息素决定本人何去何从,孤立的蚂蚁沿着伙伴的信息素轨迹挪动,同时开释本人的信息素,从而加强了该路线上的信息素数量,随着越来越多的蚂蚁通过该路线,一条较佳的路线就造成了(这条门路不肯定最短,但对于NP-hard问题而言足够了)。 2.2. 算法模型以旅行商问题(Traveling Salesman Problem, TSP)为例,在图论中称为最小Hamilton问题。 蚁群优化算法根本模型: 蚂蚁群体总是寻找最小费用可行解蚂蚁具备记忆性,存储以后门路的信息,结构可行解、评估解的品质、门路反向追踪以后状态的蚂蚁能够挪动到可行畛域任意一点每个蚂蚁赋予一个初始状态和若干个终止条件蚂蚁从初始状态到可行畛域状态,以递推形式结构解,当有一个蚂蚁满足至多一个终止条件时结构过程完结蚂蚁按某种概率决策规定挪动至畛域结点挪动后信息素轨迹被更新,过程称为“单步在线信息素更新”一旦结构出一个解,蚂蚁沿原路方向追踪,更新信息素轨迹,称为“在线提早信息素更新”2.3 算法剖析算法复杂度是O(nc\cdot n^2\cdot m)O(nc⋅n2⋅m),m为蚂蚁个数,nc为迭代次数或者搜寻次数,n为顶点数。算法运行成果受到\alpha, \beta,等参数影响,其中\beta的影响在于体现信息素轨迹的持久性,数值过小意味着信息隐没过快;数值过大容易落入部分最长处,因而其数值通常取0.7左右。 在根本的蚁群优化算法上,能够与其余启发式算法相结合,最典型的就是嵌入部分搜索算法,在各个蚂蚁造成本人的路线后,用部分调整办法(2-opt, 3-opt)加以改进,此外,与遗传算法、模拟退火和禁忌搜寻等联合也有肯定的功效。 混合蚁群优化算法次要步骤: Begin蚂蚁初始化;LOOP:\quad蚂蚁门路结构;\quad对某个蚂蚁施行部分搜索算法\quad蚂蚁轨迹更新\quad若迭代次数未到,转LOOP;输入以后最好解End点击关注,第一工夫理解华为云陈腐技术~

July 2, 2021 · 1 min · jiezi

关于算法:RepPointsV2更多的监督任务更强的性能-NIPS-2020

RepPointsV2的整体思维相似与Mask R-CNN,退出更多的工作来监督指标检测算法的学习。尽管在创新性上可能不够新鲜,但论文的通用性还是很不错的,而且将角点工作的输入用于联结推理,从比照试验上看晋升不少 起源:晓飞的算法工程笔记 公众号论文: RepPoints V2: Verification Meets Regression for Object Detection **论文地址:[https://arxiv.org/abs/[2007.08508]](https://arxiv.org/abs/2007.08...**论文代码:https://github.com/Scalsol/RepPointsV2Introduction 神经网络预测的两种办法别离为验证(verification)与回归(regression),以后的一些指标定位办法联合了这两种办法来获得SOTA性能,先对预设的anchor box进行验证从而初步定位,而后回归box的偏移值进行调整。最近一些指标定位办法仅应用回归也获得了不错的性能,比方RepPoints。 为此,论文钻研是否能够在纯回归的定位算法中退出验证工作来加强性能,具体的实现办法是在原网络上退出辅助分支(auxiliary side-branches)的模式,有监督地进行学习,优化两头特色以及最终的检测后果。 A Brief Review of a Pure Regression Method: RepPoints RepPoints应用了纯回归的办法,具体的能够看看之前发的文章,从特色图地位$p=(x,y)$开始,间接回归一组点$\mathcal{R}^{'}=\{p^{'}_i=(x^{'}_i, y^{'}_i)\}$来表白指标的空间地位,共有两个间断的步骤: $\mathcal{R}=\{p_i=(x_i, y_i)\}^{n}_{i=1}$为两头的点集,$F_p$为地位$p$的特征向量,$g_i$和$g^{'}_i$为2-d的回归函数,最终的bbox通过转化函数$\mathcal{T}$从点集$\mathcal{R}$和$\mathcal{R}^{'}$失去。只管RepPoints应用了纯回归办法,没有anchor验证步骤,其性能并不比anchor-based办法差。 Corner Point Verification 角点验证由CornerNet提出,是论文采纳的其中一种验证办法,在很多keypoint-based检测算法中有利用。角点验证给每个特色图地位预测一个分数,用来判断该特色点是否为指标的左上角点或右下角点,再预测两个偏移值来别离对角点进行调整,补救下采样导致的精度问题。 论文的实现跟原版的相似,应用corner pooling进行特征提取,应用focal loss训练角点分数预测以及smooth L1 loss训练偏移值。若GT角点位于该特色点的bin中,则认为该特色点为正样本,其它均为负样本。在计算损失时,越凑近正样本点的负样本点会依据间隔给一个高斯分数,可进行更平滑的学习。 当然,论文进行了一些改良,GT角点间接对应到FPN各层,不须要依据指标的大小决定对应哪层。 Within-box foreground verification 另一个验证工作是验证特色点是否在物体的外部,这种前景验证的信息平均地存在于物体外部区域,不像角点那样集中于物体的极点。应用一个类别热图进行训练,对于$C$个物体类别,类别热图共有$C$维特色,每个维度示意该特色点属于该类别的概率。同样点,GT间接对应到FPN各层。 须要留神的是,经典的focal loss可能会使大物体绝对于小物体失去更多的关注。为此,论文提出正则化focal loss,对于正样本点,依据其对应的物体蕴含的特色点数进行损失值的正则化,而对于负样本点,应用正样本点总数进行损失值的正则化。 A General Fusion Method 因为上述的两种验证工作都是绝对物体的部分而言的,而纯回归的指标检测办法通常是间接检测指标的整体,所以论文采纳辅助分支的模式接入,如图1所示,别离优化两头特色以及最终的检测后果。基于辅助分支,检测器能够失去以下收益: Better features by multi-task learning,辅助的验证工作可能在训练的时候提供更丰盛的监督,从而失去可能晋升检测准确率的更弱小特色。绝对于Mask R-CNN,论文的验证工作不须要额定标注。Feature enhancement for better regression,验证工作输入特色图蕴含角点地位以及前景区域,且特色图大小与回归应用的FPN特色图大小统一,所以将其进行$1\times 1$卷积(embed conv)解决后相加交融到FPN特色中。须要留神,骨干回归工作的反向流传梯度仅传到embed conv层,防止影响验证工作的学习。Joint inference by both methodologies,特色的交融隐式地帮忙指标定位,而论文也显式地利用角点验证工作的输入来进行联结推理。角点工作长于角点的定位,但不长于分辨是否为真的角点,而骨干回归工作的性能则相同。为此,论文提出调整骨干回归工作输入的预测框的角点$p_t$:$t$为角点类型(左上或右下),$q^t$为预测的角点地位,$s(q^t)$为验证分数,$r$为畛域阈值,默认为1。RepPoints v2: Fusing Verification into RepPoints 为了让RepPoints与辅助验证工作分支有更好的兼容性,显式地将点集的前两个点定义为左上角点和右下角点(explicit-corners),并依据这两个点将预测的点集转化为预测框。 ...

July 1, 2021 · 1 min · jiezi

关于算法:视频-QoE-的平衡之道揭秘网易云信-NERTC-视频质量控制系统

本文依据网易云信资深引擎工程师戚继跃在《MCtalk Live#4:视频 QoE 的均衡之道》线上直播分享整顿,文末有直播视频回顾以及 QA 整顿。 导读互联网倒退迅猛,实时通信(Real Time Communication,简称 RTC)需要一劳永逸。如何在各种简单网络服务质量 (Quality of Serverice,简称 QoS)下,以及参差不齐的硬件终端上获得最佳的视频体验品质 (Quality of Experience,简称 QoE) ,是 RTC 技术的重要一环。 本文从视频品质控制系统 (Video Quality Controller,简称 VQC)模块登程,介绍网易云信 NERTC 在晋升视频 QoE 方面做的一些工作。 VQC 在视频 QoE 中的作用视频的 QoE 次要蕴含视频的清晰度、视频晦涩度、视频延时三个方面的指标,整体上由网络 QoS、视频解决算法、VQC 独特决定: 网络 QoS:提供尽可能充沛的可应用带宽视频解决算法:在肯定的码率下,输入尽可能好的视频品质VQC: 对 QoS 负责,管制码率,保障晦涩度和延时对视频算法负责,保障性能,均衡清晰度和晦涩度 VQC 通过对视频 QoS 状态、视频算法状态的监控,输入管制信号,达到场景化的最佳 QoE 体现,包含均衡清晰度、晦涩度、延时这几个指标。明天,咱们次要分享网易云信 NERTC 上的 VQC 实现以及 QoE 调优的相干工作。 网易云信 VQC 实现网易云信的 VQC 模块局部参考了 WebRTC 的模块设计,整体构造如图中所示,次要蕴含四个监控模块和一个策略模块。输出的参数通过监控模块后失去以后的各种状态后果,而后由 VQC 策略模块决定最终输入的管制信号,管制视频 pipeline 的工作。上面,咱们具体介绍每个模块。 QualityScallerQualityScaller 模块的作用是监测以后的编码品质,次要对清晰度和编码器稳定性负责。 ...

July 1, 2021 · 2 min · jiezi

关于算法:R语言中回归和分类模型选择的性能指标

原文链接:http://tecdat.cn/?p=11334有多种性能指标来形容机器学习模型的品质。然而,问题是,对于问题正确的办法是什么?在这里,我探讨了抉择回归模型和分类模型时最重要的性能指标。请留神,此处介绍的性能指标不利用于特征选择,因为它们没有思考模型的复杂性。 回归的绩效掂量对于基于雷同函数集的模型,RMSE和R2 通常用于模型抉择。 均方误差均方误差由比拟预测y ^与察看到的后果y所得的残差平方和: 因为MSE是基于残差平方的,因而它取决于后果平方 。因而,MSE的根通常用于报告模型拟合: 均方误差的一个毛病是它不是很容易解释,因为MSE取决于预测工作,因而无奈在不同工作之间进行比拟。例如,假如一个预测工作与预计卡车的分量无关,而另一项与预计苹果的分量无关。而后,在第一个工作中,好的模型可能具备100 kg的RMSE,而在第二个工作中,好的模型可能具备0.5 kg的RMSE。因而,尽管RMSE可用于模型抉择,但很少报告,个别应用R2。 皮尔逊相关系数因为确定系数能够用皮尔逊相关系数来解释,因而咱们将首先介绍该办法。令Y ^ 示意模型预计,而Y示意察看到的后果。而后,相关系数定义为: 其中Cov(⋅,⋅)∈R是协方差,而是标准偏差。协方差定义为 其中,示意平均值。在离散设置中,能够将其计算为 这意味着,如果预测和后果与平均值的偏差类似,则它们的协方差将为正;如果与平均值具备绝对的偏差,则它们之间的协方差将为负。 标准偏差定义为 在离散设置下,能够计算为 请留神,R函数  sd 计算总体标准差,该标准差用于取得无偏估计量。如果散布较宽(均值左近的宽散布),则高;如果散布较窄(均值四周的较小散布),则小。 关联 :协方差和标准差为了更好地了解协方差,咱们创立了一个绘制测量值与均值偏差的函数:     means <- c(mean(y), mean(y.hat))     df <- data.frame("N" = c(seq\_along(y), seq\_along(y)),                      "Deviation" = c(y.deviation, y.hat.deviation),     ggplot() +         geom_segment(size = 2, data = segment.df,                     aes(x = N, xend = N, y = Y, yend = Yend, color = Contribution))  +        geom_point(data = df, alpha = 0.8, size = 2,而后,咱们生成代表三种协方差的数据:正协方差,负协方差和无协方差: # 协方差 df.low <- data.frame(Y = y, Y_Hat = y.hat)plot(y, y.hat) y.hat <- y - 2 * (y - y.mean) + noiseplot.mean.deviation(y, y.hat)# 没有协方差y.hat <- runif(N, -0.1, 0.1)   留神离群值(与均值的高偏差)对协方差的影响大于与均值靠近的值。此外,请留神,协方差靠近0示意变量之间在任何方向上仿佛都没有关联(即各个奉献项被对消了)。 因为协方差取决于数据的分布,因而具备高标准偏差的两个变量之间的相对协方差通常高于具备低方差的变量之间的相对协方差。让咱们可视化此属性:  plot(y, y.hat) df.high <- data.frame(Y = y, Y_Hat = y.hat)因而,协方差自身不能得出对于两个变量的相关性的论断。这就是为什么Pearson的相关系数通过两个变量的标准偏差将协方差归一化的起因。因为这将相关性标准化到范畴[-1,1] ,因而即便变量具备不同的方差,也能够使相关性具备可比性。值-1示意齐全负相关,值1示意齐全正相干,而值0示意没有相干。 R2确定系数确定系数R2 定义为 其中  SSres是平方的残差和,SStot是平方 的总和。对于模型抉择,R2等效于RMSE,因为对于基于雷同数据的模型,具备最小MSE的模型也将具备最大值   。 能够依据相关系数或依据解释的方差来解释确定系数。 用相关系数解释R平方通常为正,因为具备截距的模型会产生SSres <SStot的预测Y ^ ,因为模型的预测比均匀后果更靠近后果。因而,只有存在截距,确定系数就是相关系数的平方: 用解释方差解释 在平方总和合成为残差平方和回归平方和的状况下  , 而后 这意味着R2 示意模型所解释的方差比。因而,R2 = 0.7的模型将解释70% 的方差,而剩下30% 的方差无法解释。  确定系数为了取得无关R2 ,咱们定义了以下函数,利用它们能够绘制线性模型的拟合。现实模型将位于曲线的对角线上,并且将残差示意为与该对角线的偏差。     # 确保该模型被解释为GLM    pred <- model$fitted.values          plot.df <- data.frame("Prediction" = pred, "Outcome" = obs,                                 "DataSet" = "training")     if (!is.null(test.preds) && !is.null(test.labels)) {        #存储预测点        test.df <- data.frame("Prediction" = test.preds,                             "Outcome" = test.labels, "DataSet" = "test")  ggplot() +         # 绘制训练样本        geom_point(data = plot.df,             aes(x = Outcome, y = Prediction, color = DataSet))例如,比拟以下模型 只管基于的模型  df.low 具备足够的拟合度(R平方为0.584),  但df.low 不能很好地拟合数据(R平方为0.009)。 ...

June 30, 2021 · 1 min · jiezi

关于算法:LeetCode每日一题-Day-11-两数之和

大家好,我是编程熊,明天是LeetCode每日一题的第一天,明天的你比昨天更加优良啦! 题意给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你能够假如每种输出只会对应一个答案。然而,数组中同一个元素在答案里不能反复呈现。 你能够按任意程序返回答案。 样例 输出:nums = [2,7,11,15], target = 9输入:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。题解办法一设两个要找的地位上的数字为 A 和 B,则要找的就是满足 A+B=target ,因而简略的思路是,两层 for 循环遍历给的数组,第一层 for 找 A,第二层 for 找 B,如果 A 和 B 不是同一个地位的数且满足 A+B=target ,咱们就找到了答案要找的两个地位。 for (int i = 1; i <= n; i++) { for (int j = 1; j < i; j++) { // 找到满足条件的nums[i]+nums[j]=target }}工夫复杂度:O(n^2) ...

June 30, 2021 · 1 min · jiezi

关于算法:探讨COMP9444-Neural-Networks

9 COMP9444 Project 1 COMP9444 Neural Networks and Deep LearningTerm 2, 2021Project 1 - Characters, Spirals and Hidden Unit DynamicsDue: Friday 16 July, 23:59 pm Marks: 30% of final assessmentIn this assignment, you will be implementing and training various neural network models for four different tasks, and analysing theresults.You are to submit three Python files kuzu.py, rect.py and encoder.py, as well as a written report hw1.pdf (in pdf format).Provided FilesCopy the archive hw1.zip into your own filespace and unzip it. This should create a directory hw1 with the data file rect.csv,subdirectories plot and net, as well as eleven Python files kuzu.py, rect.py, encoder.py, kuzu_main.py, rect_main.py, endoder_main.py,encoder_model.py, seq_train.py, seq_plot.py, reber.py and anbn.py.Your task is to complete the skeleton files kuzu.py, rect.py, encoder.py and submit them, along with your report.Part 1: Japanese Character RecognitionFor Part 1 of the assignment you will be implementing networks to recognize handwritten Hiragana symbols. The dataset to be usedis Kuzushiji-MNIST or KMNIST for short. The paper describing the dataset is available here. It is worth reading, but in short:significant changes occurred to the language when Japan reformed their education system in 1868, and the majority of Japanesetoday cannot read texts published over 150 years ago. This paper presents a dataset of handwritten, labeled examples of this old-style script (Kuzushiji). Along with this dataset, however, they also provide a much simpler one, containing 10 Hiragana characterswith 7000 samples per class. This is the dataset we will be using.Text from 1772 (left) compared to 1900 showing the standardization of written Japanese. ...

June 30, 2021 · 10 min · jiezi

关于算法:RepPoints微软巧用变形卷积生成点集进行目标检测创意满满-ICCV-2019

RepPoints的设计思维非常奇妙,应用富含语义信息的点集来示意指标,并且巧用可变形卷积来进行实现,整体网络设计非常齐备,值得学习 起源:晓飞的算法工程笔记 公众号论文: RepPoints: Point Set Representation for Object Detection 论文地址:https://arxiv.org/abs/1904.11490论文代码:https://github.com/microsoft/RepPointsIntroduction 经典的bounding box尽管有利于计算,但没有思考指标的形态和姿势,而且从矩形区域失去的特色可能会受背景内容或其它的指标的重大影响,低质量的特色会进一步影响指标检测的性能。为了解决bounding box存在的问题,论文提出了RepPoints这种新型指标示意办法,可能进行更细粒度的定位能力以及更好的分类成果。 如图1所示,RepPoints是一个点集,可能自适应地突围指标并且蕴含部分区域的语义特色。RepPoints的训练由指标定位和指标分类独特驱动,可能束缚RepPoints紧紧地突围指标以及疏导检测器正确地分类指标。这种自适应的示意办法是可微的,可能间断地用在检测器的多个阶段中,并且不须要额定设置的anchor来生成大量的初始框。 The RepPoints Representation 如下面提到的,bounding box只是粗粒度的指标地位示意办法,只思考了指标的矩形空间,没有思考形态、姿势以及语义丰盛的部分区域,而语义丰盛的部分区域可能帮忙网络更好的定位以及特征提取。为了解决上述的毛病,RepPoints应用一组自适应的采样点示意指标: $n$为示意指标的采样点总数,论文默认设置为9。 RepPoints refinement 逐渐调整bounding box定位和特征提取是multi-stage检测器胜利的重要伎俩,对于RepPoints,调整可简略地示意为: $\{(\Delta x_k, \Delta y_k)\}^{n}_{k=1}$为预测的新采样点绝对与旧采样点的偏移值,采样点调整的尺寸都是一样的,不会像bouning box那样须要解决中心点坐标和边框长度的尺寸不统一问题。 Converting RepPoints to bounding box 为了利用bounding box的标注信息进行训练以及验证RepPoint-based检测算法的性能,应用预设的转化办法$\mathcal{T}=\mathcal{R}_P\to \mathcal{B}_P$将RepPoints转化成伪预测框,共有三种转化办法: $\mathcal{T}=\mathcal{T}_1$: Min-max function,对所有的RepPoints进行min-max操作来获取预测框$\mathcal{B}_p$$\mathcal{T}=\mathcal{T}_2$:Partial min-max function,对局部的RepPoints进行min-max操作获取预测框$\mathcal{B}_p$$\mathcal{T}=\mathcal{T}_3$:Moment-based function,通过RepPoints的均值和标准差计算中心点地位以及预测框尺寸失去预测框$\mathcal{B}_p$,尺寸通过全局共享的可学习参数$\lambda_x$和$\lambda_y$相乘失去 这些函数都是可微的,可退出检测器中进行end-to-end的训练。通过试验验证,这3个转化办法成果都不错。 RPDet: an Anchor Free Detector 论文基于RepPoints设计了anchor-free指标检测算法RPDet,蕴含两个辨认阶段。因为可变形卷积可采样多个不规则散布的点进行卷积输入,所以可变形卷积非常适宜RepPoints场景,可能依据辨认后果的反馈进行采样点的疏导。 Center point based initial object representation RPDet将中心点作为初始的指标示意,而后逐渐调整出最终的RepPoints,中心点也可认为是非凡的RepPoints。当两个指标存在于特色图同一地位时,这种基于中心点的办法通常会呈现辨认指标歧义的问题。此前的办法在同一地位设置多个预设的anchor来解决此问题,而RPDet则利用FPN来解决此问题: 不同大小的指标由不同level的特色负责辨认小物体对应level的特色图个别较大,缩小了同一物体存在同一地位的可能性 论文统计发现,当应用上述FPN束缚后,COCO数据集中仅1.1.%存在上述的问题。 ...

June 30, 2021 · 1 min · jiezi

关于算法:MCD4710-Algorithms-讲解

MCD4710 Assignment 1 (8%) MCD4710 Introduction toAlgorithms and ProgrammingObjectivesDue: Thursday, April 4, 2019, 5:00 pm - Week 6The objectives of this assignment are:To gain experience in designing algorithms for a given problem description and implementing thosealgorithms in Python 3. To demonstrate your understanding of:– how to implement algorithms for sorting in Python.– how to decompose code into functions in Python.– how to read from text files using Python.– how to manipulate lists using basic operations.– greedy approaches to problems– brute-force approaches to problems– backtracking approaches to problemsSubmission Procedure ...

June 29, 2021 · 7 min · jiezi

关于算法:拓端tecdatR语言用igraph绘制网络图可视化

原文链接:http://tecdat.cn/?p=22886这篇文章假设你曾经晓得如何用igraph库建设一个根本的网络图。 基本上,igraph容许将几种类型的输出转化为一个图形对象,能够应用plot()函数绘制,如下所示。 # 创立数据network <- graph(data , mode='undirected')# 默认网络plot(network)自定义节点性能节点能够批改几个参数,这些参数都以顶点开始。顶点是igraph语言中的一个节点。次要选项在上面的代码中解释。     vertex.frame.color = "green",            # 节点边界色彩    vertex.shape=c("circle","square"),             # "none", "circle", "square", "rectangle", "crectangle", "vrectangle", "pie", "raster", or "sphere "之一    vertex.size=c(15:24),                          # 节点的大小(默认是15)    vertex.size2=NA,                               # 节点的第二个尺寸(例如,矩形的尺寸自定义标签特色以vertex.label.结尾的选项能够设置label的特色。     vertex.label.family="Times",                   # 标签的字体(例如:"Times",     vertex.label.font=c(1,2,3,4),                  # 字体:1一般,2粗体,3斜体,4粗斜体,5符号    vertex.label.cex=c(0.5,1,1.5),                 # 字体大小(乘法系数)    vertex.label.dist=0,                           # 标签和顶点之间的间隔    vertex.label.degree=0 ,                        # 标签绝对于顶点的地位(应用)。自定义边用以edge结尾的参数管制edge。     edge.width=seq(1,10),                        # 边宽度,默认为1    edge.arrow.size=1,                           # 箭头大小,默认为1    edge.arrow.width=1,                          # 箭头宽度,默认为1    edge.lty=c("solid")                           # 线条类型,能够是0或 "空白",1或 "实线",2或 "虚线",3或 "点线"等综合使用当然,你能够将上述所有选项全副用在同一个图表上。 最受欢迎的见解 1.R语言动态图可视化:如何、创立具备精美动画的图 2.R语言生存剖析可视化剖析 3.Python数据可视化-seaborn Iris鸢尾花数据 4.r语言对布丰投针(蒲丰投针)试验进行模仿和动静 5.R语言生存剖析数据分析可视化案例 6.r语言数据可视化剖析案例:摸索brfss数据数据分析 7.R语言动静可视化:制作历史寰球平均温度的累积动静折线图动画gif视频图 8.R语言高维数据的主成分pca、 t-SNE算法降维与可视化剖析案例报告 9.python主题LDA建模和t-SNE可视化

June 29, 2021 · 1 min · jiezi

关于算法:R语言时间序列分解和异常检测方法应用案例

原文链接:http://tecdat.cn/?p=3232咱们最近有一个很棒的机会与一位客户单干,要求构建一个适宜他们需要的异样检测算法。业务指标是精确地检测各种营销数据的异常情况,这些数据包含跨多个客户和Web源数千个工夫序列的网站操作和营销反馈。异样检测算法,该算法基于工夫并可从一个到多个工夫序列进行扩大。 案例钻研咱们与许多传授数据迷信的客户单干,并利用咱们的专业知识减速业务倒退。 咱们的客户遇到了一个具备挑战性的问题:按工夫程序检测每日或每周数据的工夫序列异样。异样示意异样事件,可能是营销域中的Web流量减少或IT域中的故障服务器。无论如何,标记这些不寻常的事件确保业务顺利运行十分重要。其中一个挑战是客户解决的不是一个工夫序列,而是须要针对这些极其事件进行剖析。 anomalize这里有四个简略步骤的工作要点。 第1步:装置install.packages("tidyverse")第2步:加载library(tidyverse)第3步:收集工夫序列数据tidyverse\_cran\_downloads## # A tibble: 6,375 x 3## # Groups: package \[15\]## date count package#### 1 2017-01-01 873. tidyr## 2 2017-01-02 1840. tidyr## 3 2017-01-03 2495. tidyr## 4 2017-01-04 2906. tidyr## 5 2017-01-05 2847. tidyr## 6 2017-01-06 2756. tidyr## 7 2017-01-07 1439. tidyr## 8 2017-01-08 1556. tidyr## 9 2017-01-09 3678. tidyr## 10 2017-01-10 7086. tidyr## # ... with 6,365 more rows第4步:异样化应用性能及时发现异常情况。 异样检测工作流程其中包含: 用工夫序列合成用检测异样 异样上限和下限转换工夫序列合成第一步是应用工夫序列合成。“计数”列被合成为“察看”,“节令”,“趋势”和“残余”列。工夫序列合成的默认值是method = "stl",应用平滑器进行季节性合成。 ## # A time tibble: 6,375 x 6## # Index: date## # Groups: package \[15\]## package date observed season trend remainder#### 1 tidyr 2017-01-01 873. -2761. 5053. -1418.## 2 tidyr 2017-01-02 1840. 901. 5047. -4108.## 3 tidyr 2017-01-03 2495. 1460. 5041. -4006.## 4 tidyr 2017-01-04 2906. 1430. 5035. -3559.## 5 tidyr 2017-01-05 2847. 1239. 5029. -3421.## 6 tidyr 2017-01-06 2756. 367. 5024. -2635.## 7 tidyr 2017-01-07 1439. -2635. 5018. -944.## 8 tidyr 2017-01-08 1556. -2761. 5012. -695.## 9 tidyr 2017-01-09 3678. 901. 5006. -2229.## 10 tidyr 2017-01-10 7086. 1460. 5000. 626.## # ... with 6,365 more rowsfrequency并trend主动为您抉择。此外,能够通过输出基于工夫的周期(例如“1周”或“2个季度”)来更改抉择,能够确定有多少察看属于时间跨度。 异样检测下一步是对合成的数据执行异样检测。产生了三个新列:“remainder\_l1”(上限),“remainder\_l2”(下限)和“异样”(是/否标记)。默认办法是method = "iqr",在检测异样时疾速且绝对精确。 ## # Groups: package \[15\]## package date observed season trend remainder remainder_l1#### 1 tidyr 2017-01-01 873. -2761. 5053. -1418. -3748.## 2 tidyr 2017-01-02 1840. 901. 5047. -4108. -3748.## 3 tidyr 2017-01-03 2495. 1460. 5041. -4006. -3748.## 4 tidyr 2017-01-04 2906. 1430. 5035. -3559. -3748.## 5 tidyr 2017-01-05 2847. 1239. 5029. -3421. -3748.## 6 tidyr 2017-01-06 2756. 367. 5024. -2635. -3748.## 7 tidyr 2017-01-07 1439. -2635. 5018. -944. -3748.## 8 tidyr 2017-01-08 1556. -2761. 5012. -695. -3748.## 9 tidyr 2017-01-09 3678. 901. 5006. -2229. -3748.## 10 tidyr 2017-01-10 7086. 1460. 5000. 626. -3748.## # ... with 6,365 more rows, and 2 more variables: remainder_l2 ,## # anomaly当初尝试另一个绘图性能。它只实用于单个工夫序列。“节令”打消每周的季节性。趋势是平滑的。最初,检测最重要的异样值。 tidyverse\_cran\_downloads %>%time_decompose(count, method = "stl", frequency = "auto", trend = "auto") %>%anomalize(remainder, method = "iqr", alpha = 0.05, max_anoms = 0.2) %>%plot\_anomaly\_decomposition() + 异样上限和下限最初一步是围绕“察看”值创立上限和下限。创立了两个新列:“recomposed\_l1”(上限)和“recomposed\_l2”(下限)。 ## # A time tibble: 6,375 x 11## # Index: date## # Groups: package \[15\]## package date observed season trend remainder remainder_l1#### 1 tidyr 2017-01-01 873. -2761. 5053. -1418. -3748.## 2 tidyr 2017-01-02 1840. 901. 5047. -4108. -3748.## 3 tidyr 2017-01-03 2495. 1460. 5041. -4006. -3748.## 4 tidyr 2017-01-04 2906. 1430. 5035. -3559. -3748.## 5 tidyr 2017-01-05 2847. 1239. 5029. -3421. -3748.## 6 tidyr 2017-01-06 2756. 367. 5024. -2635. -3748.## 7 tidyr 2017-01-07 1439. -2635. 5018. -944. -3748.## 8 tidyr 2017-01-08 1556. -2761. 5012. -695. -3748.## 9 tidyr 2017-01-09 3678. 901. 5006. -2229. -3748.## 10 tidyr 2017-01-10 7086. 1460. 5000. 626. -3748.## # ... with 6,365 more rows, and 4 more variables: remainder_l2 ,## # anomaly , recomposed\_l1 , recomposed\_l2让咱们看一下“lubridate”数据。咱们能够plot\_anomalies()和设置time\_recomposed = TRUE。此性能实用于单个和分组数据。 time_decompose(count, method = "stl", frequency = "auto", trend = "auto") %>%anomalize(remainder, method = "iqr", alpha = 0.05, max_anoms = 0.2) %>%time_recompose() %>%# 绘制异样合成plot\_anomalies(time\_recomposed = TRUE) +ggtitle("Lubridate Downloads: Anomalies Detected") 预测forecast是在执行预测之前无效收集异样值的好办法。它应用基于STL的离群值检测办法。它十分快,因为最多有两次迭代来确定异样值带。 论断R软件十分无效地用于检测异样的许多传统预测工夫序列。然而,速度是一个问题,特地是在尝试扩大到多个工夫序列时。 咱们从中理解到所有软件包的最佳组合: 合成办法:咱们包含两个工夫序列合成办法:( "stl"应用Loess的传统节令合成)和"twitter"(应用两头跨度的节令合成)。异样检测办法:咱们包含两种异样检测办法:( "iqr"应用相似于3X IQR的办法forecast::tsoutliers())和"gesd"(应用Twitter应用的GESD办法AnomalyDetection)。有问题欢送下方留言!

June 29, 2021 · 1 min · jiezi

关于算法:CornerNetLiteCornerNet粗暴优化加速6倍还提点了-BMVC-2020

论文对CornerNet进行了性能优化,提出了CornerNet-Saccade和CornerNet-Squeeze两个优化的CornerNet变种,优化的伎俩具备很高的针对性和局限性,不过仍然有很多能够学习的中央 起源:晓飞的算法工程笔记 公众号论文: CornerNet-Lite: Efficient Keypoint-BasedObject Detection 论文地址:https://arxiv.org/abs/1904.08900论文代码:https://github.com/princeton-vl/CornerNet-LiteIntroduction CornerNet作为Keypoint-based指标检测算法中的经典办法,尽管有着不错的准确率,但其推理很慢,大概须要1.1s/张。尽管能够简略地放大输出图片的尺寸来减速推理,但这会极大地升高其准确率,性能比YOLOv3要差很多。为此,论文提出了两种轻量级的CornerNet变种: CornerNet-Saccade:该变种次要通过升高须要解决的像素数量来达到减速的目标,首先通过放大的图片来获取初步的指标地位,而后依据指标地位截取左近小范畴的图片区域来进行指标的检测,准确率和速度别离可达到43.2%AP以及190ms/张。CornerNet-Squeeze:该变种次要通过升高每个像素的解决次数来达到减速的目标,将SqueezeNet和MobileNets的思维融入hourglass提出新的骨干网络,准确率和速度别离可达到34.4%AP以及30ms/张。 论文也尝试了将两种变种进行联合,但发现性能反而更差了,次要因为CornerNet-Saccade须要弱小的骨干网络来生成足够精确的特色图,而CornerNet-Squeeze则是削弱了骨干网络的表达能力进行减速,所以两者的联合没有达到更好的成果。 CornerNet-Saccade CornerNet-Saccade在可能呈现指标的地位的小区域内进行指标检测,首先通过放大的残缺图片预测attention特色图,取得初步的预测框地位以及尺寸,而后在高分辨率图片上截取以该地位为核心的图片区域进行指标检测。 Estimating Object Locations CornerNet-Saccade首先获取可能呈现指标的初步地位及其尺寸: 将输出的图片放大至长边为255像素和192像素两种尺寸,小图进行零填充,使其能同时输出到网络中进行计算。对于放大的图片,预测3个attention特色图,别离用于小指标(长边<32像素)、中指标(32像素<=长边<=96像素)和大指标(长边>96像素)的地位预测,这样的辨别可能帮忙判断是否须要对其地位区域进行放大,对于小指标须要放大更大,下一部分会提到。Attention特色图来源于hourglass上采样局部的不同模块,尺寸较大的模块特色图输入用于更小的指标检测(骨干网络结构前面会介绍),对每个模块输入的特色图应用$3\times 3$Conv-ReLU模块接$1\times 1$Conv-Sigmoid模块生成Attention特色图。 在测试阶段,咱们仅解决置信度大于阈值$t=0.3$预测地位,而在训练阶段,将GT的核心在对应特色图上的地位设为正样本,其它设为负样本,应用$\alpha=2$的focal loss进行训练。 Detecting Objects 基于初步的预测框地位和尺寸,CornerNet-Saccade对放大的原图进行放大后截取以该地位为核心的$255\times 255$的区域进行指标检测。放大次要是为了保障指标足够清晰,依据预测框的初步尺寸对放大的原图先进行放大,放大比例为$s_s=4>s_m=2>s_l=1$。后续对截取区域的检测应用同样的hourglass网络,最初合并所有的检测后果进行Soft-NMS过滤。检测网络的训练和预测办法跟原版CornerNet一样,联合角点热图、embeddings向量以及偏移值。 这里有一些如图3所示的非凡状况须要特地解决: 如果检测后果呈现在截取区域的边缘,须要将其去掉,因为该截图区域很可能至蕴含了指标的一部分。如果指标挨得很近,两者的截取区域会高度重叠,网络很可能产生高度重叠的反复后果。为此,采纳相似NMS办法来解决各尺寸预测后果中过近的预测地位,从而提高效率。 另外,为了让检测过程更加高效,论文也进行了以下细节的实现: 批量进行截取区域的获取将原图保留在GPU内存中,并且间接在GPU进行原图的放大以及截取批量进行截取区域的检测Backbone Network 论文设计新的骨干网络Hourglass-54,比原CornerNet应用的Hourglass-104蕴含更少参数且层数更少。Hourglass-54总层数为54层,蕴含3个hourglass模块,在第一个模块前先下采样两次。每个模块下采样三次并逐渐减少维度(384, 384, 512),每个模块两头蕴含一个512维的残差模块,每个上采样层前面接一个残差模块。 CornerNet-Squeeze 在CornerNet中,大多数的计算工夫花在骨干网络Hourglass-104的推理。为此,CornerNet-Squeeze联合SqueezeNet和MobileNet来缩小Hourglass-104的复杂度,设计了一个新的轻量级hourglass网络。 SqueezeNet的外围在于fire模块,首先通过蕴含$1\times 1$卷积的squeeze层升高输出特色的维度,而后通过蕴含$1\times 1$卷积和$3\times 3$卷积的expand层提取特色。MobileNet则采纳$3\times 3$深度拆散卷积替换规范的$3\times 3$卷积,可能无效地缩小网络的参数。 新的模块如表1所示,除了替换残差模块,新骨干网络还做了以下的批改: 为了升高hourglass模块的最大特色图,在第一个hourglass模块前减少一个下采样模层。对应地,去除每个hourglass模块的一个下采样层。将预测模块的$3\times 3$卷积替换为$1\times 1$卷积。将最近的相邻上采样层替换为$4\times 4$的反卷积。Experiments CornerNet-Saccade比照试验。 CornerNet-Squeeze比照试验。 指标检测的性能比照。 Conclusion 论文对CornerNet进行了性能优化,提出了CornerNet-Saccade和CornerNet-Squeeze两个优化的CornerNet变种,优化的伎俩具备很高的针对性和局限性,不过仍然有很多能够学习的中央。 ...

June 29, 2021 · 1 min · jiezi

关于算法:COMP9414-Intelligence那点事儿

COMP9414: Articial IntelligenceAssignment 1: Temporal PlannerDue Date: Week 6, Friday, July 9, 11:59 p.m.Value: 15%This assignment concerns developing optimal solutions to planning problems for complex tasksinspired by the scenario of building a house, which requires a range of basic tasks to be performed,sometimes in sequence, sometimes in parallel, but where there are constraints between the tasks.We can assume that any number of basic tasks can be scheduled at the same time, provided allthe constraints between all the tasks are satised. The objective is to develop a plan to nish eachof the basic tasks as early as possible.For simplicity, let us represent time as days using integers starting at 0, i.e. days are numbered0, 1, 2, etc., up to 99. A temporal planning problem is specied as a series of basic tasks. Eachtask has a xed duration in days. In addition, there can be constraints both on single tasks andbetween two tasks, for example, a task might have to start after day 20, or one task might haveto start after another task nishes (the complete list of possible constraints is given below). Asolution to a planning problem is an assignment of a start day to each of the tasks so that allthe constraints are satised. The objective of the planner is to develop a solution for any givenplanning problem where each task nishes soonest, i.e. the solution such that the sum of the enddays over all the tasks is the lowest amongst all the possible plans that satisfy the constraints.More technically, this assignment is an example of a constraint optimization problem, a problemthat has constraints like a standard Constraint Satisfaction Problem (CSP), but also a cost as-sociated with each solution. For this assignment, you will implement a greedy algorithm to ndoptimal solutions to temporal planning problems that are specied and read in from a le. How-ever, unlike the greedy search algorithm described in the lectures on search, this greedy algorithmhas the property that it is guaranteed to nd an optimal solution for any temporal planningproblem (if a solution exists).You must use the AIPython code for constraint satisfaction and search to develop a greedy searchmethod that uses costs to guide the search, as in heuristic search (heuristic search is the same asA search where the path costs are all zero). The search will use a priority queue ordered by thevalues of the heuristic function that gives a cost for each node in the search. The heuristic functionfor use in this assignment is dened below. The nodes in this search are CSPs, i.e. each state isa CSP with variables, domains and the same constraints (and a cost estimate). The transitionsin the state space implement domain splitting subject to arc consistency (the AIPython codeimplements this). A goal state is an assignment of values to all variables that satises all theconstraints. The cost of a solution is the sum of the end days of the basic tasks in the plan.A CSP for this assignment is a set of variables representing tasks, binary constraints on pairs oftasks, and unary domain constraints on tasks. The domains for the start days of the tasks theintegers from 0 to 99, and a task duration is in days > 0. The only possible values for the startand end days of a task are integers, however note that it is possible for a task to nish after day ...

June 29, 2021 · 5 min · jiezi

关于算法:R语言聚类有效性确定最优聚类数分析IRIS鸢尾花数据和可视化

原文链接:http://tecdat.cn/?p=22879数据集概述这个数据集罕用于数据概述、可视化和聚类模型。它包含三个鸢尾花种类,每个种类有50个样本,以及一些属性。其中一个花种与其余两个花种是线性可拆散的,但其余两个花种之间不是线性可拆散的。 这个数据集的给定列是:i> Id ii> 萼片长度(Cm) iii>萼片宽度(Cm) iv> 花瓣长度(Cm) v> 花瓣宽度 (Cm) vi> 种类 让咱们把这个数据集可视化,并用kmeans进行聚类。 根本可视化IRIS数据,聚类前的根本可视化 plot(data, aes(x , y )) plot(data,geom_density(alpha=0.25) 火山图plot( iris, stat_density(aes(ymax = ..density..,  ymin = -..density.., plot(data, aes(x ),stat\_density= ..density..,  facet\_grid. ~ Species) 聚类数据 :: 办法-1# 在一个循环中进行15次的kmeans聚类分析for (i in 1:15) kmeans(Data, i)      totalwSS\[i\]<-tot# 聚类碎石图 - 应用plot函数绘制total_wss与no-of-clusters的数值。plot(x=1:15,                         # x= 类数量, 1 to 15     totalwSS,                      #每个类的total_wss值     type="b"                       # 绘制两点,并将它们连接起来 聚类数据 :: 办法-2应用聚类有效性测量指标 library(NbClust)# 设置边距为: c(bottom, left, top, right)par(mar = c(2,2,2,2))    # 依据一些指标来掂量聚类的适合性。# 默认状况下,它查看从2个聚类到15个聚类的状况 # 破费工夫 休伯特指数休伯特指数是一种确定聚类数量的图形办法。 在休伯特指数图中,咱们寻找一个显著的拐点,对应于测量值的明显增加,即休伯特指数第二差值图中的显著峰值。   D指数在D指数的图表中,咱们寻找一个重要的拐点(D指数第二差值图中的重要峰值),对应于测量值的显著减少。  ##  ## ******************************************************************* ## * 在所有指数中:                                                ## * 10 proposed 2 as the best number of clusters ## * 8 proposed 3 as the best number of clusters ## * 2 proposed 4 as the best number of clusters ## * 1 proposed 5 as the best number of clusters ## * 1 proposed 8 as the best number of clusters ## * 1 proposed 14 as the best number of clusters ## * 1 proposed 15 as the best number of clusters ## ##                    ***** 论断*****                            ##  ## * 依据少数规定,集群的最佳数量是2 ##  ##  ## *******************************************************************画一个直方图,示意各种指数对聚类数量的投票状况。 在26个指数中,大多数(10个)投票给2个聚类,8个投票给3个聚类,其余8个(26-10-8)投票给其余数量的聚类。 直方图,断点=15,因为咱们的算法是查看2到15个聚类的。  hist(Best.nc) 聚类数据 :: 办法-3卡林斯基指标相似于寻找群组间方差/群组内方差的比率。 KM(Data, 1, 10)  # 对聚类1至10的测试# sortg = TRUE:将iris对象(行)作为其组别成员的函数排序# 在热图中用色彩示意组成员类# 排序是为了产生一个更容易解释的图表。# 两个图。一个是热图,另一个是聚类数目与值(=BC/WC)。 modelData$results\[2,\]   # 针对BC/WC值的聚类 # 那么,这些数值中哪一个是最大的?BC/WC应尽可能的大which.max(modelData$results\[2,\]) 用Silhoutte图对数据进行聚类 :: 办法-4先试着2个类# 计算并返回通过应用欧氏间隔测量法计算的间隔矩阵,计算数据矩阵中各行之间的间隔。# 获取silhoutte 系数silhouette (cluster, dis) 试用8个聚类# 计算并返回通过应用欧氏间隔测量法计算的间隔矩阵,计算数据矩阵中各行之间的间隔。# 获取silhoutte 系数silhouette (cluster, dis) 剖析聚类趋势计算iris和随机数据集的霍普金统计值 # 1. 给定一个数字向量或数据框架的一列 依据其最小值和最大值生成对立的随机数  runif(length(x), min(x), (max(x)))# 2.  通过在每一列上利用函数生成随机数据apply(iris\[,-5\], 2, genx)  # 3. 将两个数据集标准化scale(iris)   # 默认, center = T, scale = T# 4. 计算数据集的霍普金斯统计数字hopkins_stat # 也能够用函数hopkins()计算。hopkins(iris) # 5. 计算随机数据集的霍普金斯统计量hopkins_stat 最受欢迎的见解 1.R语言k-Shape算法股票价格工夫序列聚类 2.R语言中不同类型的聚类办法比拟 3.R语言对用电负荷工夫序列数据进行K-medoids聚类建模和GAM回归 4.r语言鸢尾花iris数据集的档次聚类 5.Python Monte Carlo K-Means聚类实战 6.用R进行网站评论文本开掘聚类 7.用于NLP的Python:应用Keras的多标签文本LSTM神经网络 8.R语言对MNIST数据集剖析 摸索手写数字分类数据 9.R语言基于Keras的小数据集深度学习图像分类

June 28, 2021 · 1 min · jiezi

关于算法:R语言深度学习不同模型对比分析案例

原文链接:http://tecdat.cn/?p=5147原文出处:拓端数据部落公众号介绍深度学习是机器学习最近的一个趋势,模仿高度非线性的数据。在过来的几年中,深度学习在各种利用中取得了微小的发展势头(Wikipedia 2016a)。其中包含图像和语音辨认,无人驾驶汽车,自然语言解决等等。  明天,深度学习对于简直所有须要机器学习的工作都是十分无效的。然而,它特地适宜简单的分层数据。其潜在的人工神经网络模型高度非线性示意; 这些通常由多层联合非线性转换和定制架构组成。图1形容了一个深度神经网络的典型示意。 图1.深度神经网络的模型 深度学习的胜利带来了各种编程语言的各种框架和库。例子包含Caffee,Theano,Torch和Tensor Flow等等。这篇博客文章的目标是为编程语言R提供不同深度学习软件包的概述和比拟。咱们比拟不同数据集的性能和易用性。 R学习  R编程语言在统计人员和数据挖掘人员之间的易用性以及简单的可视化方面曾经取得了相当的遍及。随着深度学习时代的到来,对R的深度学习的反对一直增长,随着越来越多的软件包的推出,本节提供以下软件包提供的无关深度学习的概述:MXNetR,darch,deepnet,H2O和deepr。 首先,咱们留神到,从一个包到另一个包的底层学习算法有很大的不同。同样,表1显示了每个软件包中可用办法/体系结构的列表。 R包中可用的深度学习办法列表: MXNetR前馈神经网络,卷积神经网络(CNN) DEEPNET前馈神经网络,受限玻尔兹曼机器,深层信念网络,堆栈主动编码器 H2O前馈神经网络,深度主动编码器 包“MXNetR”MXNetR包是用C ++编写的MXNet库的接口。它蕴含前馈神经网络和卷积神经网络(CNN)(MXNetR 2016a)。它也容许人们构建定制的模型。该软件包分为两个版本:仅CPU或GPU版本。以前的CPU版本能够间接从R外部间接装置,而后者的GPU版本依赖于第三方库(如cuDNN),并须要从其源代码(MXNetR 2016b)中构建库。 前馈神经网络(多层感知器)能够在MXNetR中构建,其函数调用如下: mx.mlp(data, label, hidden\_node=1, dropout=NULL, activation=”tanh”, out\_activation=”softmax”, device=mx.ctx.default(),…)参数如下: data - 输出矩阵 label - 训练标签 hidden_node - 蕴含每个暗藏层中暗藏节点数量的向量 dropout - [0,1)中蕴含从最初一个暗藏层到输入层的失落率 activation - 蕴含激活函数名称的单个字符串或向量。有效值是{ 'relu','sigmoid','softrelu','tanh'} out_activation - 蕴含输入激活函数名称的单个字符串。有效值是{ 'rmse','sofrmax','logistic'} device- 是否训练mx.cpu(默认)或mx.gpu 函数mx.model.FeedForward.create在外部应用,mx.mpl并采纳以下参数: symbol - 神经网络的符号配置 ctx - 上下文,即设施(CPU / GPU)或设施列表(多个CPU或GPU) num.round - 训练模型的迭代次数 optimizer- 字符串(默认是'sgd') initializer - 参数的初始化计划 eval.data - 过程中应用的验证集 eval.metric - 评估后果 epoch.end.callback - 迭代完结时回调 batch.end.callback - 当一个小批量迭代完结时回调 ...

June 28, 2021 · 2 min · jiezi

关于算法:SaccadeNet使用角点特征进行twostage预测框精调-CVPR-2020

SaccadeNet基于中心点特色进行初步的指标定位,而后利用初步预测框的角点特色以及中心点特色进行预测框的精调,整体思维相似于two-stage指标检测算法,将第二阶段的预测框精调用的区域特色转化为点特色。SaccadeNet在精度和速度上都可圈可点,整体思维非常不错 起源:晓飞的算法工程笔记 公众号论文: SaccadeNet: A Fast and Accurate Object Detector 论文地址:https://arxiv.org/abs/2003.12125论文代码:https://github.com/voidrank/SaccadeNetIntroduction 在神经学中,人类在定位指标时并非固定地看着场景,而是四处寻找富含信息的区域来帮忙进行指标的定位。受此机制的启发,论文提出了SaccadeNet,可能高效地关注信息丰盛的指标关键点,从粗粒度到细粒度进行指标定位。 SaccadeNet的构造如图2所示,首先初步预测指标的核心地位以及角点地位,而后利用四个角点地位以及中心点地位的特色进行回归优化,SaccadeNet蕴含四个模块: Center Attentive Module(Center-Attn),预测指标的核心地位以及类别。Attention Transitive Module(Attn-Trans),初步预测每个核心地位对应的角点地位。Aggregation Attentive Module (Aggregation-Attn),利用核心地位以及角点地位的特色进行预测框的优化。Corner Attentive Module(Corner-Attn),用于加强骨干网络的指标边界特色。 SaccadeNet的整体思维非常不错,有点相似于two-stage的指标检测的计划,将第二阶段的预测框回归从区域特色转化成了点特色。 Center Attentive Module Center-Attn模块蕴含两个简略的卷积层,将骨干网络输入的特色图转化为中心点热图,热图可用于预测图片中所有指标的核心地位及其类别。该模块的GT跟CornerNet的设置一样,应用高斯核$e^{\frac{||X-X_k||^2}{2{\sigma}^2}}$将GT地位进行散射,$\sigma$为半径的1/3,半径由指标的大小决定,保障半径内的点可能产生IOU至多为0.3的预测框。另外,该模块的损失函数联合了focal loss: $p_{i,j}$为热图上地位$(i,j)$的分数,$y_{i,j}$为对应的GT值。 Attention Transitive Module Attn-Trans模块输入大小为$w_f\times h_f\times 2$,预测每个地位对应的预测框的宽和高,而后依据其中心点地位$(i,j)$计算其对应角点地位$(i-w_{i,j}/2, j-h_{i,j}/2)$,$(i-w_{i,j}/2, j+h_{i,j}/2)$,$(i+w_{i,j}/2, j-h_{i,j}/2)$,$(i+w_{i,j}/2, j+h_{i,j}/2)$,应用L1回归损失进行训练。基于Center-Attn模块和Attn-Trans模块,SaccadeNet可能初步预测指标的检测后果。此外,论文的源码提供在此模块额定预测中心点的偏移值,针对下采样造成的不对齐问题,该偏移值同样应用L1回归损失进行训练,这个是默认开启的。 Aggregation Attentive Module Aggregation-Attn是一个轻量级模块,用于对预测框进行精调,输入更精准的预测框。Aggregation-Attn模块从Attn-Trans模块和Center-Attn模块中获取指标的角点和中心点,并且从骨干网络输入的特色图中,应用双线性插值采样对应地位的特色,最初回归宽和高的修改值,整个模块应用L1损失进行训练。 Corner Attentive Module in Training 为了提取富含信息的角点特色,论文在训练时退出了额定的Corner-Attn分支,将骨干网络特色转化输入为四通道热图,别离对应指标的四个角点。同样地,该分支基于focal loss和高斯热图进行训练,该分支是类不可知的。此模块可迭代进行屡次精调,相似Cascade R-CNN那样,论文在试验局部也进行了比照。 Relation to existing methods 目前的基于关键点的指标检测办法可分为edge-keypoint-based detectors和center-keypoint-based detectors,SaccadeNet综合了两类办法的长处的存在。 Edge-keypoint-based detectors通常先检测角点或极点,而后通过组合办法对关键点组合进行指标的定位,但这类算法通常不能获取指标的全局信息:a) 角点特色自身就蕴含较少的指标信息,须要额定减少核心特色进行特色增强。 b) 角点通常位于背景像素上,绝对于其它关键点蕴含更少的信息。只管SaccadeNet也利用了角点进行指标预测,但SaccadeNet间接从核心关键点进行指标预测,这样可能获取指标的全局信息,并且防止了耗时的关键点组合。 ...

June 28, 2021 · 1 min · jiezi

关于算法:精读算法-回溯

如何尝试走迷宫呢?遇到障碍物就从头 “回溯” 持续摸索,这就是回溯算法的形象解释。 更形象的,能够将回溯算法了解为深度遍历一颗树,每个叶子结点都是一种计划的终态,而对某条路线的判断可能在拜访到叶子结点之前就完结。 <img width=250 src="https://z3.ax1x.com/2021/06/26/R3HBoq.png"> 相比动静布局,回溯能够解决的问题更简单,尤其是针对具备后效性的问题。 动静布局之所以无奈解决有后效性问题,起因是其 dp(i)=F(dp(j)) 其中 0<=j<i 导致的,因为 i 通过 i-1 推导,如果 i-1 的某种抉择会对 i 的抉择产生影响,那么这个推导就是有效的。 而回溯,因为每条分支判断是互相独立的,互不影响,所以即使后面的抉择具备后效性,这个后效性也能够在这条抉择线路继续影响上来,而不影响其余分支。 所以回溯是一种适用性更广的算法,但绝对的,其代价(工夫复杂度)也更高,所以只有当没有更优算法时,才该当思考回溯算法。 精读通过上述思考,回溯算法的实现思路就清晰了:递归或迭代。因为两者能够互相转换,而递归了解老本较低,因而我更偏向于递归形式解决问题。 这里必须提到一点,即工作与算法比赛思维的区别:因为递归调用堆栈深度较大,整体性能不如迭代好,且迭代写法不如递归天然,所以做算法题时,为了晋升那么一点儿性能,以及不经意间表露本人的实力,可能大家更偏向用迭代形式解决问题。 但工作中,大部分是性能不敏感场景,可维护性反而是更重要的,所以工程代码倡议用更易了解的递归形式解决问题,把堆栈调用交给计算机去做。 其实算法代码谋求更简短,能写成一行的绝不换行也是同样的情理,心愿大家能在不同环境里自在切换习惯,而不要拘泥于一种格调。 用递归解决回溯的套路不止一种,我介绍一下本人罕用的 TS 语言办法: function func(params: any[], results: any[] = []) { // 耗费 params 生成 currentResult const { currentResult, restParams } = doSomething(params); // 如果 params 还有残余,则递归耗费,直到 params 耗尽为止 if (restParams.length > 0) func(restParams, results.concat(currentResult));}这里 params 就相似迷宫前面的路线,而 results 记录了已走的最佳路线,当 params 路线耗费完了,就走出了迷宫,否则终止,让其它递归持续走。 所以回溯逻辑其实挺好写的,难在如何判断这道题应该用回溯做,以及如何优化算法复杂度。 先从两道入门题讲起,别离是电话号码的字母组合与还原 IP 地址。 ...

June 28, 2021 · 3 min · jiezi

关于算法:R语言解决最优化问题线性规划LP问题

原文链接:http://tecdat.cn/?p=3432原文出处:拓端数据部落公众号 线性规划简介优化是一种为所有可能的解决方案找到给定问题的最佳解决方案的技术。优化应用严格的数学模型来找出给定问题的最无效解决方案。 要从优化问题开始,首先确定指标十分重要。指标是绩效的量化掂量。例如:最大化利润,最小化工夫,最小化老本,最大化销售。 优化问题可分为两组线性规划(LP):它也被称为线性优化,在这个问题中,指标是在数学模型中获得最佳后果,其中指标和所有束缚是决策变量的线性函数。二次布局(QP):在二次布局中,指标是决策变量和束缚的二次函数,它们是变量的线性函数。二次函数也是一种非线性布局。对于这篇文章,解释了线性规划问题。 R中的线性优化: 个别优化问题的内置函数示例: 程序的个别参数构造是:optimizer(objective, constraints, bounds=NULL, types=NULL, maximum=FALSE)例: 定义指标函数f <- function(x) 2 * (x\[1\]-1)^2 + 5 * (x\[2\]-3)^2 + 10优化r < -  optim(c(1,1),f)查看优化是否收敛到最小r $ convergence == 0 ##如果收敛到最小值,则返回TRUE## \[1\]TRUE最优输出参数R $par## \[1\] 1.000168 3.000232指标函数的值R $value## \[1\] 10线性规划(LP)线性编程示意为: min c T  x  = min(c 1 x 1 + ... + c n x n) 束缚: A x> = B,x  \> = 0 线性规划示例: 一家公司心愿最大化两种产品A和B的利润,别离以25元和20元的价格发售。每天有1800个单位资源,产品A须要20个单位,而B须要12个单位。这两种产品都须要4分钟的生产工夫,并且可用的总工作工夫为每天8小时。每种产品的生产数量应该是多少能力使利润最大化。上述问题的指标函数是: max(销售额)=max(25 x1 + 20 x2) 其中, x1是产品A的生产数量 x2是产品B的生产数量 x 1和x 2也称为决策变量 问题中的束缚(资源和工夫): 20x1 + 12 x2 <= 1800(资源束缚) 4x1 + 4x2 <= 8 * 60(工夫束缚) 解决R中的上述问题: 因为这是一个线性规划问题,咱们将应用_lp() _函数来找到最优解。_lp() _函数的语法  是: lp(direction =“min”,objective.in,const.mat,const.dir,const.rhs)_方向_是最小化或最大化指标函数_objective.in_束缚_A_作为矩阵_const.mat给出_,方向为_const.dir_束缚b作为向量_const.rhs_插入##设置决策变量的系数objective.in < - c(25,20)##创立束缚martixconst.mat < - martix(c(20,12,4,4) )## 定义束缚time_constraint < - (8 * 60) ##找到最佳解决方案最佳< -   lp(direction ="max",objective.in,const.mat,const.dir,const.rhs)##显示x1和x2的最佳值 ## \[1\] 45 75##在最佳点查看指标函数的值 ## \[1\] 2625从下面的输入中,咱们能够看到该公司应该生产45个产品A和75个产品B,以取得2625元的销售额。 在建设指标函数和束缚之后,咱们能够扩大雷同的办法来解决R中的其余LP问题。 还有问题吗?请在上面留言!

June 25, 2021 · 1 min · jiezi

关于算法:Python蒙特卡罗Monte-Carlo模拟计算投资组合的风险价值VaR

原文链接:http://tecdat.cn/?p=22862 如何应用Python通过蒙特卡洛模仿主动计算危险值(VaR)来治理投资组合或股票的金融风险。 金融和投资组合风险管理中的VaR?VaR是 "危险价值 "的缩写,是许多公司和银行用来确定其公司外部金融风险程度的工具。危险值是为公司的投资而计算的,也可能是为查看银行或公司所治理的投资组合的危险程度。 该计算能够被认为是一种统计办法。它也能够简化为以下语句   危险值是在肯定的概率程度(置信区间)下将产生的最小损失或在肯定的概率程度下将实现的最大损失。 上图显示了一个公司在%的置信水平下可能面临的最大损失。在集体层面上,VaR能够帮忙你预测或剖析你的投资组合可能面临的最大损失。 蒙特卡洛模仿蒙特卡洛模型是Stanislaw Ulam和John Neumann的心血结晶,他们在第二次世界大战后开发了这个模型。该模型是以摩纳哥的一个赌博城市命名的,这是因为赌博中存在机会和随机性。 蒙特卡洛模仿是一个概率模型,它应用产生的随机变量与经济因素(冀望收益率、稳定率),来预测后果。该模型常常被用来计算危险和不确定性。 咱们当初将应用蒙特卡洛模仿为咱们的资产组合生成一组预测收益,这将有助于咱们找出咱们投资的危险值。 在Python中计算VaR咱们将首先通过导入所需的库和函数 #导入所有须要的库import matplotlib.pyplot as pltimport numpy as npimport pandas as pd为了咱们我的项目的目标,我思考了过来两年的 股票。  for i in range(len):  web.get_data(tickers\[i\] stocks.tail()  下一步,咱们将计算每个资产的组合权重。能够通过实现最大夏普比率来计算资产权重。 #年化收益率historical_return(stocks)#投资组合的样本方差sample_cov#夏普比率EffFro(mu, Sigma, weight_bounds=(0,1)) #正数的权重界线容许做空股票max_sharpe() #能够应用减少指标来确保单个股票的最小零权重 最大夏普比率的资产权重资产权重将被用于计算投资组合的冀望收益。 #VaR计算rx2 = \[\]#换为最大夏普比率的资产权重list(sharpe.values())当初,咱们将把投资组合的股票价格转换为累计收益,这也能够被视为本我的项目的持有期收益(HPR)。    tick  = (tick  +1).cumprod() #画出所有股票的累积/HPR的图形tick\[col\].plot()plt 当初,咱们将挑选出每个资产的最新HPR,并应用.dot()函数将收益率与计算出的资产权重相乘。 sigma = pre.std()price=price.dot(sh_wt) #计算加权值 在计算了投资组合的冀望收益和稳定率(冀望收益的标准差)后,咱们将设置并运行蒙特卡洛模仿。我应用的工夫是1440(一天中的分钟数),模仿运行20,000次。工夫步长能够依据要求扭转。我应用了一个95%的置信区间。 for j in range(20000): #20000次模仿运行(rtn/Time,sigma/ sqrt(Time),Time)plt(np.percentile(daily_returns,5) 1440分钟内一天的收益范畴 | 红色 - 最小损失 | 绿色 - 最小收益 将收益率的分布图可视化,咱们能够看到以下图表 plt.hist(returns)plt.show() 输入下限和上限的精确值,并假如咱们的投资组合价值为1000元,咱们将计算出应该保留的资金数额补救咱们的最低损失。 print(percentile( returns,5),percentile( returns,95)) VaR - 在5%的概率下,最小损失为5.7%,同样,在5%的概率下,收益能够高于15% 每天的最低损失是1.29%,概率为5%。 所得金额将标记着每天补救你的损失所需的金额。这个后果也能够解释为你的投资组合在5%的概率下将面临的最低损失。 总结下面的办法显示了咱们如何计算投资组合的危险价值(VaR)。对于应用古代投资组合实践(MPT)计算肯定数量的投资组合,有助于坚固你对投资组合分析和优化的了解。最初,VaR与蒙特卡洛模仿模型配合应用,也可用于通过股价预测损失和收益。这能够通过将产生的每日收益值与各自股票的最终价格相乘来实现。 最受欢迎的见解 1.R语言基于ARMA-GARCH-VaR模型拟合和预测实证钻研 2.R语言时变参数VAR随机模型 3.R语言预计时变VAR模型工夫序列的实证钻研 4.R语言基于ARMA-GARCH过程的VAR拟合和预测 5.GARCH(1,1),MA以及历史模拟法的VaR比拟 6.R语言用向量自回归(VAR)进行经济数据脉冲响应 7.R语言实现向量主动回归VAR模型 8.R语言随机搜寻变量抉择SSVS预计贝叶斯向量自回归(BVAR)模型 9.R语言VAR模型的不同类型的脉冲响应剖析

June 25, 2021 · 1 min · jiezi

关于算法:R语言投资组合优化求解器条件约束最优化非线性规划求解

原文链接:http://tecdat.cn/?p=22853本文将介绍R中可用于投资组合优化的不同求解器。 通用求解器通用求解器能够解决任意的非线性优化问题,但代价可能是收敛速度慢。 默认包包stats(默认装置的根本R包)提供了几个通用的优化程序。 optimize()。用于区间内的一维无约束函数优化(对于一维求根,应用uniroot())。f <- function(x) exp(-0.5\*x) \* sin(10\*pi\*x)f(0.5)  result <- optimize(f, interval = c(0, 1), tol = 0.0001)result # 绘制curve(0, 1, n = 200) optim()通用优化,有六种不同的优化办法。Nelder-Mead:绝对持重的办法(默认),不须要导数。CG:实用于高维无约束问题的低内存优化BFGS:简略的无约束的准牛顿办法L-BFGS-B:用于边界束缚问题的优化SANN: 模拟退火法Brent: 用于一维问题(实际上是调用optimize())。这个例子做了一个最小二乘法拟合:最小化   # 要拟合的数据点# 线性拟合的l2-norm误差平方 y ~ par\[1\] + par\[2\]*x#  调用求解器(初始值为c(0, 1),默认办法为 "Nelder-Mead")。optim(par = c(0, 1), f, data = dat)# 绘制线性回归图 # 与R中内置的线性回归进行比拟lm(y ~ x, data = dat) 下一个例子阐明了梯度的应用,驰名的Rosenbrock香蕉函数: ,梯度 ,无约束最小化问题 ``````#  Rosenbrock香蕉函数及其梯度banana <- function(x)    c(-400 * x\[1\] * (x\[2\] - x\[1\] * x\[1\]) - 2 * (1 - x\[1\]),       200 * (x\[2\] - x\[1\] * x\[1\])) optim(c(-1.2, 1), f_banana) optim(c(-1.2, 1), f, gr, method = "BFGS")上面的例子应用了界束缚。 最小化 束缚:  p <- length(x); sum(c(1, rep(4, p-1)) * (x - c(1, x\[-p\])^2)^2) }# 25维度束缚optim(rep(3, 25), f,lower = rep(2, 25), upper = rep(4 这个例子应用模拟退火法(用于全局优化)。 #全局最小值在-15左右res <- optim(50, f, method = "SANN") # 当初进行部分改良(通常只改良了一小部分)optim(res$par, f , method = "BFGS")  constrOptim()。应用自适应束缚算法,在线性不等式束缚下最小化一个函数(调用optim())。 ``````#  不等式束缚(ui %*% theta >= ci): x <= 0.9,  y - x > 0.1constrOptim(c(.5, 0)  nlm(): 这个函数应用牛顿式算法进行指标函数的最小化。nlm(f, c(10,10)) nlminb(): 进行无界束缚优化。.nlminb(c(-1.2, 1), f) nlminb(c(-1.2, 1), f, gr) optim根底函数optim()作为许多其余求解器的包,能够不便地应用和比拟。 # opm() 能够同时应用几个办法opm(  f , method = c("Nelder-Mead", "BFGS")) 全局优化全局优化与局部优化的理念齐全不同(全局优化求解器通常被称为随机求解器,试图防止部分最长处)。 特定类别问题的求解器如果要解决的问题属于某一类问题,如LS、LP、MILP、QP、SOCP或SDP,那么应用该类问题的专用求解器会更好。   最小二乘法 (LS)线性最小二乘法(LS)问题是将最小化,可能有界或线性束缚。 线性规划(LP)函数solveLP(),能够不便地解决以下模式的LP: 最小化: 束缚: ``````#> 加载所需软件包cvec <- c(1800, 600, 600)  # 毛利率bvec <- c(40, 90, 2500)  # 捐献量# 运行求解器solveLP(maximum = TRUE)  混合整数线性规划 (MILP)lpSolve(比linprog快得多,因为它是用C语言编码的)能够解决线性混合整数问题(可能带有一些整数束缚的LP)。  # 设置问题: #   maximize      x1 + 9 x2 + x3 #   subject to    x1 + 2 x2 + 3 x3 <= 9#               3 x1 + 2 x2 + 2 x3 <= 15 # 运行求解res <- lp("max", f, con)   # 再次运行,这次要求三个变量都是整数 lp(  int.vec = 1:3) solution 二次布局 (QP)能够不便地解决以下模式的QP 最小化:束缚:# 设置问题: #   minimize    -(0 5 0) %*% x + 1/2 x^T x#   subject to  A^T x >= b#   with b = (-8,2,0)^T#       (-4 2  0)#   A = (-3 1 -2)#       ( 0 0  1)#运行求解solve(Dmat,...) 解决具备绝对值束缚和指标函数中的绝对值的二次布局。 二阶锥布局 (SOCP)有几个包: ECOSolveR提供了一个与嵌入式COnic Solver(ECOS)的接口,这是一个驰名的、高效的、持重的C语言库,用于解决凸问题。CLSOCP提供了一个用于解决SOCP问题的一步平滑牛顿办法的实现。优化根底咱们曾经看到了两个包,它们是许多其余求解器的包。 用于凸问题、MIP和非凸问题ROI包为解决R中的优化问题提供了一个框架。它应用面向对象的办法来定义和解决R中的各种优化工作,这些工作能够来自不同的问题类别(例如,线性、二次、非线性布局问题)。 LP – 思考 LP: 最大化: ...

June 24, 2021 · 1 min · jiezi

关于算法:R语言Outliers异常值检测方法比较

原文链接:http://tecdat.cn/?p=8502辨认异样值的办法有很多种,R中有很多不同的办法。 对于异样值办法的文章联合了实践和实际。实践所有都很好,但异样值是异样值,因为它们不遵循实践。如果一种办法发现咱们都认同的异样值,那么这种办法能够认为是不错的。 异样值概述(O3)图旨在帮忙比拟和了解异样值办法的后果。 Stackloss数据集的O3图。每个变量组合(由右边的列定义)一行,找到了异样值,并将每个案例的一列标识为异样值(左边的列)。 威尔金森的算法为整个数据集找到了6个离群值(图的最上面一行)。总体而言,对于各种变量组合,发现14个案例是潜在的异样值 。  O3plot,用于比拟标识的异样值。 在OutliersO3中有四种其余办法可用, : ##    HDo    PCS    BAC adjOut    DDC    MCD##    14      4      5      0      6      5 R中还有其余异样办法,他们会给出更多不同的后果。必须审慎。离群值自身可能是乏味的,但也可能判断谬误。

June 24, 2021 · 1 min · jiezi

关于算法:高露洁悦诗风吟Benefit618大促的数字化难题都是如何解决的

简介:阿里云数据中台已造成包含会员智能经营、全域天攻智投、GMV策略模仿等在内的近10套解决方案,围绕“人”“货”“场”三大批发行业因素,一一击破品牌业务难点,记者理解到,过来一年,悦诗风吟、Benefit、高露洁、三只松鼠、九阳等多个海内外品牌曾经尝鲜利用。在昨天正式完结的2021天猫618生产季,泛滥品牌通过阿里云数据中台的系列解决方案,从精细化洞察会员需要并提供经营能力、户外广告智能投放及曝光回流、GMV拆解及全链路策略领导等三大外围场景切入,实现具体业务问题解决和业绩强势增长。 据悉,目前阿里云数据中台已造成包含会员智能经营、全域天攻智投、GMV策略模仿等在内的近10套解决方案,围绕“人”“货”“场”三大批发行业因素,一一击破品牌业务难点,记者理解到,过来一年,悦诗风吟、Benefit、高露洁、三只松鼠、九阳等多个海内外品牌曾经尝鲜利用,并取得实效。 全域天攻智投:既要做到广而告之,也要能洞察为谁所知只管短视频平台、图文社交app在近年来倒退迅猛,但不可否认的是,户外广告仍旧能凭借可交融多种展示模式,且给予肯定场景式沉迷体验,而备受品牌商青眼。 依据央视市场钻研(CTR)在往年5月公布的《CTR媒介智讯》数据显示,2021年第一季度有约34%的广告破费投放在电梯等户外媒介,且投放榜单前20位的品牌,持续保持高增长和高占比。 数据起源:CTR媒介智讯 然而,在过来的很长一段时间内,户外广告投放都还停留在“做曝光”繁多层面, “相较于其余媒体,户外广告对于特定周边市场的触达能够更加集中且高频次,同时因为视觉影响力大的个性,其对品牌心智的造就有肯定作用,”高露洁市场部品牌总监胡懿示意,“但传统户外广告的触达率大多依赖预估及第三方考察拜访,相对来说,品牌对于理论触达的状况知之较少。” 往年3月,高露洁首次使用阿里云数据中台专门面向户外广告投放场景的全域天攻智投解决方案(以下简称“全域天攻智投”),跑通“指标市场智能圈选-线下广告精准投放-曝光数据无效回流-积淀数据中长期经营”的数智化全链路。 作为阿里云数据中台在批发行业率先盘活的解决方案之一,全域天攻智投可能基于品牌既有市场数据(品牌维度/商品维度/门店维度),通过算法模型放大,计算可用于营销场景的高潜市场,并以此为根据进行线下广告位的智能选址,晋升广告投放效率。 而当广告实现投放之后,企业还能精确评估市场曝光数据,同时将外围市场数据对立回流积淀至自有市场数据资产中,不便在前期的营销链路中长线经营,也未后续营销投放打算进行校准。 近年来,短视频、播送、图文社交类营销伎俩的衰亡确实给传统户外广告行业带来了冲击,但传统户外广告在场景感营造,帮忙消费者突破原有认知,跳出信息茧房,以及对品牌来说,可能帮助品牌性情建设,并且在沟通和链接消费者下面施展的作用,其实是很难被取代的。 而全域天攻智投则是在维持户外广告这一外围竞争力的根底上,通过更为粗疏地分析企业需要,用数据思维及数智能力,帮忙厘清“给谁看-投哪里-成果量-沉淀物”,并在每个环节提供动作设置倡议,让户外广告投放的每一步价值都能够被量化,被经营。 “咱们这次次要是将全域天攻智投使用在新品酵素美白牙膏上,投放期及完结后的一段时间,相较于没有投放的时候,商超支付宝优惠券的核销率是有晋升的。”胡懿走漏。 值得注意的是,除高露洁外,目前该解决方案已被包含快消、3C数码、家装、美妆等多个行业头部品牌所复用,且效果显著。 会员智能经营:不打搅、不自觉,货品照样能找准市场如果说全域天攻智投给企业带来的价值,更多是聚焦在市场影响力和消费者认知(包含市场数据积淀及中长期经营)层面,那么阿里云数据中台推出的第二套解决方计划,会员智能经营解决方案(以下简称“会员智能经营”),则更符合批发企业在市场生产终端的场景需要。 2012年进入中国的韩国品牌悦诗风吟,在通过近10年的市场深耕之后,积攒了千万级的品牌注册会员——怎样才能更好地将会员经营起来,并为之提供更为精细化的会员服务和生产体验,始终是其一直降级的自我要求。 “从2015年开始,咱们就开始着手建设数字化会员零碎,并不断丰富包含线上和线下、自有和第三方平台的会员触达渠道,以及会员经营玩法。”悦诗风吟新批发总监Paris SHANG通知记者。 2016年,悦诗风吟与天猫平台买通会员体系,并积极探索会员积分兑换玩法;而当近年小程序衰亡,悦诗风吟也率先尝试——基于洞察到线下门店有相当体量的消费者习惯以支付宝为领取伎俩这一前景条件,悦诗风吟于2020年12月正式上线支付宝商城,在承接领取流量用以二次经营的同时,买通支付宝积分体系,成为接通支付宝积分兑换体系的首批品牌商之一,而其带来的会员拉新及经营成果也相当可观。 然而,如此量级的会员增长速度,也给悦诗风吟带来了更大的挑战。 “咱们的会员体系维度绝对还比拟繁多,所以想把会员的价值施展到最大,还须要有新的工具和产品来做能力输出,” Paris说道,“这里既包含对会员特色更精细化洞察的能力,也包含可能基于会员洞察来倒推品牌应该须要提供什么样商品的能力。” 往年3月,悦诗风吟正式引入会员智能经营,针对悦诗风吟第四代明星商品小绿瓶,通过将线下门店、线上平台在过来一年有品牌购买行为的会员数据进行建模计算,圈选其中对该单品具备高潜购买动向的局部,配以包含优惠券、满减券等在内的促销伎俩,实现基于短信、微信公众号伎俩的精准营销。   她示意,会员智能经营应用的所有数据都为品牌自有数据,“它通过算法模型设计和计算,可能让咱们更分明地晓得不同会员的品牌粘性,产品偏好,以及要害转化动因,其中既包含沉闷会员,也有长时间未再复购的沉睡会员,这是后续不同经营策略发展的根底。” 而会员智能经营的价值点还在于,可能针对繁多货品,在现有分层的会员体系中寻找最具生产后劲局部——同时,洞察影响其购买决策的关键因素,比方流动满减、津贴贴补、产品组合等。既能从现有货品为出发点,找准指标人群,又能从指标人群视角收回,辅以最无效的营销动作,最终造成精准的“人货匹配”生产闭环。 “目前,咱们对我的项目I期的各项数据都还比较满意。”Paris走漏。 GMV策略模仿:不止是大促节点全监测,还要领导每一步Action不论是聚焦会员经营还是货品经营,品牌在大促期间的指标之一就是既定GMV(商品交易总额)的达成。 LVMH P&C Data CoE Head(数据专家核心负责人)Marco Li(以下简称 Marco)早前承受媒体采访时示意,每年的天猫双11、天猫618生产季都是各家品牌的必争工夫点,如何在无限的大促流动期限内全力冲刺指标销售额,是品牌最为关怀的。 但GMV的达成在以前始终是一门“玄学”,Marco总结目前少数品牌在大促期间遇到的情况——很容易就陷入自觉堆砌促销机制、自觉减少媒介估算,陷入一直拉高营销老本但转化日益升高的泥淖,他认为呈现这一状况呈现的基本,“还在于不足对GMV达成链路的可视性。” 所以当据说阿里云数据中台可能基于品牌的指标GMV及过往营销流动体现,来反推系列营销资源调配并以“天”为单位进行GMV指标实现全链路可视化监测后,Marco毅然决然决定单干,从第一次合作意向探讨到能力落地执行,不过一个半月工夫。 2020天猫双11后期,阿里云数据中台通过对Benefit历史营销流动数据的建模,学习了影响品牌销量各种特色之后,再联合Benefit对此次天猫双11的营销估算投入、促销机制、各外围商品定价等多方面打算,对品牌GMV进行了预测,并向火线业务部门输入全套优化策略倡议。   比方,在双11期间,Benefit通过阿里云数据中台发现某商品的全域营销投入组合成果不够现实,影响了GMV体现时,于是疾速联动业务团队生成调整策略,依据GMV模拟器的倡议,对媒体渠道的抉择和投入做了优化,最终,不仅实现了GMV的指标,在其余多项数据也都有亮眼体现。 据理解,2020天猫双11期间,Benefit发展的22场品牌自有直播,曝光量较去年增长596%,品牌增粉量较2020天猫618期间增长712%;面向品牌新用户精准营销明星单品,转化率晋升将近70%;此外,定制的3款天猫双11促销套装,从跨品类套装到爆品单品套装的组合模式,信息更间接,很大水平上缩短了消费者决策门路,转化率晋升120.3%…… 而这一套解决方案,在往年618期间也为多个品牌所复用,阿里云数据中台解决方案团队成员林世茂介绍,这套解决方案尽管对品牌商的数据分析和解读能力都有肯定的要求,“但当初咱们曾经有残缺的培训资料,品牌商家参照阐明文档便可实现链路跑通;此外,咱们目前也曾经与国内几家数据能力强劲的服务商达成单干,可能为品牌即时提供帮助。” 天猫618生产季已落下帷幕,但阿里云数据中台切入各品牌理论业务场景,践行数智服务的过程还在持续。 回望这半年,包含疫情影响在内的种种不确定因素,在肯定水平上妨碍了品牌们的成长,但同时也有伽蓝团体、薇诺娜、良品铺子、benefit、红星美凯龙、联合利华等泛滥品牌通过数智化转型斩获了业绩增长实效,阿里巴巴团体副总裁、数据技术及产品部总经理朋新宇示意,过来一年是不确定性因素最多的一年,“但数智化是所有企业最具确定性的事,而数据中台则是确定性的翻新增长引擎”。 将来,阿里云数据中台还将继续对外输入数智能力,携手百万企业爆发更多商业可能。 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

June 24, 2021 · 1 min · jiezi

关于算法:R语言多元时间序列滚动预测ARIMA回归ARIMAX模型分析

原文链接:http://tecdat.cn/?p=22849当须要为数据抉择最合适的预测模型或办法时,预测者通常将可用的样本分成两局部:内样本(又称 "训练集")和保留样本(或外样本,或 "测试集")。而后,在样本中预计模型,并应用一些误差指标来评估其预测性能。 如果这样的程序只做一次,那么这被称为 "固定原点 "评估。然而,工夫序列可能蕴含离群值,一个差的模型可能比更适合的模型体现得更好。为了增强对模型的评估,咱们应用了一种叫做 "滚动原点 "的办法。 滚动原点是一种预测办法,依据这种办法,预测原点被间断更新,预测是由每个原点产生的(Tashman 2000)。这种办法容许取得几个工夫序列的预测误差,从而更好地理解模型的体现。 如何实现呢?下图形容了滚动原点的根本思维。红色单元格对应的是样本内数据,而浅灰色单元格对应的是前三步的预测。该图中工夫序列有25个观测值,预测从8个原点开始产生,从原点15开始。模型在每次迭代中都被从新预计,并产生预测后果。之后,在系列的开端减少一个新的观测值,这个过程持续进行。当没有更多的数据须要增加时,这个过程就会进行。这能够被认为是一个滚动的原点,有一个固定的保留样本量。这个程序的后果是产生了8个一到三步的预测。在此基础上,咱们能够计算出误差测量方法,并抉择体现最好的模型。 从8个原点产生预测的另一个抉择是,从原点17而不是15开始(见下图)。在这种状况下,程序始终继续到原点22,即产生最初一个三步超前预测的时候,而后持续以递加的预测范畴进行。因而,两步预测从原点23产生,只有一步预测从原点24产生。因而,咱们失去8个一步预测,7个两步预测和6个三步预测。这能够被认为是一个滚动的原点,有一个非固定的保留样本量。可用于在小样本的状况下,当咱们没有多余的观测值的时候。 最初,在上述两种状况下,咱们的样本量都在减少。然而对于某些钻研目标,咱们可能须要一个恒定的内样本。下图展现了这样一种状况。在这种状况下,在每次迭代中,咱们在系列的开端减少一个察看值,并从系列的开始删除一个察看值(深灰色单元)。 R实现:一元工夫序列ARIMA案例R实现了对任何函数的滚动原点预计,有一个预约义的调用,并返回预期的值。 咱们从一个简略的例子开始,从正态分布生成序列。 x <- rnorm(100,100,10)咱们在这个例子中应用ARIMA(0,1,1)。 predict(arima(x=data,order=c(0,1,1)),n.ahead=h调用包含两个重要元素:data和h。data指定了样本内值在咱们要应用的函数中的地位。h将通知咱们的函数,在选定的函数中指定了预测的范畴。在这个例子中,咱们应用arima(x=data,order=c(0,1,1)),产生了一个想要的ARIMA(0,1,1)模型,而后咱们应用predict(...,n. ahead=h),从该模型产生一个预测。 还须要指定函数应该返回什么。能够是条件平均数(点预测),预测区间,模型的参数。然而,依据你应用的函数返回的内容,滚动预测返回的内容有一些不同。如果它是一个矢量,那么滚动预测将产生一个矩阵(列中有每个原点的值)。如果它是一个矩阵,那么就会返回一个数组。最初,如果它是一个列表,那么将返回一个列表的列表。 咱们先从predict()函数中收集条件平均值。 咱们能够应用滚动原点从模型中产生预测后果。比方说,咱们想要三步预测和8个原点,所有其余参数的默认值。 predro(x, h , orig )该函数返回一个列表,其中蕴含咱们要求的所有数值,再加上保留样本的理论数值。咱们能够依据这些值计算一些根本的误差指标,例如,按比例的均匀绝对误差。 apply(abs(holdo - pred),1,mean) / mean(actual)  在这个例子中,咱们应用apply()函数,辨别不同的预测期,并理解模型在每个预测期的体现。以相似的形式,咱们能够评估其余一些模型的性能,并与第一个模型产生的误差进行比拟。这些数字自身并不能阐明什么,但如果咱们把这个模型的体现与另一个模型进行比拟,那么咱们就能够推断出一个模型是否比另一个模型更适宜数据。 咱们还能够绘制来自滚动原点的预测后果。 plot(Values1) 在这个例子中,来自不同起源的预测后果是互相靠近的。这是因为数据是安稳的,模型是相当稳固的。 如果咱们看一下返回的矩阵,咱们会留神到它们蕴含缺失值。 这是因为在默认状况下,保留样本被设置为十分数。内样本也被设置为十分数,这就是为什么模型在每次迭代时都会对减少的样本进行从新预计。咱们可用批改这一点。 predro(x, h , ori )请留神,return2的值与return1的值不能间接比拟,因为它们是由不同的终点生成的。这一点在咱们绘图时能够看进去。 plot(returned2) 如果你应用预测包中的函数,能够用以下形式批改调用和返回值。  "forecast(ets(data) ,level=95" c("mean","lower","upper")多元工夫序列ARIMA案例当你有一个模型和一个工夫序列时,滚动预测的是一个不便的办法。然而如果你须要将不同的模型利用于不同的工夫序列呢?咱们会须要一个循环。在这种状况下,有一个简略的办法来应用滚动预测。当初引入几个工夫序列。 对于这个例子,咱们须要一个返回值的数组。 array(NA,c(3,2,3,8))在这里,咱们将有3个工夫序列,2个模型和来自8个起源的3步超前预测。咱们的模型将被保留在一个独自的列表中。在这个例子中,咱们将有ARIMA(0,1,1)和ARIMA(1,1,0)。  list(c(0,1,1), c(1,1,0))咱们从函数中返回雷同的预测值,但咱们须要扭转调用形式,因为当初咱们必须将这两种不同的模型思考在内。 "predict(arima(data,Models\[\[i\]\])ahead=h)"咱们没有间接指定模型,而是应用列表中的第i个元素。 咱们还想从保留样本中保留理论值,以便可能计算误差。 这个数组有3个工夫序列和来自8个原点的3步超前预测的维度。 最初,咱们能够写一个循环并产生预测后果。 for(j in 1:3)  for(i in 1:2)predro(data, h , or=8)比拟两者在不同工夫序列上的体现。 exp(mean(log(apply(Holdout - Fore  / apply(abs(Holdout - Fore ))  因而,依据这些后果,能够得出结论,在咱们的三个工夫序列上,ARIMA(0,1,1)均匀来说比ARIMA(1,1,0)更精确。 线性回归和ARIMAX案例咱们的最初一个例子,咱们创立数据框并拟合线性回归。 请留神,在这个例子中,lm()函数中实现的回归依赖于数据框架,不应用预测范畴。 predict(lm(y~x1+x2+x3,xre),newdat此外,函数predict.lm()返回的是一个带有数值的矩阵,而不是一个列表。 最初调用滚动预测。 pred(y, h , ori  )在这种状况下, 咱们须要在调用的数据参数中提供因变量, 因为该函数须要提取holdout的值. predict(lm( xreg ,new =xreg "predro( $y, h , or  )plot( Return) 作为最初一个例子,咱们思考以下数据的ARIMAX模型。 并相应地批改调用。 ourCall <- "predict(arima(x=data, order=c(0,1,1), xreg=xreg\[counti,\]), n.ahead=h, newxreg=xreg\[counto,\])"思考到当初咱们解决的是ARIMA,咱们须要同时指定数据和h。此外,xreg与之前的例子不同,因为它当初不应该蕴含因变量。 如果你应用ETSX模型,调用能够简化为:  "es(x=dat, xreg, h=h"最初,下面提到的所有例子都能够并行实现,特地是当数据十分多且样本量很大时。 参考文献Davydenko, Andrey, and Robert Fildes. 2013. “Measuring Forecasting Accuracy: The Case of Judgmental Adjustments to Sku-Level Demand Forecasts.” _International Journal of Forecasting_ 29 (3). Elsevier B.V.: 510–22. https://doi.org/10.1016/j.ijforecast.2012.09.002. ...

June 23, 2021 · 1 min · jiezi

关于算法:在R语言中使用航空公司复杂网络对疫情进行建模

原文链接:http://tecdat.cn/?p=12537原文出处:拓端数据部落公众号在2014年的埃博拉疫情暴发期间,人们对该疾病蔓延的状况十分关注。咱们决定应用航空公司的航班数据探讨这个问题。 该疾病起源于利比里亚,因而想探讨该疾病如何通过航空网络流传的问题。 能够在上面看到网络的可视化。每个节点都是一个国家,每个边代表从一个国家到另一个国家的现有航线。疏忽同一国家腾飞和起飞的航班,防止凌乱。 plot(g,     vertex.size=5,     edge.arrow.size=.1,     edge.arrow.width=.1,     vertex.label=ifelse(V(g)$name %in% c('Liberia','United States'),V(g)$name,''),     vertex.label.color='black')       bty='n') 每个节点都是一个国家,每个边代表两个国家之间的现有航线。为了分明起见,未显示在同一国家/地区开始和完结的航班。 社区我应用了算法来检测国家/地区的“社区”,即彼此之间有很多航班的国家/地区集,然而与集内的国家/地区之间的航班很少。粗略地讲,该算法偏向于将同一大陆上的国家/地区分组在一起。然而,这并非总是如此。例如,因为与前殖民地的密切关系,法国与几个非洲国家被置于同一社区。该网络仿佛体现得很同质-同一大陆上的国家之间互相分割的趋势往往大于与该大陆以外国家的分割。 散布国家的水平(与一个给定国家连贯的国家数量)差别很大。美国与其余186个国家有分割,而利比里亚仅与12个国家有分割。残缺的散布如下所示。它大抵遵循幂定律。请留神,迫近是渐近的,这可能就是为什么此无限样本不可用的起因。依据水平散布,所有国家中有一半与其余27个国家相连。利比里亚远低于中位数,美国远低于中位数。 plot(dplot,type='l',xlab='Degree',ylab='Frequency',main='Degree Distribution of Airline Network',lty=1)lines((1:length(dplot))^(-.7),type='l',lty=2)legend('topright',lty=c(1,2),c('Degree Distribution','Power Law with x^(-.7)'),bty='n') 如果网络的散布大抵遵循幂定律,则咱们说它是“无标度”网络。 小世界让咱们放大并查看利比里亚的二级关系: 利比里亚的航空公司分割。塞拉利昂和科特迪瓦与美国没有间接分割,因而未显示它们的分割。 只管他们位于两个不同的社区,但利比里亚和美国之间只有两个度的间隔。所有国家通常都是这种状况。如果对于每个节点,咱们计算出它与每个其余节点之间的最短门路,则均匀最短距离将约为2(这被称为小世界景象。均匀而言,每个国家/地区与每个其余国家/地区相距2。)。例如,能够设想法国的戴高乐机场是连贯美国,东欧,亚洲和非洲国家的枢纽。这些枢纽的存在使得通过很少的转移就能够从一个国家达到另一个国家。 传染性下面的特写网络显示,如果将病毒传播到美国,可能会通过尼日利亚,加纳,摩洛哥和比利时流传。如果咱们晓得从利比里亚到这些国家以及从每个国家到美国的航班的比例,咱们能够预计埃博拉病毒在每条航线上扩散的可能性。 当然,因为许多起因,这是一个简化案例。例如,即便塞拉利昂(Sierra Leon)与美国没有间接分割,它也能够与美国有分割的其余国家/地区分割。这条航线可能有很大一部分航班起飞在美国。 还有一些流行病学参数能够扭转疾病流传的速度。例如,从感化到可检测到的症状的工夫很重要。如果被感染者直到感化一周后才呈现症状,那么就不能轻易地对其进行筛选和管制。在呈现症状之前,他们能够感化许多其他人。 疾病的最初期限也很重要。如果患者在被感化的几个小时内死亡,那么这种疾病就不会流传到很远。极其地说,思考患者在感化后一秒钟内死亡。而后,他简直没有工夫感化别人。

June 23, 2021 · 1 min · jiezi

关于算法:CSPObject-as-Point同会议论文相似思想用于人脸和行人检测-CVPR-2019

CSP将指标定义为中心点和尺寸,通过网络间接预测指标的核心和寸尺,绝对于传统的RCNN类型检测算法轻量化了不少。整体思维与Object as Points撞车了,真是英雄所见略同 起源:晓飞的算法工程笔记 公众号论文: Center and Scale Prediction: A Box-free Approachfor Pedestrian and Face Detection(High-level Semantic Feature Detection: A New Perspective for Pedestrian Detection) 论文地址:https://arxiv.org/abs/1904.02948论文代码:https://github.com/liuwei16/CSPIntroduction 目前一些钻研基于深度卷积网络进行边缘检测,取得了不错的成果。论文认为既然卷积网络可能预测边缘,那网络必然也能预测物体的中心点及其尺寸。于是论文将检测的指标定义为中心点及尺寸,提出了CSP(Center and Scale Prediction) CSP的网络结构大抵如图1所示,在骨干网络上别离预测指标中心点的地位及其对应的尺寸。这篇文章的整体思维与CenterNet(zhou. etc)基本一致,但不是剽窃,因为是同一个会议上的论文,CenterNet次要钻研惯例的指标检测,而这篇次要钻研人脸检测和行人检测。但CSP依然须要进行NMS的后处理,较CenterNet更逊色一些,但不障碍咱们进行简略地理解,包含学习论文的训练方法以及参数。 Overall architecture CSP检测算法的构造如图2所示,骨干网络由ImageNet的预训练网络截断所得,次要分为特征提取局部以及预测局部。 Feature Extraction 以ResNet-50为例,卷积层分为五个阶段,下采样比例别离为2、4、8、16和32,论文进行了以下批改与设置: 将第五阶段的卷积更换为空洞卷积,使其放弃下采样比例为16。为了交融浅层和高层特色,在Concatenate前将多阶段输入进行反卷积扩充至同一分辨率。因为不同阶段特色图的分辨率不同,应用L2-normalization将各阶段特色图的范数缩放为10。论文通过试验最终只选用了第3、第4和第5阶段的特色进行检测。给定大小为$H\times W$的输出图片,最终的concatenated特色图大小为$H/r \times W/r$,r为4时性能最好。Detection Head 在取得concatenated特色图$\Phi_{det}$后,应用简略的detection head将特色转化为检测后果。首先采纳$3\times 3$卷积层输入256维特色,而后别离应用$1\times 1$卷积层来产生偏移值预测,尺寸图和中心点热图。 Training Ground Truth 给定GT标注,可能主动地生成对应的GT中心点地位和尺寸。将GT标注对应特色图上的地位设定为中心点正样本,其它地位均为负样本。尺寸可定义为指标的高和宽,对于应用line annotation标注的行人数据集,其长宽比固定为0.41,仅需预测高度即可。对于GT尺寸,正样本地位$k$的值定义为$log(h_k)$,在其半径范畴2以内的地位也设为同样的值,其余设置为零。而若退出偏移值预测分支,该分支的GT定义为$(\frac{x_k}{r}-\lfloor \frac{x_k}{r}\rfloor, \frac{y_k}{r}-\lfloor \frac{y_k}{r} \rfloor )$。 Loss Function 对于中心点预测分支,将其视为分类工作应用穿插熵损失进行训练。为了让训练更加平滑,跟CornerNet一样定义高斯核,在特色图上对GT点进行半径范畴内的扩大: $K$为图片中的指标数,$(x_k, y_k, w_k, h_k)$为核心坐标以及宽高,方差$(\sigma^k_w, \sigma^k_h)$与指标的高和宽成比例,如果高斯区域有重叠,则取最大值。为了避免正负样本极度不均衡,退出focal loss的权值进行均衡: ...

June 23, 2021 · 1 min · jiezi

关于算法:田忌赛马算法详解

读完本文,能够去力扣解决如下题目: 870. 劣势洗牌(Medium) 田忌赛马的故事大家应该都据说过: 田忌和齐王赛马,两人的马分上中下三等,如果同等级的马对应着较量,田忌赢不了齐王。然而田忌遇到了孙膑,孙膑就教他用本人的下等马对齐王的上等马,再用本人的上等马对齐王的中等马,最初用本人的中等马对齐王的下等马,后果三局两胜,田忌赢了。 当然,这段历史也挺有意思的,那个讽齐王纳谏,自恋的不行的邹忌和田忌是同一期间的人,他俩起初就杠上了。不过这是题外话,咱们这里就打住。 以前学到田忌赛马课文的时,我就在想,如果不是三匹马较量,而是一百匹马较量,孙膑还能不能正当地安顿较量的程序,博得齐王呢? 过后没想出什么好的点子,只感觉这外面最外围问题是要尽可能让本人占便宜,让对方吃亏。总结来说就是,打得过就打,打不过就拿本人的垃圾和对方的精锐调换。 不过,我始终没具体把这个思路实现进去,直到最近刷到力扣第 870 题「劣势洗牌」,一眼就发现这是田忌赛马问题的加强版: 给你输出两个长度相等的数组nums1和nums2,请你从新组织nums1中元素的地位,使得nums1的「劣势」最大化。 如果nums1[i] > nums2[i],就是说nums1在索引i上对nums2[i]有「劣势」。劣势最大化也就是说让你从新组织nums1,尽可能多的让nums[i] > nums2[i]。 算法签名如下: int[] advantageCount(int[] nums1, int[] nums2);比方输出: nums1 = [12,24,8,32] nums2 = [13,25,32,11] 你的算法应该返回[24,32,8,12],因为这样排列nums1的话有三个元素都有「劣势」。 这就像田忌赛马的情景,nums1就是田忌的马,nums2就是齐王的马,数组中的元素就是马的战斗力,你就是孙膑,展现你真正的技术吧。 认真想想,这个题的解法还是有点错综复杂的。什么时候应该放弃抵制去送人头,什么时候应该硬刚?这外面应该有一种算法策略来最大化「劣势」。 送人头肯定是迫不得已而为之的权宜之计,否则隔壁田忌就要开语音骂你菜了。只有田忌的上等马比不过齐王的上等马时,所以才会用下等马去和齐王的上等马调换。 对于比较复杂的问题,能够尝试从非凡状况思考。 你想,谁应该去应答齐王最快的马?必定是田忌最快的那匹马,咱们简称一号选手。 如果田忌的一号选手比不过齐王的一号选手,那其余马必定是白给了,显然这种状况必定应该用田忌垫底的马去送人头,升高己方损失,保存实力,减少接下来较量的胜率。 但如果田忌的一号选手能比得过齐王的一号选手,那就和齐王硬刚好了,反正这把田忌能够赢。 你兴许说,这种状况下说不定田忌的二号选手也无能得过齐王的一号选手?如果能够的话,让二号选手去对决齐王的一号选手,不是更节约? 就好比,如果考 60 分就能过的话,何必考 61 分?每多考一分就亏一分,刚刚好卡在 60 分是最划算的。 这种节约的策略是没问题的,然而没有必要。这也是本题乏味的中央,须要绕个脑筋急转弯: 咱们暂且把田忌的一号选手称为T1,二号选手称为T2,齐王的一号选手称为Q1。 如果T2能赢Q1,你试图保留己方实力,让T2去战Q1,把T1留着是为了凑合谁? 显然,你放心齐王还有战力大于T2的马,能够让T1去凑合。 然而你认真想想,当初T2曾经是能够战败Q1的了,Q1可是齐王的最快的马耶,齐王剩下的那些马里,怎么可能还有比T2更强的马? 所以,没必要节约,最初咱们得出的策略就是: 将齐王和田忌的马依照战斗力排序,而后依照排名一一比照。如果田忌的马能赢,那就较量,如果赢不了,那就换个垫底的来送人头,保存实力。 上述思路的代码逻辑如下: int n = nums1.length;sort(nums1); // 田忌的马sort(nums2); // 齐王的马// 从最快的马开始比for (int i = n - 1; i >= 0; i--) {    if (nums1[i] > nums2[i]) {        // 比得过,跟他比    } else {        // 比不过,换个垫底的来送人头    }}依据这个思路,咱们须要对两个数组排序,然而nums2中元素的程序不能扭转,因为计算结果的程序依赖nums2的程序,所以不能间接对nums2进行排序,而是利用其余数据结构来辅助。 同时,最终的解法还用到前文 双指针技巧汇总 总结的双指针算法模板,用以解决「送人头」的状况: int[] advantageCount(int[] nums1, int[] nums2) {    int n = nums1.length;    // 给 nums2 降序排序    PriorityQueue<int[]> maxpq = new PriorityQueue<>(        (int[] pair1, int[] pair2) -> {             return pair2[1] - pair1[1];        }    );    for (int i = 0; i < n; i++) {        maxpq.offer(new int[]{i, nums2[i]});    }    // 给 nums1 升序排序    Arrays.sort(nums1);    // nums1[left] 是最小值,nums1[right] 是最大值    int left = 0, right = n - 1;    int[] res = new int[n];    while (!maxpq.isEmpty()) {        int[] pair = maxpq.poll();        // maxval 是 nums2 中的最大值,i 是对应索引        int i = pair[0], maxval = pair[1];        if (maxval < nums1[right]) {            // 如果 nums1[right] 能胜过 maxval,那就本人上            res[i] = nums1[right];            right--;        } else {            // 否则用最小值混一下,竭尽全力            res[i] = nums1[left];            left++;        }    }    return res;}算法的工夫复杂度很好剖析,也就是二叉堆和排序的复杂度O(nlogn)。 至此,这道田忌赛马的题就解决了,其代码实现上用到了双指针技巧,从最快的马开始,比得过就比,比不过就送,这样就能对任意数量的马求取一个最优的较量策略了。 好了,田忌赛马的问题没什么可说的了,有趣味无妨理解下田忌和邹忌的故事,值得思考。 查看更多优质算法文章 点击这里,手把手带你刷力扣,致力于把算法讲清楚!我的 算法教程 曾经取得 90k star,欢送点赞!

June 23, 2021 · 1 min · jiezi

关于算法:详细解说INFO151-2020T3

INFO151 2020-T3Assignment 4 (30%) 1.An example of a lost item notice from a library to a client is depicted below. You need to organise a database to record this type of information. The lost item notice is issued if the item is still on-loan after 1 year.Additional information: An item Barcode can determine the item location. There is only one type of related fees, the lost item replacement fee. A client can have multiple lost items in one notice. A client has a unique student ID number which is not shown in the example. In this exercise, there is no requirement to track the current status of any items in the table. There is no need to create a separate ClientID and Client_Name table. ...

June 23, 2021 · 3 min · jiezi

关于算法:Leetcode-2题-两数相加

题目链接https://leetcode-cn.com/probl... 题目形容给你两个非空的链表,示意两个非负的整数。它们每位数字都是依照逆序的形式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以雷同模式返回一个示意和的链表。 你能够假如除了数字0之外,这两个数都不会以0结尾。 示例如下: 输出:l1 = [2,4,3], l2 = [5,6,4] 输入:[7,0,8] 解释:342 + 465 = 807. 剖析1.参数是两个链表,两个链表可能蕴含空链表,可能两个链表长度不同,咱们应该将较长的链表遍历完,能力失去最终后果;当长链表没有遍历完,短链表遍历完时,应该补0相加; 2.当两个数字相加之后,咱们应该思考进位,再将进位加到上面两个数相加的和中; 3.返回后果是链表节点,所以咱们须要定义一个链表节点,为了不便操作,咱们能够建设一个虚构节点,指向真正的和节点,用来不便操作; 4.最初要判断进位,是否要新建节点。 代码和解释1.首先要初始化虚构节点,和节点,进位数字: ListNode preNode = new ListNode(0); ListNode currentNode = preNode; int carry = 0; 2.进入循环,进入循环的条件为,两个链表有一个不为空: 即: while(l1 != null || l2 != null) 循环外部: 须要有两个数字保留两个链表对应的数值: int num1 = l1==null?0:l1.val; int num2 = l2==null?0:l2.val;计算和(可能超过10): int sum = num1 + num2 + carry; 计算进位数值和sum余10后果: carry = sum / 10; sum = sum % 10; 而后建设新节点,让以后节点后移; ...

June 22, 2021 · 1 min · jiezi

关于算法:R语言kmeans聚类层次聚类主成分PCA降维及可视化分析鸢尾花iris数据集

原文链接:http://tecdat.cn/?p=22838 问题:应用R中的鸢尾花数据集(a)局部:k-means聚类 应用k-means聚类法将数据会聚成2组。  画一个图来显示聚类的状况 应用k-means聚类法将数据会聚成3组。 画一个图来显示聚类的状况 (b)局部:档次聚类 应用全连贯法对察看值进行聚类。 应用均匀和单连贯对观测值进行聚类。 绘制上述聚类办法的树状图。   问题01:应用R中建设的鸢尾花数据集。(a):k-means聚类 探讨和/或思考对数据进行标准化。 data.frame(  "均匀"=apply(iris\[,1:4\], 2, mean  "标准差"=apply(iris\[,1:4\], 2, sd) 在这种状况下,咱们将标准化数据,因为花瓣的宽度比其余所有的测量值小得多。 应用k-means聚类法将数据会聚成2组应用足够大的nstart,更容易失去对应最小RSS值的模型。 kmean(iris, nstart = 100)画一个图来显示聚类的状况# 绘制数据plot(iris, y = Sepal.Length, x = Sepal.Width) 为了更好地思考花瓣的长度和宽度,应用PCA首先升高维度会更适合。 #  创立模型PCA.mod<- PCA(x = iris)#把预测的组放在最初PCA$Pred <-Pred#绘制图表plot(PC, y = PC1, x = PC2, col = Pred) 为了更好地解释PCA图,思考到主成分的方差。 ## 看一下次要成分所解释的方差for (i in 1:nrow) {  pca\[\["PC"\]\]\[i\] <- paste("PC", i)} plot(data = pca,x = 主成分, y = 方差比例, group = 1) 数据中80%的方差是由前两个主成分解释的,所以这是一个相当好的数据可视化。  应用k-means聚类法将数据会聚成3组在之前的主成分图中,聚类看起来非常明显,因为实际上咱们晓得应该有三个组,咱们能够执行三个聚类的模型。 kmean(input, centers = 3, nstart = 100)# 制作数据groupPred %>% print() 画一个图来显示聚类的状况#  绘制数据plot(萼片长度,萼片宽度, col =pred) PCA图为了更好地思考花瓣的长度和宽度,应用PCA首先缩小维度是比拟适合的。 #创立模型prcomp(x = iris)#把预测的组放在最初PCADF$KMeans预测<- Pred#绘制图表plot(PCA, y = PC1, x = PC2,col = "预测\\n聚类", caption = "鸢尾花数据的前两个主成分,椭圆代表90%的失常置信度,应用K-means算法对2个类进行预测") + PCA双曲线图萼片长度~萼片宽度图的拆散度很正当,为了抉择在X、Y上应用哪些变量,咱们能够应用双曲线图。 biplot(PCA) 这个双曲线图显示,花瓣长度和萼片宽度能够解释数据中的大部分差别,更适合的图是: plot(iris, col = KM预测) 评估所有可能的组合。 iris %>%  pivot_longer()  %>% plot(col = KM预测, facet\_grid(name ~ ., scales = 'free\_y', space = 'free_y', ) + 档次聚类应用全连贯法对观测值进行聚类。能够应用全连贯法对观测值进行聚类(留神对数据进行标准化)。 hclust(dst, method = 'complete')应用均匀和单连贯对察看后果进行聚类。 hclust(dst, method = 'average')hclust(dst, method = 'single')绘制预测图当初模型曾经建设,通过指定所需的组数,对树状图切断进行划分。 #  数据iris$KMeans预测<- groupPred# 绘制数据plot(iris,col = KMeans预测)) 绘制上述聚类办法的树状图对树状图着色。 type<- c("均匀", "全", "单")for (hc in models) plot(hc, cex = 0.3)     最受欢迎的见解 1.R语言k-Shape算法股票价格工夫序列聚类 2.R语言中不同类型的聚类办法比拟 3.R语言对用电负荷工夫序列数据进行K-medoids聚类建模和GAM回归 4.r语言鸢尾花iris数据集的档次聚类 5.Python Monte Carlo K-Means聚类实战 6.用R进行网站评论文本开掘聚类 7.用于NLP的Python:应用Keras的多标签文本LSTM神经网络 8.R语言对MNIST数据集剖析 摸索手写数字分类数据 9.R语言基于Keras的小数据集深度学习图像分类

June 22, 2021 · 1 min · jiezi

关于算法:PythonR对小说进行文本挖掘和层次聚类可视化分析案例

原文链接:http://tecdat.cn/?p=5673原文出处:拓端数据部落公众号《第_二十二_条军规》是美国作家约瑟夫·海勒创作的长篇小说,该小说以第二次世界大战为背景,通过对驻扎在地中海一个名叫皮亚诺扎岛(此岛为作者所虚构)上的美国空军航行大队所产生的一系列事件的刻画,揭示了一个非理性的、无秩序的、梦魇似的荒诞世界。我喜爱整本书中语言的创造性应用和荒诞人物的互动。本文对该小说进行文本开掘和可视化。 数据集该文有大概175,000个单词,分为42章。我在网上找到了这本书的原始文本版本。 我应用正则表达式和简略字符串匹配的组合在Python中解析文本。 我shiny在R中以交互方式可视化这些数据集。 地理图 geo<- catch22\[( geo$Time > chapters\[1\]) & ( geo$Time < (chapters\[2\] + 1)),\]  paths_sub <-  paths\[( paths$time > chapters\[1\]) & ( paths$time < (chapters\[2\] + 1)),\]    # 绘图  p <- ggplot() + borders("world", colour="black", fill="lightyellow") +     ylab(NULL) + xlab(NULL) + # 仅在有条件的状况下尝试绘制地位和门路  if (nrow( geo_sub) != 0) {     p + geom\_point(data= geo\_sub, aes(x = Lon, y = Lat), size=3, colour='red') +      geom\_point(data= paths\_sub\[1,\], aes(x = lon, y = lat), size=3, colour='red') +      geom\_path(data= paths\_sub, aes(x = lon, y = lat, alpha=alpha), size=.7, 可视化映射了整本书中提到的地中海四周地位。  人物章节关系ggplot(catch22, aes(x=Chapter, y=Character, colour=cols)) +      geom_point(size=size, shape='|', alpha=0.8) +      scale\_x\_continuous(limits=c(chapters\[1\],(chapters\[2\] + 1)), expand=c(0,0), breaks=(1:42)+0.5, labels=labs) +      ylab(NULL) + xlab('Chapter') +      theme(axis.text.x = element_text(colour = "black", angle = 45, hjust = 1, vjust=1.03),            axis.text.y = element_text(colour = "black"),            axis.title.x = element_text(vjust=5),            plot.title = element_text(vjust=1)) + 该图基本上代表了书中提到不同人物的序列。  我将数据绘制为规范散点图,章节为x轴(因为它与工夫类似),人物为离散y轴。 人物共现矩阵ggplot(coloca, aes(x=Character, y=variable, alpha=alpha)) +     geom_tile(aes(fill=factor(cluster)), colour='white') +     ylab(NULL) + xlab(NULL) +    theme(axis.text.x = element_text(colour = "black", angle = 45, hjust = 1, vjust=1.03),          axis.text.y = element_text(colour = "black"),          axis.ticks.y = element_blank(),          axis.ticks.x = element_blank(),          panel.grid.minor = element_line(colour = "white", size = 1),          panel.grid.major = element_blank()) +    scale\_fill\_manual(values = cols, guide = FALSE) +    scale\_alpha\_continuous(guide = FALSE) 用于构建此可视化的数据与前一个中应用的数据完全相同,但须要进行大量的转换。  聚类为此图增加了另一个维度。在整本书上利用档次聚类,以尝试在角色中找到社群。应用AGNES算法对字符进行聚类。对不同聚类计划进行人工查看发现最优聚类,因为更频繁呈现的角色占主导地位起码。这是六个簇的树形图:     ag <- agnes(cat2\[,-1\], method="complete", stand=F)    # 从树状图中切出聚类    cluster <- cutree(ag, k=clusters) 应该留神,聚类是在整个文本上执行的,而不是章节。按聚类排序会将角色带入严密的社区,让观众也能够看到角色之间的某些交互。 特色词 ggplot( pos2, aes(Chapter, normed, colour=Word, fill=Word)) +       scale\_color\_brewer(type='qual', palette='Set1', guide = FALSE) +      scale\_fill\_brewer(type='qual', palette='Set1') +      scale\_y\_continuous(limits=c(0,y_max), expand=c(0,0)) +      ylab('Relative Word Frequency') + xlab('Chapter') + 重叠条形图更好地显示了单词所在的章节。 论断我在这个过程中学到了很多货色,无论是在应用方面,还是在shiny。

June 22, 2021 · 1 min · jiezi

关于算法:COMP-SCI-2201-7201-Algorithm-设计

COMP SCI 2201 & 7201 Algorithm and Data Structure Analysis Semester 1, 2021Minimum Spanning Trees, Euler Path, UndecidableProblems, and Turing MachinesExercise 1 Kruskal’s AlgorithmCompute a minimum spanning for the following graph using Kruskal’s algorithm. Showthe status of your partial minimum spanning tree after each edge insertion and indicatefor each edge whether it is included in the minimum spanning tree.Tutorial 5: Hashtables and Topological SortingGeneral InstructionsYou do not need to submit your solution. We will discuss the questions during theworkshop sessions in week 10.Exercise 1 Hash Tables ...

June 22, 2021 · 3 min · jiezi

关于算法:用于NLP的Python使用Keras进行深度学习文本生成

原文链接:http://tecdat.cn/?p=8448文本生成是NLP的最新利用之一。深度学习技术已用于各种文本生成工作,例如写作诗歌,生成电影脚本甚至创作音乐。然而,在本文中,咱们将看到一个非常简单的文本生成示例,其中给定输出的单词字符串,咱们将预测下一个单词。咱们将应用莎士比亚驰名小说《麦克白》的原始文本,并依据给定的一系列输出单词来预测下一个单词。 实现本文之后,您将可能应用所选的数据集执行文本生成。 导入库和数据集第一步是导入执行本文中的脚本所需的库以及数据集。以下代码导入所需的库: import numpy as npfrom keras.models import Sequential, load_modelfrom keras.layers import Dense, Embedding, LSTM, Dropout下一步是下载数据集。咱们将应用Python的NLTK库下载数据集。 download('gutenberg')您应该看到以下输入: \['austen-emma.txt', 'austen-persuasion.txt', 'austen-sense.txt', 'bible-kjv.txt', 'blake-poems.txt', 'bryant-stories.txt', 'burgess-busterbrown.txt', 'carroll-alice.txt', 'chesterton-ball.txt', 'chesterton-brown.txt', 'chesterton-thursday.txt', 'edgeworth-parents.txt', 'melville-moby_dick.txt', 'milton-paradise.txt', 'shakespeare-caesar.txt', 'shakespeare-hamlet.txt', 'shakespeare-macbeth.txt', 'whitman-leaves.txt'\]该文件蕴含小说“ Macbeth”的原始文本。要从此文件读取文本,能够应用类中的raw办法: macbeth_text = corpus.gutenberg.raw('shakespeare-macbeth.txt')让咱们从数据集中输入前500个字符: print(macbeth_text\[:500\])这是输入: Actus Primus. Scoena Prima.Thunder and Lightning. Enter three Witches.  1. When shall we three meet againe?In Thunder, Lightning, or in Raine?  2. When the Hurley-burley's done,When the Battaile's lost, and wonne   3. That will be ere the set of Sunne   1. Where the place?  2. Vpon the Heath   3. There to meet with Macbeth   1. I come, Gray-Malkin   All. Padock calls anon: faire is foule, and foule is faire,Houer through您会看到文本蕴含许多特殊字符和数字。下一步是清理数据集。 数据预处理要删除标点符号和特殊字符,咱们将定义一个名为的函数preprocess_text(): def preprocess_text(sen):    # 删除标点符号和数字    sentence = re.sub('\[^a-zA-Z\]', ' ', sen)...    return sentence.lower()preprocess_text函数承受文本字符串作为参数,并以小写模式返回清理后的文本字符串。 当初让咱们清理文本,而后再次输入前500个字符: macbeth\_text = preprocess\_text(macbeth_text)macbeth_text\[:500\]这是输入: the tragedie of macbeth by william shakespeare actus primus scoena prima thunder and lightning enter three witches when shall we three meet againe in thunder lightning or in raine when the hurley burley done when the battaile lost and wonne that will be ere the set of sunne where the place vpon the heath there to meet with macbeth come gray malkin all padock calls anon faire is foule and foule is faire houer through the fogge and filthie ayre exeunt scena secunda alarum within enter king malcom将单词转换为数字深度学习模型基于统计算法。因而,为了应用深度学习模型,咱们须要将单词转换为数字。 在本文中,咱们将应用一种非常简单的办法,将单词转换为单个整数。在将单词转换为整数之前,咱们须要将文本标记为单个单词。 以下脚本标记咱们数据集中的文本,而后输入数据集中的单词总数以及数据集中的惟一单词总数: from nltk.tokenize import word_tokenize...print('Total Words: %d' % n_words)print('Unique Words: %d' % unique_words)输入这样: Total Words: 17250Unique Words: 3436咱们的文字总共有17250个单词,其中3436个单词是惟一的。要将标记化的单词转换为数字,能够应用模块中的keras.preprocessing.text。您须要调用该fit_on_texts办法并将其传递给单词列表。将创立一个字典,其中的键将代表单词,而整数将代表字典的相应值。 看上面的脚本: from keras.preprocessing.text import Tokenizer...要拜访蕴含单词及其相应索引的字典,word_index能够应用tokenizer对象的属性: vocab\_size = len(tokenizer.word\_index) + 1word\_2\_index = tokenizer.word_index如果您查看字典的长度,它将蕴含3436个单词,这是咱们数据集中惟一单词的总数。 当初让咱们从字典中输入第500个惟一单词及其整数值。 print(macbeth\_text\_words\[500\])print(word\_2\_index\[macbeth\_text\_words\[500\]\])这是输入: comparisons1456批改数据形态LSTM承受3维格局的数据(样本数,工夫步数,每个工夫步的特色)。因为输入将是单个单词,因而输入的形态将是二维的(样本数,语料库中惟一词的数量)。 以下脚本批改了输出序列和相应输入的形态。 input_sequence = \[\]output_words = \[\]input\_seq\_length = 100for i in range(0, n\_words - input\_seq_length , 1):    in\_seq = macbeth\_text\_words\[i:i + input\_seq_length\]...在下面的脚本中,咱们申明两个空列表input_sequence和output_words。将input_seq_length被设置为100,这意味着咱们的输出序列将包含100个字。接下来,咱们执行一个循环,在第一次迭代中,将文本中前100个单词的整数值附加到input_sequence列表中。第101个单词将追加到output_words列表中。在第二次迭代过程中,从文本中的第二个单词开始到第101个单词完结的单词序列存储在input_sequence列表中,第102个单词存储在output_words数组中,依此类推。因为数据集中共有17250个单词(比单词总数少100个),因而将总共生成17150个输出序列。 当初让咱们输入input_sequence列表中第一个序列的值: print(input_sequence\[0\])输入: \[1, 869, 4, 40, 60, 1358, 1359, 408, 1360, 1361, 409, 265, 2, 870, 31, 190, 291, 76, 36, 30, 190, 327, 128, 8, 265, 870, 83, 8, 1362, 76, 1, 1363, 1364, 86, 76, 1, 1365, 354, 2, 871, 5, 34, 14, 168, 1, 292, 4, 649, 77, 1, 220, 41, 1, 872, 53, 3, 327, 12, 40, 52, 1366, 1367, 25, 1368, 873, 328, 355, 9, 410, 2, 410, 9, 355, 1369, 356, 1, 1370, 2, 874, 169, 103, 127, 411, 357, 149, 31, 51, 1371, 329, 107, 12, 358, 412, 875, 1372, 51, 20, 170, 92, 9\]让咱们通过将序列中的整数除以最大整数值来归一化输出序列。以下脚本还将输入转换为二维格局。 以下脚本输入输出和相应输入的形态。 print("X shape:", X.shape)print("y shape:", y.shape)输入: X shape: (17150, 100, 1)y shape: (17150, 3437)训练模型下一步是训练咱们的模型。对于应应用多少层和神经元来训练模型,没有硬性规定。 咱们将创立三个LSTM层,每个层具备800个神经元。最终将增加具备1个神经元的密集层,来预测下一个单词的索引,如下所示: ...model.summary()model.compile(loss='categorical_crossentropy', optimizer='adam')因为输入单词能够是3436个惟一单词之一,因而咱们的问题是多类分类问题,因而应用categorical_crossentropy损失函数。如果是二进制分类,binary_crossentropy则应用该函数。执行下面的脚本,能够看到模型摘要: Model: "sequential_1"\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_Layer (type)                 Output Shape              Param #=================================================================lstm_1 (LSTM)                (None, 100, 800)          2566400\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_lstm_2 (LSTM)                (None, 100, 800)          5123200\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_lstm_3 (LSTM)                (None, 800)               5123200\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_dense_1 (Dense)              (None, 3437)              2753037=================================================================Total params: 15,565,837Trainable params: 15,565,837Non-trainable params: 0要训练模型,咱们能够简略地应用该fit()办法。 model.fit(X, y, batch_size=64, epochs=10, verbose=1)预测为了进行预测,咱们将从input_sequence列表中随机抉择一个序列,将其转换为3维形态,而后将其传递给predict()训练模型的办法。而后将索引值传递到index_2_word字典,在字典中将单词index用作键。该index_2_word字典将返回属于被作为重点字典传入的索引词。 以下脚本随机抉择一个整数序列,而后输入相应的单词序列: ...print(' '.join(word_sequence))对于本文中的脚本,以下程序是随机抉择的: amen when they did say god blesse vs lady consider it not so deepely mac but wherefore could not pronounce amen had most need of blessing and amen stuck in my throat lady these deeds must not be thought after these wayes so it will make vs mad macb me thought heard voyce cry sleep no more macbeth does murther sleepe the innocent sleepe sleepe that knits vp the rauel sleeue of care the death of each dayes life sore labors bath balme of hurt mindes great natures second course chiefe nourisher in life feast lady what doe you meane接下来,咱们将依照上述单词程序输入接下来的100个单词: for i in range(100):    int\_sample = np.reshape(random\_seq, (1, len(random_seq), 1))    int\_sample = int\_sample / float(vocab_size)...word_sequence当初,变量蕴含咱们输出的单词序列以及接下来的100个预测单词。该word_sequence变量蕴含列表模式的单词序列。咱们能够简略地将列表中的单词连接起来取得最终的输入序列,如下所示: final_output = ""for word in word_sequence:...print(final_output)这是最终输入: amen when they did say god blesse vs lady consider it not so deepely mac but wherefore could not pronounce amen had most need of blessing and amen stuck in my throat lady these deeds must not be thought after these wayes so it will make vs mad macb me thought heard voyce cry sleep no more macbeth does murther sleepe the innocent sleepe sleepe that knits vp the rauel sleeue of care the death of each dayes life sore labors bath balme of hurt mindes great natures second course chiefe nourisher in life feast lady what doe you meane and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and论断在本文中,咱们看到了如何通过Python的Keras库应用深度学习来创立文本生成模型。

June 21, 2021 · 1 min · jiezi

关于算法:R语言用Hessianfree-NelderMead优化方法对数据进行参数估计

原文链接:http://tecdat.cn/?p=22828 次要优化办法的疾速概述咱们介绍次要的优化办法。咱们思考以下问题 . 无导数优化办法Nelder-Mead办法是最驰名的无导数办法之一,它只应用f的值来搜寻最小值。过程: 设置初始点x1,...,xn+1对点进行排序,使得f(x1)≤f(x2)≤⋯≤f(xn+1)。计算xo作为x1,...,xn的中心点。反射计算反射点xr=xo+(xo-xn+1)。如果f(x1)≤f(xr)<f(xn),那么用xr替换xn+1,转到步骤2。否则转到第5步。扩大: 如果f(xr)<f(x1),那么计算扩大点xe=xo+(xo−xn+1).如果f(xe)<f(xr),那么用xe替换xn+1,转到步骤2。否则用xr替换xn+1,转到第2步。否则转到第6步。膨胀: 计算膨胀点xc=xo+(xo-xn+1).如果f(xc)<f(xn+1),那么用xc替换xn+1,进入第2步。否则转到第7步.缩小: 对于i=2,...,n+1,计算xi=x1+(xi-x1).Nelder-Mead办法在optim中可用。默认状况下,在optim中,=1,=1/2,=2,=1/2。 Hessian-free 优化办法对于润滑的非线性函数,个别采纳以下办法:部分办法联合直线搜寻工作的计划xk+1=xk+tkdk,其中部分办法将指定方向dk,直线搜寻将指定步长tk∈R。 基准为了简化优化办法的基准,咱们创立一个函数,用于计算所有优化办法的现实预计办法。 benchfit <- function(data, distr, ...)散布的数值阐明散布的对数似然函数及其梯度理论值散布的密度由以下公式给出 其中示意函数。咱们记得(a,b)=(a)(b)/(a+b)。在这里,一组观测值(x1,...,xn)的对数似然性为 与a和b无关的梯度为 R实现咱们最小化了对数似然的相同_数_:实现了梯度的相同_数_。对数似然和它的梯度都不被输入。 function(par) loglikelihood(par, fix.arg ,...) 样本的随机生成  #(1) beta散布n <- 200x <- rbeta(n, 3, 3/4)lnl(c(3, 4), x) #测验  ``````hist(x, prob=TRUE) 拟合Beta散布定义控制参数。 list(REPORT=1, maxit=1000)用默认的优化函数调用,对于不同的优化办法,有梯度和无梯度。 fit(x, "beta", "mle", lower=0,...)  在束缚优化的状况下,咱们通过应用对数阻碍容许线性不平等束缚。 应用形态参数1和2的exp/log变换,来确保形态参数严格为正。 #取起始值的对数lapply(default(x, "beta"), log)#为新的参数化从新定义梯度exp <- function(par,...) beta(exp(par), obs) * exp(par)fit(x, distr="beta2", method="mle")  #返回到原始参数化expopt <- exp(expopt)而后,咱们提取拟合参数的值、相应的对数似然值和要最小化的函数的计数及其梯度(无论是实践上的梯度还是数值上的近似值)。 数值考察的后果结果显示在以下表格中。1)没有指定梯度的原始参数(-B代表有界版本),(2)具备(实在)梯度的原始参数(-B代表有界版本,-G代表梯度),(3)没有指定梯度的对数转换参数,(4)具备(实在)梯度的对数转换参数(-G代表梯度)。      咱们绘制了实在值(绿色)和拟合参数(红色)四周的对数似然曲面图。 llsurface(min.arg=c(0.1, 0.1), max.arg=c(7, 3),           plot.arg=c("shape1", "shape2"), nlev=25,          plot.np=50, data=x, distr="beta", back.col = FALSE)points(unconstropt\[1,"BFGS"\], unconstropt\[2,"BFGS"\], pch="+", col="red")points(3, 3/4, pch="x", col="green")  咱们能够用bootdist函数来模仿bootstrap 复制的状况。 boot(fit(x, "beta", method="mle", optim.method="BFGS")) plot(b1)abline(v=3, h=3/4, col="red", lwd=1.5) 负二项分布的演示负二项分布的对数似然函数及其梯度理论值负二项分布的p.m.f.由以下公式给出 其中示意函数。存在另一种示意办法,即=m(1-p)/p或等价于p=m/(m+)。因而,一组观测值(x1,...,xn)的对数似然性是 绝对于m和p的梯度是 R实现咱们最小化对数似然性的相同_数_:实现梯度的相同_数_。   m <- x\[1\]  p <- x\[2\]  c(sum(psigamma(obs+m)) - n\*psigamma(m) + n\*log(p),    m*n/p - sum(obs)/(1-p))  样本的随机生成#(1) 散布trueval <- c("size"=10, "prob"=3/4, "mu"=10/3)x <- rnbinom(n, trueval\["size"\], trueval\["prob"\])hist(x, prob=TRUE, ylim=c(0, .3)) 拟合负二项分布定义控制参数并做基准。 list(trace=0, REPORT=1, maxit=1000)fit(x, "nbinom", "mle", lower=0) 在束缚优化的状况下,咱们通过应用对数阻碍容许线性不平等束缚。 应用形态参数1和2的exp/log变换,来确保形态参数严格为正。 #对起始值进行变换mu <- size / (size+mu)arg <- list(size=log(start), prob=log(start/(1-start)))#为新的参数化从新定义梯度function(x)  c(exp(x\[1\]), plogis(x\[2\]))fit(x, distr="nbinom2", method="mle") #返回到原始参数化expo <- apply(expo, 2, Trans)  而后,咱们提取拟合参数的值、相应的对数似然值和要最小化的函数的计数及其梯度(无论是实践上的梯度还是数值上的近似值)。 数值考察的后果结果显示在以下表格中。1)没有指定梯度的原始参数(-B代表有界版本),(2)具备(实在)梯度的原始参数(-B代表有界版本,-G代表梯度),(3)没有指定梯度的对数转换参数,(4)具备(实在)梯度的对数转换参数(-G代表梯度)。    咱们绘制了实在值(绿色)和拟合参数(红色)四周的对数似然曲面图。 surface(min.arg=c(5, 0.3), max.arg=c(15, 1),          )points(trueval , pch="x")  咱们能够用bootdist函数来模仿bootstrap 复制的状况。 boot(fit(x, "nbinom", method="mle")  plot(b1)abline(v=trueval)  论断基于后面的两个例子,咱们察看到所有的办法都收敛到了同一个点。 然而,不同办法的函数评估(和梯度评估)的后果是十分不同的。此外,指定对数似然性的实在梯度对拟合过程没有任何帮忙,通常会减慢收敛速度。一般来说,最好的办法是规范BFGS办法或对参数进行指数变换的BFGS办法。因为指数函数是可微的,所以渐进个性仍被保留(通过Delta办法),但对于无限样本来说,这可能会产生一个小的偏差。 最受欢迎的见解 1.Matlab马尔可夫链蒙特卡罗法(MCMC)预计随机稳定率(SV,Stochastic Volatility) 模型 ...

June 21, 2021 · 1 min · jiezi

关于算法:ECON-1095-QUANTITATIVE-METHODS

ECON 1095 QUANTITATIVE METHODS IN FINANCE Assignment 1 is due Sunday 21st April and contributes 25% to the assessment of this course.INSTRUCTIONSPlease up load one (and one only) either word or pdf file. For the excel sections just take screen shots of your work to show some of your workings then cut and paste into your document. For the maths sections (if you prefer) you can hand write scan and then add to word doc. ...

June 21, 2021 · 7 min · jiezi

关于算法:AMS-315-Data-Analysis

AMS 315Data Analysis, Spring 2019First Computing Assignment The first report is due on Tuesday, March 26, but can be submitted without penalty by April 2. This report is worth 60 examination points. Please remember that there is a second project coming, so that you should finish the first project as soon as possible. Please submit your project via e-mail as instructed on the Class Blackboard. Detailed submission information is online. Project 1 has two parts. There are three files for this project. Two of the files are for part A, and one file is for part B. The files are labeled with the last four digits of your Stony Brook ID number. Part A ...

June 21, 2021 · 8 min · jiezi

关于算法:五种常用的联盟广告形式

罕用的广告模式有五种:CPC,CPM,CPA,CPS,CPT。经常混迹于网络,尤其是站长和博客,多少还是须要理解一些网络广告术语,这对网站、博客的盈利有很大帮忙。 互联网广告倒退至今,经验了从最后的短消息联盟到当初的联盟广告,广告模式也产生了微小的变动,呈现了CPC,CPM,CPA,CPS等多种形式。以后较为风行的广告模式为CPM和CPC,期中尤以CPC较为常见。 以下是几种典型的杂货广告模式:长期护理(按时长期领取)CPT-全英文的,全称Cost Per Time。CPT是一种按工夫收取费用的广告,国内许多网站都是按月收取费用的模式,这种广告模式比拟毛糙,不能保障消费者的利益。但CPT的确是十分省心的广告,能够为你的网站,博客带来稳固的支出。阿里妈的每周免费广告和门户网站的月包广告都属于CPT类广告。 CPC(点击付费)CPC—英文全名为“Cost Per Click;Cost Per Thousand Click-Through”。CPC是一种点击付费广告,按点击的广告数量免费。比方关键词广告个别都采纳这种定价模式,比拟典型的有Google联盟广告的AdSenseforContent和百度联盟广告的百度竞价广告。 CPA(按行为付费)CPA——英文全名为Cost PerAction。CPA是以广告投放的实际效果来计价的广告,即以无效问卷或无效回复的订单来计价,不限广告投放量。对网站来说,CPA计价形式存在着肯定的危险,然而如果广告投放胜利,其收益也远大于CPM计价形式。当属全国最佳CPA联盟广告CHANet成绩网。 CPM(显示免费)CPM-全英文的Cost Per ThousandImpression。CPM是一种显示付费广告,广告主只有展现其广告内容,就会领取广告费。这样的广告成果并不好,但却能为有肯定流量的网站和博客带来稳固的支出。只用CPM联盟广告并不多,太极拳联盟也有CPM广告。 CPS(按销售额付费)CPS-全英文的Cost Per Sales。CPS是按理论销售产品数计算广告费用的一种广告模式,这种广告更适宜购物网站、导购网站、网站导航等,须要准确的流量带来转化。优良网站联盟,当当网站联盟,是这类广告模式的典型代表。 网络广告状态的变动反映了广告的发展趋势,即:广告始终朝着广告主利益与成果最大化的方向倒退。身为站长,咱们要做的就是做好本人的站,抉择最好的联盟广告!

June 21, 2021 · 1 min · jiezi

关于算法:CPT212-Design-and-Analysis

PUSAT PENGAJIAN SAINS KOMPUTER(School of Computer Sciences)CPT212- Design and Analysis of AlgorithmsAssignment II: Graph AlgorithmsRelease Date: 17th May 2021 (Monday)Due Date: 20th June 2021 (Sunday) by 11:59pm sharpObjectivesThe purpose of this assignment is to test your understanding of graph representation andalgorithms. You will be required to code the actual algorithms to solve problems that havebeen discussed in class.Prerequisites Each group must consist of 3 individuals.Each group will have ONE wiki to document the functionality of their program.Each group must produce a ONE cohesive program (one source file or project file).You can choose to code in Python or C/C++ but choose only ONE.Please specify instructions on how to run your codes.You can use algorithms/codes from online sources to solve the given problems butmust be cited.Although this is a group project, a large percentage of the grade will be individualwork (70% individual, 30% group).Default GraphGo to https://randomcity.net/ and pick 5 random cities and their correspondingcountries.Go to https://www.distancefromto.net/ and find out the distance (in kilometers)between each of these cities (you can round up/round down to get whole numbers).Between each city, add only one directed, weighted edge.Example graph (you cannot use the exact same one):InstructionsChoose ONE data structure to represent the graph (E.g., adjacency list, adjacencymatrix or incidence matrix).There must be a list of common graph functions (E.g., add new edge, remove edgeetc.). These functions must be used to modify the graph.The same data structure and functions must be used by every group member.Each time the program starts up, the default graph must be already initialized andcan be modified by any of the functions. Do NOT prompt the user to key in the entiregraph.The group must write a program to solve THREE problems:a. Function 1:Check if the graph is strongly connected. If it is not, generate random edges*between random cities until the graph is strongly connected. Print theresulting graph.b. Function 2:Check if the graph has a cycle. If it is not, generate random edges* betweenrandom cities until the graph has a cycle. Print the resulting cycle.c. Function 3:Allow the user to select two vertices and compute the shortest path betweenthe vertices. If there is no path between the selected vertices, generaterandom edges* between random cities until the path exists. Print the shortestpath.d. Include an additional function to RESET the graph to default.e. Include an additional function for the user to REMOVE EDGES of theirchoice.Any new edges that are added must have the correct distance between twoparticular cities. E.g., if an edge is created between Dhaka, Bangladesh andKuala Lumpur, Malaysia, it should be around 2587km.Graphs that have been modified by any of the functions can be further modified byother functions. Do NOT reset the graph after each function. The graph will only resetif the program is closed or the reset function is used.The group can implement ANY algorithm to solve the problems.Each member must be assigned ONE problem to solve.Wiki SpecificationsPlease see appendix for tips on how to use the Wiki and some sample pages. There is nospecific format for the wiki but it MUST contain the following information:a. Font: You can use any of the default eLearn fonts. For font size, preferably use“Medium” for regular text and “Extra Large” for headings.b. Please include navigation buttons or links to go back to your main page.c. Front Page indicating division of tasks. Please include names, photos of yourmembers, matric number and the problem being solved. Suggestion:a. Member 1 – Strong connectivityb. Member 2 – Cycle detectionc. Member 3 – Shortest pathd. Description and justification of the chosen data structure and graph functions.Cite the source (website) where the functions were taken from.e. Description of how all the problems were solved. Use flowcharts to aid yourexplanations.Please do not copy/paste your source code into the reportf. Results:a. Video recording to highlight the features and functionalities of your program.Please upload the video to YouTube, Youku or any other video hostingwebsite and embed/include the link in Wiki. Please do not attach the filethere.b. You can record 3 separate videos for each problem or 1 video for the wholegroup.c. Provide a discussion (in the wiki) of the results to accompany your video.Highlight what was achieved, errors, problems, etc.g. Please refer to the grading rubrics to ensure you fulfilled all requirementsRubric (100%) – LO2/PO2Category Weak Average GoodData structure (Group) No specific data structurewas implemented(0-1%)A data structure was chosenfor the problem(2-3%)A suitable data structurewas chosen for the problemwith proper justifications(4-5%)Graph functions (Group) Minimal graph functionswere implemented, or thefunctions wereimplemented in an ad-hocmanner(0-2%)A workable set of graphfunctions wereimplemented and used in allthe searching algorithms(3-5%)An efficient set of graphfunctions wereimplemented and used in allthe searching algorithmswith proper justifications(6-10%)Algorithm description(Individual)Flowchart and discussionindicate a lack ofunderstanding of thealgorithm(0-10%)The basic idea of thealgorithm is apparent in theflowchart and discussion(11-20%)Flowchart is easy tounderstand and in-depthdiscussion available(21-30%)Algorithm results(Individual)Algorithm produces wrongresults or has errors(0-10%)Algorithm is functioningbut cannot add randomedges(11-20%)Algorithm is functioningand implemented well(21-30%)Creativity(Individual)Only basic functionality ispresent(0-2%)Additional features havebeen included into thefunction(3-5%)Additional features ormodifications have beenmade to the basic algorithm(6-10%)Overall Wiki (Group) Badly written andstructured(0-5%)Reasonable language andstructure(6-10%)Well-written and structured(11-15%)AppendixA. Editing/Creating New PagesFirst, select your group from the list:To edit the wiki, click on the “Edit” button.The main page must at least contain group information and some form of table of contents.To create a new page, just include the page name in double square brackets. Example[[This is a new page]]:The link will be red if the page is yet to be created. Click on it to create the new page.Use HTML format and click on “Create page”. The new page will be successfully created!B. Adding Navigation/HyperlinksTo add links to any pages in the wiki, all you need to do is to copy the URL of the page andcreate a hyperlink. You can view all the pages in the wiki under “Map”.Right click, copy the link address and use it to create your hyperlinks.First click on the Link button:Paste your link.Your link is now ready!C. Other FeaturesYou can leave comments on specific pages by using the “Comments” tab. Each page canhave its own comments.You can track changes by using the “History” tab. You can even restore versions.By including a YouTube URL when creating links, videos are automatically embedded(remember this is not compulsory, you can just leave the link as well)D. Other Sample Pages WX:codehelp

June 21, 2021 · 5 min · jiezi

关于算法:COMP90038-Enrolment-number

Enrolment number (student number):The University of MelbournePractice Exam PaperSchool of Computing and Information SystemsCOMP90038 Algorithms and ComplexityReading Time: 15 minutesExam Duration: 3 hoursThis paper has 11 pages, including this front page.Authorised Materials:None. This is a closed book exam. Electronic devices, including calculators and laptopcomputers are not permitted.Instructions to Invigilators:Students will provide answers in the exam paper itself. The exam paper must remain inthe exam venue and must be returned to the examiner.Instructions to Students:This is not an actual exam paper. It is a practice paper which has been put togetherto show you the format that you can expect in the exam. Many aspects of this paper’scontents do not necessarily reflect the contents of the actual exam paper: The selectionof topics, the number of questions or sub-questions, the perceived difficulty of individualquestions, and the distribution of weights are all aspects that may be different. Whenpreparing for the exam, you should cover the entire syllabus and not focus only on topicsor question types used in this practice paper. If anything, the exam paper can be expectedto be harder than this practice paper.There are 12 questions. As in the exam, you should attempt them all. Of courseyour answers must be readable. Any unreadable parts will be considered wrong. You willfind some questions easier than others; in the actual exam you should allocate your timeaccordingly. Marks are indicated for each question, adding to a total of 70.The actual exam paper will be printed single-sided, so you will have plenty of spacefor rough work on the flip sides. Only what you write inside the allocated boxes will bemarked. Page 11 is overflow space, in case you need more writing space for some question.Examiners’ use:1 2 3 4 5 6 7 8 9 10 11 12Page 2 of 11Question 1 (4 marks)A. Give the names of two stable sorting algorithms, together with their worst-case timecomplexities. Write the names and complexities in the box:B. Give the names of two unstable sorting algorithms, together with their worst-case timecomplexities. Write the names and complexities in the box:Question 2 (4 marks)We are given an array A holding n integers, for some large n. The array is sorted, and thevalues in A range from -2147483648 to 2147483647, evenly distributed. Give expressionsfor the following tasks:A. Running the insertion sort algorithm on the array A:B. Running the selection sort algorithm on the array A:C. Performing binary search for integer k which is not in A:D. Performing interpolation search for integer k not in A:[COMP90038] [please turn over . . . ]Page 3 of 11Question 3 (4 marks)For the directed graph below, list the order in which the nine nodes are visited during adepth-first (DFS) traversal, as well as the order in which they are visited during a breadth-first (BFS) traversal. As always, assume that any ties are resolved by taking nodes inalphabetical order. Write the answers in the boxes given.DFS sequence:BFS sequence:Question 4 (4 marks)Given the pattern A T G A and the textT C A T C A T C C A T G C A C A A T G A C T T Thow many character comparisons will Horspool’s algorithm make before locating the patternin the text? Write the number in the box:[COMP90038] [please turn over . . . ]Page 4 of 11Question 5 (4 marks)Assume the array A holds the keys 77, 64, 15, 43, 28, 91, 80, 32, 56 in index positions 1 to 9.Show the heap that results after application of the linear-time bottom-up heap constructionalgorithm. You may show the heap as a tree or as an array.Question 6 (4 marks)The functions A–D are defined recursively as follows (all divisions round down, to the closestinteger):A(n) = 2 A(n/3) + 2, with A(1) = 1B(n) = B(n/2) + n/2, with B(1) = 1C(n) = 512 C(n/8) + 4n2, with C(1) = 4D(n) = 4 D(n/2) + n2, with D(1) = 2In the following table, for each of the four functions, tick the most precise correct statementabout the function’s rate of growth:[COMP90038] [please turn over . . . ]Page 5 of 11Question 7 (4 marks)For each of A–D below, answer yes or no, and, in each case, briefly explain your reasoning(just a justification of your answer, rather than detailed calculations). A yes/no answer thatis not justified will not attract marks, even if correct.Question Answer/explanationQuestion 8 (6 marks)A. The box below contains a weighted undirected graph with eight nodes. Give a minimumspanning tree for the graph. You may do that either by outlining a minimum spanning treeon the graph itself, or by drawing the tree in the empty space next to the graph.B. Given a weighted graph G = 〈V,E〉, a subgraph 〈V,E ′〉 (that is, E ′ ? E) which is a treewith minimal weight is a maximum spanning tree for G.We want a transformation of the graph G so that we can run Prim’s algorithm on thetransformed graph G′, and the algorithm will find a maximum spanning tree for G.Describe such a (systematic) transformation from G to G′.[COMP90038] [please turn over . . . ]Page 7 of 11Question 9 (6 marks)Consider the function F below. The function takes as input an integer array A, and the sizen of A. The array indices run from 1 to n. The division used is integer division, that it, itrounds down to the closest smaller (or equal) integer value.In the box, give a expression for the function’s time complexity.function F(A[·], n)s← 0m← nwhile m > 0 dofor i← 1 to m dos← s+ A[i]m← m/2[COMP90038] [please turn over . . . ]Page 8 of 11Question 10 (10 marks)Using pseudo-code, give an algorithm for deleting the smallest element of a binary searchtree (a BST). Assume a non-empty binary tree T has attributes T.left , T.right , and T.rootwhich denote T ’s left sub-tree, right sub-tree, and the key of T ’s root node, respectively.You can use these tests if they seem useful: IsLeaf(T ) tests whether the binary tree T isa leaf, and IsEmpty(T ) tests whether it is empty.[COMP90038] [please turn over . . . ]Page 9 of 11Question 11 (10 marks)Consider an array A of n distinct integers (that is, all elements are different). It is knownthat A was originally sorted in ascending order, but A was then right-rotated r places, where0 < r < n. In other words, the last r elements were moved from the end of the array to thebeginning, with all other elements being pushed r positions to the right. For example, forn = 7 and r = 3, the result may look like this:[43, 46, 58, 12, 20, 29, 34]For r = 5, the result, based on the same original array, would be[29, 34, 43, 46, 58, 12, 20]You know that the given A[0..n?1] has this particular form, that is, for some r, the sequenceA[r], . . . , A[n ? 1], A[0], . . . A[r ? 1] is in ascending order, but you do not know what r is.Design an algorithm to find the largest integer in A. Full marks are given for an algorithmthat works in time O(logn); half marks are given for a solution that is correct, but lessefficient.[COMP90038] [please turn over . . . ]Page 10 of 11Question 12 (10 marks)Two programmers face the following problem. Given an array containing n random integersin random order, find the largest integer. The integers are placed in cells A[1] . . .A[n].ProgrammerX has come up with the code shown below, on the left. (In the programminglanguage used, arrays are indexed from 0, but X ’s method does not use A[0].)function X(A[·], n)max ← A[1]i← 2while i ≤ n doif A[i] > max thenmax ← A[i]i← i+ 1return maxfunction Y(A[·], n)i← nwhile i > 0 doA[0]← A[i]i← i? 1while A[0] > A[i] doi← i? 1return A[0]Programmer Y has solved the same problem differently, as shown above on the right.Compare the two solutions using three criteria: Correctness, time complexity class, and thenumber of comparisons performed. Write your analysis in the box:[COMP90038] [end of exam]Page 11 of 11Overflow spaceUse this page if you ran out of writing space in some question. Make sure to leave a pointerto this page from the relevant question. WX:codehelp ...

June 20, 2021 · 7 min · jiezi

关于算法:又被分治题卡住好几个小时用最笨的方法搞懂分治法边界告别死循环

这篇文章写于我刚学算法时。好家伙,第一道题快排就卡我老半天。然而好消息是,我算是没有得过且过,花了一早晨和一上午,把所有状况都捋了一遍、把迭代过程思考分明了。之后便感觉入了门,有了感觉,后续其余题目都没有卡我这么久过。被很简略的快排 代码运行状态: Memory Limit Exceeded 老半天。 最初推敲半天越界这事儿。总结起来一句话:避免出现 func(l, r) { ... func(l, r) ... } (递归时传递到下一层的边界值不放大)这种状况,因为这是死循环。 如何防止? 比方func(l, r) { func(l, j), func(j + 1, r)}中,j至多满足 j > r (j从r身上来到,避免 func(l, j) 是 func(l, r)),就可用。 #include <iostream>using namespace std; const int N = 1e6 + 10; int n; int q[N];void quick_sort(int q[], int l, int r){ if (l >= r) return; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i < j) { do i ++; while (q[i] < x); do j --; while (q[j] > x); if (i < j) swap(q[i], q[j]); } quick_sort(q, l, j), quick_sort(q, j + 1, r);}int main() { scanf("%d", &n); for (int i = 0; i < n; i ++) scanf("%d", &q[i]); quick_sort(q, 0, n-1); for (int i = 0; i < n; i ++) printf("%d ", q[i]); return 0; }手贱,非得写成: ...

June 19, 2021 · 4 min · jiezi

关于算法:CISC124-Transit-Optimizer-Tool

CISC124 – Winter 2019Lab Assignment 3: Mass Transit Optimizer ToolPage 1Aim – To implement a small and simple prototype tool, named MTOptimizer, to explorerough fleet size optimizations in the hourly deployment of the vehicles used in the differentpublic transportation modalities (i.e., buses, subways, trains) at the city of Toronto. The tooltakes as input: 1) a representative sample of a typical workday passenger ridership(approximately 10% of the true number of daily passengers) for all means of transportation,2) fleet descriptions and vehicle properties for each means of transportation. The tooloutputs hourly estimates of the optimal number of vehicles, for each means oftransportation, that should be in operation, in a 24-hour period, to satisfy the projecteddemand indicated by the processed sample.MTOptimizer reads passenger and vehicle data from text files containing comma-separatedvalues. It writes results generated from the processing of its input data to a text file. Theproblem description has been simplified in many ways to keep a very small number of scenariosto consider and produce rough estimates of fleet size allocations. For example, each means oftransportation is represented just by one operation route (i.e., one line of subway, or GO-train,or streetcar, or bus, or GO-bus).The two main learning objectives in this assignment are: 1) to design and implement small classhierarchies, and possibly use interfaces to delineate those classes, which could efficientlysupport the programming required in a given application domain (e.g., public transportation),and 2) to give you practice with allocating attributes and behaviours (i.e., methods) in classhierarchies that facilitate the reusing of programming code and the instantiation of objects thateffectively encapsulate data and functionality in support of applications involving multipleactors.To attain these goals, it is advisable that, before writing any code, you clearly identify anddescribe to yourself in plain language the nature, core attributes and minimum behaviours ofthe root class of the hierarchy(ies) that you will use in programming the MTOptimizer tool. It isa good idea to jot down a stylized class diagram, as shown in class. Before diagraming andanalyzing your classes, manually inspect the input data for potential patterns, nature of valuesand unusual or extreme values. This will greatly help you shape the class hierarchy(ies) you willcreate to support your programming and handle exceptions.General DescriptionAs a software developer with the Toronto Transit Commission (TTC), you have been tasked towrite a software prototype, in Java, named MTOptimizer. This tool would allow the analysts atthe TTC to process daily passenger ridership data and, as a result, create in-advance hourlybased“in-operation-vehicle fleet sizes” for the different means of transportation supervised bythis organization.MTOptimizer reads in the following text files:1) File “ridership.txt” contains about 65,000 lines, which represent a 24-hour sample (00:00hours to 24:00 hours) of the ridership for all means of transportation in the city of Toronto,during a typical working day. Each line represents the recorded data for one passenger,CISC124 – Winter 2019Lab Assignment 3: Mass Transit Optimizer ToolPage 2riding on one of the means of transportation, timestamped at a given hour of the day (i.e.,hours 1-24). The list of comma-separated values included on each line is the following: Person Identification – A 7-digit card identification number for a rider using a monthlypass, or a 16-character ticket code (whose format is: Tyyyymmddnnnnnnn, whereyyyy=year, mm=month, dd=day, nnnnnnn=unique 7-digit number) for a rider using a10-trip discount ticket, or a “*” for a casual rider using tokens or paying cash fares.Transportation Modality – A one-character field indicating the means of transportationused by the rider, with values as follows: (S) Subway, (G) GO-train, (X) Streetcars, (C)City bus, (D) GO-Bus. Age Group – A 1-character field indicating whether the rider is a child (C), an adult (A),or a senior citizen (S). Hour of the day – A 1- or 2-digit number (1 – 24) indicating the hour of the day whenthe rider used the specified transportation modality. Date – The date when the rider used the specified transportation modality in the formatyyyymmdd, where yyyy is 2018 or 2019, mm is in the range 01-12, and dd is in therange 00-31.2) File “subways.txt” describes the fleet of trains on the Toronto subway system. Each linerepresents a single train. The comma-separated values for each line are: Unit Number – A unique 4-digit number that identifies a vehicle in the TTC’sComputerized Information System. Train Identification – A 3-digit number in the range 100-999. Number of Cars– A 1-digit indicating the number of cars per train. Passengers per Car – A 2-digit number indicating a car’s maximum passenger capacity. Operational Status – A 1-character field indicating whether train is available or not onthe date indicated in the Operation Date field: Available (A), Unavailable (U), Unknown(*). Operational Date – Date when the train operational status is valid, in the formatyyyymmdd.3) File “gotrains.txt” describes the fleet of GO-trains to Toronto’s suburban areas. Each linerepresents a single train. The comma-separated values for each line are: Unit Number – A unique 4-digit number that identifies a vehicle in the TTC’sComputerized Information System. Train Identification – A 4-character string with the format Gnnn, where nnn is in therange 100-999. Train Capacity– A 2- to 3-digit number indicating the train’s maximum passengercapacity.CISC124 – Winter 2019Lab Assignment 3: Mass Transit Optimizer ToolPage 34) File “streetcars.txt” describes the fleet of streetcars in Toronto’s downtown area. Each linerepresents a single streetcar. The comma-separated values for each line are: Unit Number – A unique 4-digit number that identifies a vehicle in the TTC’sComputerized Information System. Streetcar Identification – A 5-character string with the format SCnnn, where nnn is inthe range 100-999. Type – A 1-character field indicating a single (S) or double (D) section streetcar. (Note:each section of the street car can accommodate a maximum of 40 passengers).5) File “buses.txt” describes the fleet of buses in Toronto’s metropolitan area. Each linerepresents a single bus. The comma-separated values for each line are: Unit Number – A unique 4-digit number that identifies a vehicle in the TTC’sComputerized Information System. Bus Identification – A 5-character string with the format MBnnn, where nnn is in therange 100-999. Capacity – A 2-digit number indicating the maximum number of passengers that the buscan accommodate.6) File “gobuses.txt” describes the fleet of buses to Toronto’s suburban areas. Each linerepresents a single bus. The comma-separated values for each line are: Unit Number – A unique 4-digit number that identifies a vehicle in the TTC’sComputerized Information System. Bus Identification – A 5-character string with the format GBnnn, where nnn is in therange 100-999. Capacity – A 2-digit number indicating the maximum number of passengers that the buscan accommodate. ...

June 19, 2021 · 8 min · jiezi

关于算法:R语言用lme4多层次混合效应广义线性模型GLM逻辑回归分析教育留级调查数据

原文链接:http://tecdat.cn/?p=22813本教程为读者提供了应用 频率学派的狭义线性模型(GLM)的根本介绍。具体来说,本教程重点介绍逻辑回归在二元后果和计数/比例后果状况下的应用,以及模型评估的办法。本教程应用教育数据例子进行模型的利用。此外,本教程还简要演示了用R对GLM模型进行的多层次扩大。最初,还探讨了GLM框架中的更多散布和链接函数。 本教程蕴含以下构造。 1. 筹备工作。 2. 介绍GLM。 3. 加载教育数据。 4. 数据筹备。 5. 二元(伯努利)Logistic回归。 6. 二项式 Logistic 回归。 7. 多层次Logistic回归。 8. 其余族和链接函数。 本教程介绍了: - 假设检验和统计推断的基本知识。 - 回归的基本知识。 - R语言编码的基本知识。 - 进行绘图和数据处理的基本知识。 狭义线性模型(GLM)简介对于y是间断值得状况,咱们能够用这种形式解决,但当y是离散值(比方count data,binary data 见wiki Statistical data type)咱们用一般线性模型就不适合了,这时咱们援用另外一种模型 --- Generalised Linear Models 狭义线性模型。 为了获取GLM模型,咱们列出3个条件: 1. ,也就是y|x为指数族散布,指数族散布模式: 2. 如果咱们判断y的假如为 ,则。 3. 天然参数和输出x呈线性关系: 这3个条件的来由咱们不探讨,咱们只晓得做这样的假如是基于“设计”的抉择,而非必然。 咱们以泊松回归为例, y遵从泊松散布 ,化为指数族模式,咱们能够失去。所以 之后即为最大似然法的过程。   教育数据本教程中应用的数据是教育数据。 该数据来源于全国性的小学教育考察。数据中的每一行都是指一个学生。后果变量留级是一个二分变量,示意一个学生在小学教育期间是否留过级。学校变量示意一个学生所在的学校。集体层面的预测因素包含。  性别(0=女性,1=男性)和学前教育(受过学前教育,0=没有,1=有)。学校层面是学校均匀SES(社会经济位置)得分。 本教程利用教育数据试图答复的次要钻研问题是。 疏忽数据的构造,性别和学前教育对学生是否留级的影响是什么? 疏忽数据的构造,学校均匀SES对学生留级比例的影响是什么? 思考到数据的构造,性别、学前教育和学校均匀SES对学生是否留级有什么影响? 这三个问题别离用以下这些模型来答复:二元逻辑回归;二项逻辑回归;多层次二元逻辑回归。 数据筹备加载必要的软件包# 如果你还没有装置这些包,请应用install.packages("package_name")命令。library(lme4) # 用于多层次模型library(tidyverse) # 用于数据处理和绘图导入数据head(Edu) 数据处理  mutate(学校 = factor(学校),         性别 = if_else(性别 == 0, "girl", "boy"),         性别 = factor(性别, levels = c("girl", "boy")),         受过学前教育 = if_else(受过学前教育 == 0, "no", "yes"),         受过学前教育 = factor(受过学前教育, levels = c("no", "yes"))) 查看缺失的数据  summarise_each((~sum(is.na(.)) 数据中,经济位置变量有1066个观测值缺失。对缺失数据的解决自身就是一个简单的话题。为了不便起见,咱们在本教程中简略地将数据缺失的案例删除。 二元逻辑回归摸索数据:按性别和学前教育分类的留级数量   group_by(性别) %>%  summarise(是否留过级 = sum(是否留过级))   看来,留级的学生人数在男女之间有很大的不同,更多的男学生留级。更多没有承受过学前教育的学生留级。这一察看结果表明,性别和学前教育可能对留级有预测作用。 构建二元逻辑回归模型R默认装置了根底包,其中包含运行GLM的glm函数。glm的参数与lm的参数类似:公式和数据。然而,glm须要一个额定的参数:family,它指定了后果变量的假如散布;在family中咱们还须要指定链接函数。family的默认值是gaussian(link = "identity"),这导致了一个线性模型,相当于由lm指定的模型。在二元逻辑回归的状况下,glm要求咱们指定一个带有logit链接的二项分布,即family = binomial(link = "logit") 。 ...

June 18, 2021 · 2 min · jiezi

关于算法:R语言Bass模型进行销售预测

原文链接:http://tecdat.cn/?p=3937原文出处:拓端数据部落公众号BASS扩散模型BASS扩散模型三个参数:最终购买产品的总人数m; 翻新系数p; 和模拟系数q, nls(Sales~M*(((P+Q)^2/P)\*exp(-(P+Q)\*T79))/(1+(Q/P)\*exp(-(P+Q)\*T79))^2,## Parameters:## Estimate Std. Error t value Pr(>|t|)## M 6.80e+04 3.13e+03 21.74 1.1e-07 ***## P 6.59e-03 1.43e-03 4.61 0.0025 **## Q 6.38e-01 4.14e-02 15.41 1.2e-06 ***## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1#### Residual standard error: 727 on 7 degrees of freedom#### Number of iterations to convergence: 8## Achieved convergence tolerance: 7.32e-06# 取得系数Bcoef <- coef(Bass.nls)m <- Bcoef\[1\]p <- Bcoef\[2\]q <- Bcoef\[3\]将M的起始值设置为记录的总销售额。 ngete <- exp(-(p + q) * Tdelt)# 绘制概率密度函数Bpdf <- m * ((p + q)^2/p) * ngete/(1 + (q/p) * ngete)^2plot(Tdelt, Bpdf plot(Tdelt, Bcdf, xlab = "Year from 1979" #当q = 0时,只有创新者没有模仿者。Ipdf <- m * ((p + 0)^2/p) * exp(-(p + 0) * Tdelt)/(1 + (0/p) * exp(-(p + 0) *col = "red")lines(Tdelt, Impdf, col = "green")lines(Tdelt, Ipdf, col = "blue") #当q = 0时Icdf <- m * (1 - exp(-(p + 0) * Tdelt))/(1 + (0/p) * exp(-(p + 0) * Tdelt))lines(Tdelt, Icdf, col = "blue")

June 18, 2021 · 1 min · jiezi

关于算法:CSI2120-Python-讲解要点

Assignment 3CSI2120 Programming ParadigmsWinter 2019Due on April 5th before 11:00 pm in Virtual Campus6 marksThere are [10 points] in this assignment. The assignment is worth 6% of your final mark.All code must be submitted in a scm file. Screenshots, files in a format of a word editor, pdfs,handwritten solutions, etc. will not be marked and receive an automatic 0.Question 1. [1 point]Use the built-in function map to replace every number by its reciprocal value in the list. Define a global1over and use 0 as the reciprocal value for 0, i.e., 0 = 1/0.(1over '(0 2 3 4 12 0 0 1 0)) '(0 1/2 1/3 1/4 1/12 0 0 1 0))Question 2. [2 points]Implement Newton-Rhapson's method for root finding of function in one dimension. Newton-Rhapsonis defined by the iteration ;where is the current estimate of the root, is the function evaluated atlobal definition of the function must take threearguments, the current estimate of the root, the function and the derivative of the function, i.e.,; (newtonRhap x f fx)Your routine must stop the iterations if the change in the solution is less than a tolerance. For thispurpose use a global define, i.e.,(define TOL 1e-6)See next page for examples. CSI 2120 page 2_Examples: (newtonRhap 0.1 sin cos) 0(newtonRhap 2.0 (lambda (x) (- (* x x) x 6)) (lambda (x) (- (* 2 x) 1))) 3.0(newtonRhap -20.0 (lambda (x) (- (* x x) x 6)) (lambda (x) (- (* 2 x) 1))) -2.000000000000118Question 3. [3 points]Implement a routine p_cos which calculates the cosine of an angle in radians. Use the followingproduct approximation of cosineUse as many terms until the change with the next term is less than a tolerance. For this purpose useagain the global define,(define TOL 1e-6)Examples:(p_cos 0)1(p_cos (/ pi 2)) 0.0You are allowed extra global helper functions. ...

June 17, 2021 · 3 min · jiezi

关于算法:统一预估引擎的设计与实现

1. 背景 随着互联网的疾速倒退,互联网上呈现了各种海量的信息。怎么样为用户举荐感兴趣的信息是个很大的挑战?各种各样的举荐算法、零碎都涌现进去。而预估引擎能够说是举荐零碎中比拟重要的一环,预估引擎成果的好坏重大影响了算法成果。联合oppo的业务场景,咱们的预估引擎须要解决几个问题: (1)通用性:oppo的举荐业务场景十分多,包含信息流、商店、短视频、联盟、锁屏杂志、音乐等业务,预估引擎要反对这么多的场景,框架肯定要通用。 (2)多模型预估:在广告场景中,须要反对ocpx,须要一次申请同时预估ctr和cvr,可能是多个不同的转化模型(例如下载、付费等)。 (3)模型的动静更新:有些模型是小时更新、有些模型是天级更新,须要做到可能无感的动静更新。 (4)扩展性:各个业务用到的特色、字典、模型类型都可能不一样,要做到比拟容易扩大。 2. 定位与技术选型 思考到各个业务的业务特色差别比拟大,对立预估引擎如果要反对各个业务的策略试验和分流试验,会让预估引擎模块十分臃肿,没法保护。所以最终决定预估引擎只做预估相干的事件。从原始数据到失去预估ctr后果,须要通过特征提取,提取特色之后的后果再进行模型预估。思考到特征提取后果比拟大,一次预估须要用的特色后果大概有2M,这么大的数据如果通过网络来传输,耗时太长。所以预估引擎总体的流程包含了两局部:特征提取和模型预估。 3. Predictor的设计与实现 3.1 Predictor模块在整个举荐零碎中的地位 以oppo手机利用市场为类来阐明predictor模块在整个零碎中的地位, ranker模块负责排序,包含各种分流试验和各种经营策略等。它通过grpc框架与predictor模块进行通信。 3.2 Predictor模块的主体流程 图中示意了两个申请的解决流程,图中提特色包含多个特色conf,每个样本、每个特色配置提取一次。预估也会是多个模型,每个样本、每个conf、每个模型会预估屡次。特征提取依赖内部字典,预估依赖内部的模型文件,内部字典的更新、双buf切换都是通过字典治理模块来实现的。上面别离就字典治理模块、分task, 提特色,预估,merge进行具体阐明。 3.3 字典治理模块 如下图所示:conf1, conf2, lr_model_x0等示意磁盘上的文件,每个文件名都是通过不同的字典解析类来解析,这个字典解析类负责管理这个文件的加载,双buf切换。例如:FeatureConfDict负责解析conf1,它外部保留两个FeatureConfList类型的buf,当conf1文件产生更新时,就用备的FeatureConfList 进行加载,加载实现后,在加载过程中,服务应用主的FeatureConfList指针。加载实现后,进行主从切换,待没有申请应用老的buf,就开释到老的buf内存。 3.4 分task逻辑 接管到一个申请,这个申请指定了多conf多模型来预估。如下图所示: 上图示意一共有8条样本,别离用两个conf:conf0, conf1来提取特色,其中conf0的后果由model0,model1来预估,conf1由model2,model3来预估。依照2个样本一个task,拆分完task之后会失去4个task,如下图所示: 依照样本维度进行拆分成4个task,丢到线程池去执行。 3.5 Merge流程 在预估实现之后,须要依照conf/model这个维度进行组织预估后果给ranker, 最终的response如下图右子图所示。 3.6 特征提取框架的设计 特征提取框架线上、线下都会用到,这样比拟好保障线上线下的一致性。所以设计的时候要同时思考到线上线下的业务场景。 线上是将申请带来的数据与字典数据拼成一条条样本,进行特征提取的。而线下是编译so,通过mapreduce来调用,样本是通过反序列化hdfs的一条条文本失去的。 3.6.1 特色配置文件格式 特色配置文件包含两局部: schema局部,特色算子局部。 3.6.2 schema局部 上图中有5个 schema配置 user_schema:示意以后的用户相干信息,只在在线形式应用,由上游申请带过去。 item_schema:示意举荐的item相干信息,只在在线形式应用,一部分由申请带过去,一部分由字典文件中获取。 context_schema:示意举荐的上下文相干信息,只在在线形式应用,由上游戏申请带过去。例如:以后网络状态是wifi还是4G。 all_schema: 示意最终的样本的schema信息。在线模式是将user_schema, item_schema,context_schema的各个字段放在all_schema的对应地位,离线模块是将hdfs的一行行文本,依照all_schema_type指定的类型进行反序列化生成的。不论是在线还是离线,特色框架的样本最终的字段程序都是依照all_schema程序寄存的 all_schema_type: 离线模式才会用到,指定了各个schema的类型,这些类型名都是当时定义好的,在离线模式下,依据schema类型来反序列化各个字段。 3.6.3 特色算子配置局部 每个特色包含上面这些字段: Name: 特色名字 Class:示意这个特色用的哪个特色算子类,对应代码里类名 Slot: 惟一标识一个特色 Depend: 示意该特色依赖哪些字段, 这个字段在上述all_schema中必须存在 ...

June 17, 2021 · 1 min · jiezi

关于算法:科学派一份关于如何刷题的究极指南

刷题指南各位六一节高兴呀 我常常会在后盾收到不少小伙伴的留言,不晓得该如何开始刷题。 的确人的精力是无限的,自觉地从「任意终点」登程很难达到目的地。 因而一份【迷信派】的刷题指南尤其重要。 我花了两周的工夫,将写过的题解依照「自定义」的 做了分类,并联合「面经呈现频率」与「集体审美」对题目做了评级。 目前是以 Wiki 的模式做成刷题举荐入口: 几个标签的作用高深莫测: 题目:跳转 LeetCode 的原题题解:跳转 LeetCode 的题解区难度:简直与 LeetCode 难度统一,局部题目我感觉不合理的话,会作调整,倡议间接参考此处的难度举荐指数:依据「面经呈现频率」与「集体审美」做的评分不难发现,Wiki 人造适宜作为刷题入口。 包含「右侧」的总目录,难度也是依照「从上往下」的递增。 对于刚开始刷题的同学,我的倡议是依照 从上往下,并联合每个 外部的「举荐指数 & 难度」进行 后续打算目前仓库还没装修实现。 这几天我会将每个 的内容再整顿成「一般/寒色/暗黑」三个版本。 以 PDF 的模式发放给大家,不便大家离线浏览 依照个人风格,不会做成一个「大杂烩」,而是每个 为一本,并独自为每本从新排版,配封面 我猜你问Q0:为啥会有「自定义」的 ?与 LeetCode 的标签有啥区别? A0:这是对题目更加粗疏的分类。 LeetCode 上的分类标签颗粒度是很粗的,比方所有的 DP 的都只是「动静布局」,所有的深搜都是「深度优先遍历」,所有的数据结构实现都是「设计」... 三叶自定义的 会粗疏到具体的模型:「背包 DP」、「序列 DP」、「区间 DP」... 还有蕴含泛滥 LeetCode 自身自带的标签:「最短路」、「最小生成树」、「启发式搜寻」... 以及一些系列性的常见问题:「n 数之和问题」、「回文串问题」、「表达式计算问题」... Q1:仓库多久更新一次? A1:仓库的定位是作为公众号配套应用。 LeetCode 上的每日一题和公众号文章会尽量在「一周内」更新到仓库。 Q2:仓库就只是目录吗? A2:当初咱们有了一个迷信的目录编排,前面我打算做成一个「集中组队刷题」的模式: 比方每个月月初,我会在公众号发动一个投票,大家抉择接下来一个月咱们讲什么知识点。 如果选中 DP 和双指针,咱们接下来一个月「一天 DP」&「一天双指针」的进行刷题。 仓库也会成为每个同学交作业的中央,当然这个流程我还要好好设计一下 彩蛋其实在仓库的 Issues 界面,给大家留了个彩蛋:「给三叶找活」 你能够在 issue 处留下你感兴趣然而我又还没写过题解的题目,我会抉择一些比拟具备代表性的来写。 ...

June 17, 2021 · 1 min · jiezi

关于算法:R语言和Tableau通过情感分析我们可以从特朗普的推文得到什么

原文链接:http://tecdat.cn/?p=313社交媒体剖析的许多用处中的一些是情绪剖析,咱们评估特定问题的帖子是踊跃还是消极。咱们把社交媒体剖析、机器学习、预测建模等集成到文本数据挖掘中。 在这篇文章中,咱们开掘tweets剖析它们的情绪并且可视化咱们的后果。咱们将看到tweets,城市和状态的空间 – 工夫散布与最热门的tweets,咱们还将开掘tweets的情绪,帮忙咱们看到哪些评论被认为是踊跃的,哪些是负面的。 首先,让咱们创立一个tweet的词云。 词云帮忙咱们可视化tweet中最常见的词: col=brewer.pal(6,"Dark2")wordcloud(corpus, min.freq=25, scale=c(5,2),rot.per = 0.25,          random.color=T, max.word=45, random.order=F,colors=col) 咱们从云中看到,tweet中最罕用的词是’muslim’,’muslims’,’ban’。 这表明大多数推文是对于特朗普最近的想法,临时禁止穆斯林进入美国。 上面的信息中心显示了所抓取的tweets数量的工夫序列。 咱们能够在小时和天之间更改工夫单位。 随时间推移的推文数量有助于咱们深刻理解每个流动变动形式。 获取tweet的地址。 上面的地图显示了我能够绘制tweets大小与每个tweet取得的转发数量成正比。 上面的仪表板显示了tweets,大小与每个tweet被转发的次数成正比。 在以下三个可视化中,显示了邮政编码、城市和州的推文数量。 在互动地图中,咱们能够通过应用每个viz中显示的滚动条来更改要显示的邮政编码、城市和州的数量。 这些可视化帮忙咱们按邮政编码,城市和州查看tweet的散布。 情绪剖析具备很多的用处。 例如,公司能够考察客户最喜爱公司产品的哪些方面,以及客户不称心的问题是什么? 当公司公布新产品时,产品是否会产生用户侧面或负面情绪? 客户的情绪如何随工夫和空间而变动? 在这篇文章中,咱们评估唐纳德·特朗普的tweets的情绪。 上面的图显示了按天文编码分类的tweet的情绪分数。 咱们看到推文在NY、NC和Tx有最高的侧面情绪。 咱们应用了来自蕴含特朗普的最近的tweets, 发现一些国家体现出强烈的积极情绪。 然而,在统计学上,为了得出牢靠的论断,足够大的样本数据是十分重要的。 咱们的情绪剖析的准确性取决于tweets中的词语是否被包含在词典中。 此外,因为tweet可能蕴含俚语,行话和词典,可能不包含在词典中,情感剖析须要认真评估。

June 17, 2021 · 1 min · jiezi

关于算法:CentripetalNet更合理的角点匹配多方面改进CornerNet-CVPR-2020

CentripetalNet的外围在于新的角点匹配形式,额定学习一个向心偏移值,偏移值足够小的角点即为匹配,绝对于embedding向量的匹配形式,这种办法更为鲁棒,解释性更好。另外论文提出的十字星变形卷积也很好地贴合角点指标检测的场景,加强角点特色 起源:晓飞的算法工程笔记 公众号论文: CentripetalNet: Pursuing High-quality Keypoint Pairs for Object Detection 论文地址:https://arxiv.org/abs/2003.09119论文代码:https://github.com/KiveeDong/CentripetalNetIntroduction CornerNet关上了指标检测的新形式,通过检测角点进行指标的定位,在角点的匹配上,减少了额定embedding向量,向量间隔较小的角点即为匹配。而论文认为,这种办法不仅难以训练,而且仅通过物体外表进行预测,不足指标的地位信息。对于类似物体,embedding向量很难进行特定的表白,如图1所示,类似的物体会造成错框景象。 为此,论文提出了CentripetalNet,外围在于提出了新的角点匹配形式,额定学习一个向心偏移值,偏移值足够小的角点即为匹配。绝对于embedding向量,这种办法更为鲁棒,解释性更好。另外,论文还提出十字星变形卷积,针对角点预测的场景,在特征提取时可能精确地采样要害地位的特色。最初还减少了实例宰割分支,可能将网络拓展到实例宰割工作中。 CentripetalNet 如图2所示,CentripetalNet蕴含四个模块,别离为: 角点预测模块(Corner Prediction Module):用于产生候选角点,这部分跟CornerNet一样。向心偏移模块(Centripetal Shift Module):预测角点的向心偏移,并依据偏移后果将相近的角点成组。十字星变形卷积(Cross-star Deformable Convolution):针对角点场景的变形卷积,可能高效地加强角点地位的特色。实例宰割分支(Instance Mask Head):相似MaskRCNN减少实例宰割分支,可能晋升指标检测的性能以及减少实例宰割能力。Centripetal Shift ModuleCentripetal Shift 对于$bbox^i=(tlx^i,tly^i,brx^i,bry^i)$,几何核心为$(ctx^i, cty^i)=(\frac{tlx^i+brx^i}{2}, \frac{tly^i+bry^i}{2})$,定义左上角点和右下角点的向心偏移为: $log$函数用来缩小向心偏移的数值范畴,让训练更容易。在训练时,因为非GT角点须要联合角点偏移计算向心偏移,比较复杂,如图a所示,所以仅对GT角点应用smooth L1损失进行向心偏移训练: Corner Matching 属于同一组的角点应该有足够近的中心点,所以在失去向心偏移和角点偏移后,可依据角点对应的中心点判断两个角点是否对应。首先将满足几何关系$tlx < brx \wedge tly < bry$的角点组合成预测框,每个预测框的置信度为角点置信度的均值。接着,如图c所示,定义每个预测框的核心区域: $R_{central}$的角点计算为: $0 < \mu \le 1$为核心区域对应预测框边长的比例,依据向心偏移计算出左上角点的中心点$(tl_{ctx}, tl_{cty})$和右下角点的中心点$(br_{ctx}, br_{cty})$,计算满足核心区域关系$(tl^j_{ctx}, tl^j_{cty})\in R^j_{central} \wedge (br^j_{ctx}, br^j_{cty})\in R^j_{central}$的预测框的权值: ...

June 17, 2021 · 1 min · jiezi

关于算法:R语言计量经济学虚拟变量哑变量在线性回归模型中的应用

原文链接:http://tecdat.cn/?p=22805 为什么须要虚构变量?大多数数据都能够用数字来掂量,如身高和体重。然而,诸如性别、节令、地点等变量则不能用数字来掂量。相同,咱们应用虚构变量来掂量它们。 例子:性别让咱们假如x对y的影响在男性和女性中是不同的。 对于男性y=10+5x+ey=10+5x+e 对于女性y=5+x+ey=5+x+e。 其中e是随机效应,平均值为零。因而,在y和x的实在关系中,性别既影响截距又影响斜率。 首先,让咱们生成咱们须要的数据。 #真斜率,男性=5,女性=1ifelse(d$性别==1, 10+5*d$x+e,5+d$x+e)首先,咱们能够看一下x和y之间的关系,并按性别给数据着色。  plot(data=d) 很显著,y和x之间的关系不应该用一条线来描述。咱们须要两条:一条代表男性,一条代表女性。 如果咱们只将y回归到x和性别上,后果是 x的预计系数不正确。 正确的设置应该是这样的,这样能够使性别同时影响截距和斜率。 或者应用上面的办法,增加一个虚构变量。 该模型表示,对于女性(性别=0),预计的模型是y=5.20+0.99x;对于男性(性别=1),预计的关系是y=5.20+0.99x+4.5+4.02x,也就是y=9.7+5.01x,相当靠近实在关系。 接下来,让咱们尝试两个虚构变量:性别和地点 性别和地点的虚构变量性别并不重要,但地点很重要让咱们获取一些数据,其中性别不重要,但地点会很重要。 绘制查看x和y之间的关系,按性别给数据着色,并按地点离开。 plot(d,grid~location)  性别对Y的影响仿佛是显著的。但当你比拟芝加哥的数据和多伦多的数据时,截距不同,斜率也不同。 如果咱们疏忽了性别和地点的影响,模型将是 R-squared是相当低的。 咱们晓得性别并不重要,但咱们还是把它加进去,看看是否会有什么不同。  正如预期,性别的影响并不显著。 当初让咱们来看看地点的影响 地位的影响是很大。但咱们的模型设置基本上是说,地位只会扭转截距。 如果地位同时扭转了截距和斜率呢? 你也能够试试这个。 性别并不重要,而地点会扭转截距和斜率。 性别并不重要,而地点会扭转截距和斜率当初让咱们获取一些性别和地点都很重要的数据。让咱们从两个地点开始。 ifelse(d$性别=="0" & d$地点=="多伦多", 1+1*d$x+e,+                    ifelse(d$性别=="1" & d$地点=="芝加哥", 20+2*d$x+e,+                           ifelse(d$性别=="0" & d$地点=="芝加哥", 2+2*d$x+e,NA))))plot(d,x,y,color=性别~地点) 性别和地点都很重要,5个地点最初,让咱们尝试一个有5个地点的模型。 +                    ifelse(d$性别=="1" & d$地点=="芝加哥", 2+10*d$x+e,+                           ifelse(d$性别=="0" & d$地点=="芝加哥", 2+2*d$x+e,+                                  ifelse(d$性别=="1" & d$地点=="纽约",3+15*d$x+e,+                                         ifelse(d$性别=="0" & d$地点=="纽约",3+5*d$x+e,+                                                ifelse(d$性别=="1" & d$地点=="北京",8+30*d$x+e,+                                                       ifelse(d$性别=="0" & d$地点=="北京",8+2*d$x+e,+                                                              ifelse(d$性别=="1" & d$地点=="上海",plot( x,y,color=性别 ~地点) 所以,如果你认为某些因素(性别、地点、节令等)可能会影响你的解释变量,就把它们设置为虚构变量。 最受欢迎的见解 1.R语言多元Logistic逻辑回归 利用案例 2.面板平滑转移回归(PSTR)剖析案例实现 3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR) 4.R语言泊松Poisson回归模型剖析案例 5.R语言回归中的Hosmer-Lemeshow拟合优度测验 6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现 7.在R语言中实现Logistic逻辑回归 8.python用线性回归预测股票价格 9.R语言如何在生存剖析与Cox回归中计算IDI,NRI指标

June 17, 2021 · 1 min · jiezi

关于算法:抖音运营攻略详解

](/img/bVcSM8S)咱们大家在经营抖音账号时,会遇到很多问题,比方,怎么能力迅速涨粉,怎么能力有继续的流量啊等等这样相似的问题。不知该从何动手,殊不知,抖音也有字节的规定,咱们要把握规定便能学会玩法攻略,反之则变成废号。第一局部:抖音养号只有你会养抖音账号,就不愁流量、不愁粉丝、不愁变现。第一节、注册帐户-包含:头像,性别,材料填写残缺。第三方账户尽量绑定。实名制认证。注册工夫越长,活性越高,权重也越高。步骤二、编号:把注意力集中在当前想做的事件上。比方你想在美妆畛域做个账户,那你在刷视频时,就遇到了同行做美妆的,多做点赞、评论、转发等等动作。留神同畛域的一些大号。其它类型的作品尽量刷过来,等你刷完一次,连四、五次都是你想要创作的畛域的作品时,这个号就大抵养成了。通常须要3-7天的养号。步骤三、操作规程;无论是批量操作还是单号操作,都要记住一个规定:一部手机,一张手机卡,一个抖音号,为了缩小危险,这个抖音号只能在以后的手机上登陆,其余的手机不再登陆。应用最开始的抖音号登录,而不是其余抖音号。第二局部:帐号定位。帐号定位间接决定了咱们跌价的速度,扭转的形式,赚多少钱,赚钱的难度,引流的成果,也决定了咱们的内容布局,帐号布局。在此与大家分享一个对于home帐号定位的外围home:一个帐号只专一一个畛域(垂直定位)不能明天发美食,今天发英语,不能明天发游戏。因为这类账户属于垂直类,技术门槛较低,操作容易。要做好四个步骤:步骤一:垂直定位。步骤三:深刻内容。步骤三:用户喜爱。步骤四:一直分享。第三局部:关注同行。步骤一:关注同行。利用抖音能够挖掘出更多的同行作品,能够挖掘出更多的同行,间接搜寻与你行业相干的关键字,关注粉丝更多的同行。例如你是从事A畛域的,那么和A畛域相干的关键词,咱们能够找到几十个,有时能够找到几百个,通过这些词来开掘就能够了。步骤二:剖析同行。事实上,剖析同行就是:钻研竞争者的习性;钻研竞争者的套路;钻研竞争者的广告;钻研竞争者的赚钱形式;钻研竞争者的引流办法;钻研竞争者暗藏的商业机会;随时监测竞争者的数据;甚至是竞争者的视频何时成为热门,一天涨多少粉丝,一天发作品,你一清二楚,这是咱们剖析同行的基本功!本文首先介绍了几种初学者的做法:首先要学习剖析:同行的昵称如何;同行的头像如何抉择;同行的签名如何设计;同行的抖音号是否认证;同行的作品类型;每天发表的作品数量;同行的恋情度、评论数量、转发量。这样的话,咱们大家都能够做得很好,有很多想法能够间接拿来应用。步骤三:进行测试。施行要有毅力,要有保持,有些后果不须要测验,立即晓得。例如house昵称,头像,签名,这些设置能够立刻晓得后果。然而一些测试须要一些工夫来理解后果,并且还要看本人是否做好了。比如说发作品,不同类型的作品成果不同,内容不同15秒,成果也不一样,这就要花些工夫,如果保持不下来,果决判断不行,最初失去的还是本人。因而,执行测试是一项精密的工作,须要咱们逐渐地去欠缺,须要咱们有一位好的老师领导,这一点很重要,不能光靠本人在那学,大家肯定要执行测试。第四局部:抖音算法。倡议算法的长处有:一、让每一位有能力制作高质量影片的抖音创作者,失去与百万粉丝、千万粉丝大号公平竞争的机会,不会因为你的初来乍到,而解放你。二、克制垃圾视频的倒退(挪动+用户不喜爱的),要么限度流量,要么间接把它干掉。三、放任高质量视频流传(原创+用户青睐),尤其是垂直定位的抖音号更受用户欢送,受到平台的青眼。四、帮忙真正想玩的人优化视频,取得更大的曝光量,想方法帮忙高质量的作者进步粉丝数,赚钱,各种福利政策处分给真作者。你是怎么举荐这本书的,也就是说咱们的作品热销的起因,这里给你解释一下:① 流量池,②层次性,③时间性。这是我本人总结的教训,前面会随着咱们的实战测试,一直总结出举荐算法,到时候大家都要写文章,做视频。一、流量池不知大家有没有看一看,刚发行的作品会有几百个播放量,这是作品主动调配给咱们的流量,所以无论你发行的好与坏,只有不违反规定,过关了,多少人会看(播放量),咱们称之为流量池。为了让咱们的流量池领有更多的流量,说白了,外围是内容的15秒,很多粉丝发现,本人的作品最开始是几百个播放量,前面越来越少,甚至没有,这要么是咱们的作品不合规,要么是作品品质太差,缓缓的可能会升高举荐量,缩小流量池,甚至0的播放量。二层推。在咱们的作品进入流量池之后,下一步就是看咱们的作品在流量池中的体现,体现得越好,这个流量池就越大,也就是说,流量池给咱们一直地扩充这个流量池,一直地推动咱们,直到进行。(一)工作在一池的体现。怎么判断作品是否值得举荐呢,次要有以下6个体现。一、爱心数量。二、观看时长。因为次要是对播放量进行考查,所以咱们的作品短一些比拟好。三、评语数量。爱心数量比拟多,评论也会比拟少,至于大家为什么要评论,多看同行视频的评论,你就会发现如何疏导用户评论,评论越多越好。四、转发数量。五、关注数量。六、过往权重。过权一是守法与否,过权二是违规与否,咱们的账号是否定位精确,越垂直定位好,多个优质作品,账号权重特地是15秒视频内容,大家肯定要留神。(二)过来的点点滴滴账户的业绩。后期作品是否违规,如果有,可能是限流(限度举荐),明明能够成为一大热门,但最终可能举荐很少,视频播放量可能只有数万,这对之前的账号体现很重要。还有些作品之前就发了微信,也是涨粉的要害,不容易删除作品。③时代特征。首先介绍一下最近产生性关系的状况,而后是:近来,咱们推出了2-3万的播放量,而后播放量基本上一天超过1000,大概3-5天,同一作品又上热搜,抖音平台再次给举荐,间接飙升到15-20万播放量,而后又停播,过了几天,同一作品又给举荐,作品又上热搜,粉丝又哇哇涨。蕴含咱们之前的作品,开始时只有一千万的播放量,中距离了三天,倡议再减少24小时,再减少1400万的播放量,剩下的就没有了,基本上是每天1000左右的播放量。这几天都是这样,这是咱们工作的亮点之一,这段时间也特地重要。我最想说的一句话是:大家不要习惯性的去删除不受欢迎的视频,少播点视频,因为你也不分明哪一天哪一部作品会火。如果咱们的视频被删除了,很可能热门轮不到咱们,而且对咱们的帐号也不利。

June 17, 2021 · 1 min · jiezi

关于算法:如何用R语言在机器学习中建立集成模型

原文链接:http://tecdat.cn/?p=6608原文出处:拓端数据部落公众号介绍在本文中,我将向您介绍集成建模的基础知识。 另外,为了向您提供无关集成建模的实践经验,咱们将应用R进行集成。 1.什么是集成?通常,集成是一种组合两种或多种相似或不同类型算法的技术,称为根底学习模型。这样做是为了建设一个更加强壮的零碎,其中蕴含了所有根底学习模型的预测。能够了解为多个交易者的会议室会议,以决定股票的价格是否会上涨。 因为他们都对股票市场有不同的了解。因而,他们应该依据本人对市场的了解对股票价格做出各种预测。 2.汇合的类型在进一步具体介绍之前,一些基本概念是: 均匀:它被定义为 在回归问题的状况下或在预测分类问题的概率时从模型中获取预测的平均值。 少数投票:它被 定义为 在预测分类问题的后果的同时,从多个模型预测中以最大投票/举荐进行预测。 加权平均值:在此,不同的权重利用于来自多个模型的预测,而后取平均值 。 一些次要应用的技术: Bagging: Bagging也称为bootstrap聚合。 加强的一些例子是XGBoost,GBM,ADABOOST等。 重叠:在重叠多层机器时,学习模型彼此叠加,每个模型将其预测传递给下面层中的模型,顶层模型依据模型上面的模型输入做出决策。3.汇合的长处和毛病3.1长处集成是一种通过验证的办法,能够进步模型的准确性,实用于大多数状况。 集成使模型更加持重和稳固,从而确保在大多数状况下测试用例具备良好的性能。您能够应用集成来发现数据中的线性和非线性简单关系。能够通过应用两个不同的模型造成两个汇合来实现。3.2毛病集成缩小了模型的可解释性,并且很难在最初失去要害的业务见解。十分耗时,因而不是实时应用程序的最佳抉择。4.在R中施行汇合的实用指南 #让咱们看一下数据集数据的构造 'data.frame':614 obs。13个变量:  $ ApplicantIncome:int 5849 4583 3000 2583 6000 5417 2333 3036 4006 12841 ...$ CoapplicantIncome:num 0 1508 0 2358 0 ...$ LoanAmount:int NA 128 66 120 141 267 95 158 168 349 ...$ Loan\_Amount\_Term:int 360 360 360 360 360 360 360 360 360 360 ...$ Credit_History:int 1 1 1 1 1 1 1 0 1 1 ... #应用中位数填充缺失值preProcValues < -  preProcess(data,method = c(“medianImpute”,“center”,“scale”))#Spliting训练依据后果分为两局部:75%和25%index < -  createDataPartition(data\_processed $ Loan\_Status,p = 0.75,list = FALSE)trainSet < -  data_processed \[index,\]testSet < -  data_processed \[-index,\]我将数据分成两局部,我将用它来模拟训练和测试操作。咱们当初定义训练以及预测变量和后果变量: #定义多个模型的训练参数fitControl < -  trainControl(  method =“cv”, savePredictions ='final',classProbs = T)咱们开始训练随机森林并在咱们创立的测试集上测试其准确性:  #查看随机森林模型的准确性 Confusion matrix and statisticsreferenceForecast N Y.N 28 20Y 9 96Accuracy: 0.810595% CI: (0.7393,0.8692)No information rate: 0.7582P value\[Acc> NIR\]: 0.07566Kappa: 0.5306Mcnemar's test P value: 0.06332Sensitivity: 0.7568Specificity: 0.8276Pos Pred value: 0.5833Neg Pred value: 0.9143Prevalence rate: 0.2418Detection rate: 0.1830Detection prevalence rate: 0.3137Balance accuracy: 0.7922 咱们应用随机森林模型取得了0.81的准确度。看看KNN的体现: #训练knn模型 #应用knn模型预测testSet $ pred\_knn <-predict(object = model\_knn,testSet \[,predictors\])#查看随机森林模型的准确性 referenceForecast N Y.N 29 19Yes 2 103Accuracy: 0.862795% CI: (0.7979, 0.913)No information rate: 0.7974P value\[Acc> NIR\]: 0.0241694Kappa: 0.6473Mcnemar's test P value: 0.0004803Sensitivity: 0.9355Specificity: 0.8443Pos Pred value: 0.6042Neg Pred value: 0.9810Prevalence rate: 0.2026Detection rate: 0.1895Detection prevalence rate: 0.3137Balance accuracy: 0.8899 咱们可能通过独自的KNN模型取得0.86的准确度。Logistic回归的体现: #训练Logistic回归模型 #预测应用knn模型testSet $ pred\_lr <-predict(object = model\_lr,testSet \[,predictors\])#查看随机森林模型的准确性 Confusion matrix and statisticsreferenceForecast N Y.N 29 19Yes 2 103Accuracy: 0.862795% CI: (0.7979, 0.913)No information rate: 0.7974P value\[Acc> NIR\]: 0.0241694Kappa: 0.6473Mcnemar's test P value: 0.0004803Sensitivity: 0.9355Specificity: 0.8443Pos Pred value: 0.6042Neg Pred value: 0.9810Prevalence rate: 0.2026Detection rate: 0.1895Detection prevalence rate: 0.3137Balance accuracy: 0.8899逻辑回归也给出了0.86的准确度。 当初,让咱们尝试用这些模型造成汇合的不同办法,如咱们所探讨的: 均匀咱们将均匀三个模型的预测。因为预测是“Y”或“N”,因而平均值对于此二进制分类没有多大意义。然而,咱们能够对察看概率的平均值进行均匀解决。 #预测概率testSet $ pred\_rf\_prob <-predict(object = model_rf,testSet \[,predictors\],type ='prob')testSet $ pred\_knn\_prob <-predict(object = model_knn,testSet \[,predictors\],type ='prob')testSet $ pred\_lr\_prob <-predict(object = model_lr,testSet \[,predictors\],type ='prob')少数表决:在少数表决中,咱们将为大多数模型预测的察看指定预测。 少数投票加权平均值咱们能够采纳加权平均值,而不是采纳简略平均值。通常,对于更精确的模型,预测的权重很高。让咱们将0.5调配给logistic回归,将0.25调配给KNN和随机森林。  之前咱们在顶层应用了简略的公式。相同,咱们能够应用另一种机器学习模型,这就是重叠。咱们能够应用线性回归来建设线性公式,用于在回归问题中进行预测,以便在分类问题的状况下将底层模型预测映射到后果或逻辑回归。 在同一个例子中,让咱们尝试将逻辑回归和GBM设置为顶层模型。请记住,咱们将采取以下步骤: 在训练数据上训练各个根底层模型。预测应用每个根底层模型来训练数据和测试数据。当初,再次对顶层模型进行训练,对底层模型进行训练数据的预测。最初,应用顶层模型预测底层模型的预测。步骤1:在训练数据上训练各个根底层模型#定义参数fitControl < -  trainControl(method =“cv”, savePredictions ='final',#保留最佳参数组合的预测classProbs = T#保留预测的类概率)#训练随机森林模型#训练knn模型 #训练逻辑回归模型步骤2:应用每个根底层模型预测训练数据和测试数据#预测训练数据的概率 #预测测试数据的概率步骤3:当初再次训练顶层模型对底层模型的预测,对训练数据进行预测首先,让咱们从GBM模型开始作为顶层模型。   #顶层模型用于预测的变量predictors\_top <-c( 'OOF\_pred\_rf', 'OOF\_pred\_knn', 'OOF\_pred_lr') #GBM作为顶层模型同样,咱们也能够应用逻辑回归创立一个汇合作为顶层模型。   #Logistic回归作为顶层模型model_glm < -  ( \[,predictors_top\],  trControl = fitControl,tuneLength = 3)步骤4:最初,应用顶层模型预测#应用GBM顶层模型预测测试集$ gbm\_stacked <-predict(model\_gbm,测试集\[,predictors_top\])#应用logictic回归顶层模型预测测试集$ glm\_stacked <-predict(model\_glm,测试集\[,predictors_top\])抉择模型十分重要,而后能力从整体中获得最佳成果。  还有问题?分割咱们! 最受欢迎的见解 1.从决策树模型看员工为什么到职 2.R语言基于树的办法:决策树,随机森林 3.python中应用scikit-learn和pandas决策树 4.机器学习:在SAS中运行随机森林数据分析报告 5.R语言用随机森林和文本开掘进步航空公司客户满意度 6.机器学习助推快时尚精准销售工夫序列 7.用机器学习辨认一直变动的股市情况——隐马尔可夫模型的利用 8.python机器学习:举荐零碎实现(以矩阵合成来协同过滤) 9.python中用pytorch机器学习分类预测银行客户散失

June 16, 2021 · 1 min · jiezi

关于算法:Python风险价值计算投资组合VaRValue-at-Risk-期望损失ESExpected-Shortfall

原文链接:http://tecdat.cn/?p=22788Python计算取得多资产投资组合的危险度量。 要害概念随着价格的变动,投资经理所持有的市场价值也会发生变化。后者就是所谓的市场危险,掂量它的最风行的办法之一是定义为危险价值。危险自身被看作是理论收益和冀望收益之间的差别,两者可能不同。如果它们相等,投资被认为是无风险的。同时,它不能有守约危险,也不能有再投资危险。请留神,冀望收益不是投资者认为他们将取得的收益,而是反映了所有经济状况下所有可能后果的平均值。危险价值(VaR)通知你在一个给定的时间段内,在预先确定的置信水平下,你能损失多少钱。典型的置信度是95%和99%,意味着分析师有95%或99%的信念,损失不会超过这个数字,即5%(或1%)的VaR反映了5%(或1%)最坏状况下的将来最佳收益率。危险值是一个最先进的衡量标准,因为它能够为所有类型的资产进行计算,并思考到多样化的因素。然而,危险值并不是一个最大的损失数字,所以分析师可能会遇到大于危险值的损失。 对于历史序列的假如:过来的收益率是将来收益率的预测指标,但不能保障历史记录会显示将来最坏和最好的状况,但咱们用几何平均法将价格转化为收益,所以咱们对所有不同的周/月/...收益给予等同的权重,来取得T年内投资收益的复合最终价值。如果资产价格中的冀望收益是正当的,那么理论收益率应该围绕这些预期呈正态分布。当收益率能够很好地靠近于正态分布时,投资治理就变得更加容易操作了。定义证实收益的计算(PT为最终价格,P0为初始价格和股息收益率)。 将价格动静转换为收益(2),用几何工夫序列(4)计算冀望收益(3),而不是算术平均(收益率的稳定越大,算术平均和几何平均之间的差别越大)。  正态分布,以稳定率作为危险的衡量标准,即投资的已实现收益的加权平均值的方差的平方根(^2),权重等于每种状况的概率ps(6)。  最初,正如 "投资"(Bodie, Kane, Marcus)中所说,VaR是指在给定的工夫范畴内,收益散布的左尾概率和右尾概率1-累积的最小损失额。 在方差-协方差办法中,咱们应用的是参数办法,假如收益是正态分布。因而,咱们只须要计算两个参数,即给定收益的平均值和SD(即标准差)。 后者对Excel的计算很有用,咱们用Average函数计算收益的平均值,而后STDEV将帮忙咱们计算标准偏差,最初得出NORMINV将达到VaR计算的指标,VaR(95)和VaR(99)的概率别离为0.05和0.01。 单资产组合VaR 在Python中,单资产组合VaR计算没有那么简单。 #VaR计算在Python中的利用 #筹备工作(每个库都要用 "pip install \*libraryname\*"来预装置import pandas as pdimport numpy as npimport matplotlib.pyplot as plt#从雅虎财经下载谷歌数据到定义的时间段内yf.download('GOOG', '2010-01-01', '2019-01-31')#收益率的计算 df\['return'\] = Close.pct_change()#VaR计算 VaR\_90 = norm.ppf(1-0.9, mean, std\_dev)print('VaR 90%置信度: ', VaR_90)最终输入将是这样的: 雅虎是一个取得收费金融数据的好办法,另一个路径是Quandl的API库。 为了放弃代码构造的连续性,我在上面介绍一个资产类别的样本,以及一个多资产的投资组合构造,其中包含VaR计算。 #筹备工作 import numpy as npimport pandas as pd#从Quandl API导入银行数据(.4示意收盘价)。ticker = "WIKI/BAC.4"quandl.get(ticker,     #以升序形式出现数据sorted( percentage\["Close"\])print ("99.99%的理论损失不会超过" ,percentile(order_percentage, .01) * 100)输入以及VaR计算。 多资产投资组合VaR对于  多资产类别投资组合: #将数据集扩大到5种不同的资产,将它们组合成一个具备代替危险的投资组合。\[ "WIKI/NKE.4", "WIKI/NFLX.4", "WIKI/AMZN.4"\]#收益率的计算df.pct_change()#不同的危险敞口进入投资组合percentage * exposuresptf\_percentage = value\_ptf\['投资组合的价值'\] 。np.percentile(ptf_percentage, .01)print ("99.99%的理论损失不会超过:" round(VaR, 2)print ("预计损失将超过" + (ptf\_percentage)) + "超过" ptf\_percentage)) + "天数")    冀望损失(Expected Shortfall)接下来咱们探讨另一个根本指标的重要性:冀望损失(Expected Shortfall)。 在搜寻VaR相干文献时,你会发现有很多对于VaR作为市场危险衡量标准的批评意见。你不可避免地看到冀望损失(ES)被提出来作为一种代替。 这两者之间有什么区别呢? 假如咱们在99%的置信水平下评估咱们的VaR(或者简略地说,潜在的损失),咱们将有一系列的损失后果在1%的尾部, VaR答复了问题:在1%的尾部,整个后果范畴内的最小损失是多少? ES答复了问题:在1%的尾部,整个后果范畴内的均匀损失是多少? 首先,VaR。 VaR如果X是h天的收益,那么,其中。例如,对于h=10天的收益,,咱们能够从正态分布中计算出99%的危险值,如下所示 h = 10. # 为10天mu_h = 0.1 # 这是10天内收益率的平均值 - 10%。sig = 0.3 # 这是一年内收益率的稳定 - 30%。VaR\_n = normppf(1-alpha)*sig\_h - mu_h 以上是参数化的VaR,这意味着咱们假如有肯定的收益散布。在应用VaR时,通常会应用经验性的VaR,它不假如任何散布形态。在这些状况下,取得VaR只是一个简略的问题,即取得必要的百分数。 条件VaR/冀望损失EXPECTED SHORTFALL思考到VaR,咱们能够通过以下形式定义条件VaR,或CVaR或冀望损失。 对这一点的解释很简略。基本上,它是X的期望值(平均值)。 如果咱们再假如一个正态分布,咱们能够利用以下公式 其中是正态分布,是规范正态分布的四分位数。 接下来是ES。 # 与上述参数雷同alpha**-1 * norm.pdf(norm.ppf(alpha))*sig\_h - mu\_h咱们不肯定要假如正态分布。 上述假如为正态分布,但咱们也能够利用学生-T散布。失去等价公式的推导波及到了这个问题。然而,咱们能够通过以下公式计算学生-T散布下的等效危险值 咱们也能够假如一个T散布。  nu = 5 # 自由度,越大,越靠近于正态分布print("99% CVaR ", (CVaR_t*100,2)自由度越大,越靠近于正态分布。 # 验证正态分布和Student-t VaR是一样的nu = 10000000 # 自由度,越大,越靠近于正态分布print("99% VaR", round(VaR_t*100,2)) 咱们能够用理论的市场数据计算出相似的后果。首先,将数据拟合为正态分布和t散布。  mu\_norm, sig\_norm = norm.fit(returns而各自的VaR和ES能够很容易地计算出来。 绘制具备不同自由度的VaR和CVaR图表plt.plot(d\[0\], d\[1\]*100plt.plot(np.arange(5, 100), VaR_n\*np.ones(95)\*100 VaR\_n = norm.ppf(1-alpha)*sig\_norm -munorm 能够很好地理解VaR和ES之间区别的图表如下。 Python的确是一个弱小的工具,用于计算和数据可视化。它容许你导入几个不同的预包装库,大大降低了其余代码(如C++)的复杂性。 最受欢迎的见解 1.R语言基于ARMA-GARCH-VaR模型拟合和预测实证钻研 2.R语言时变参数VAR随机模型 3.R语言预计时变VAR模型工夫序列的实证钻研 4.R语言基于ARMA-GARCH过程的VAR拟合和预测 5.GARCH(1,1),MA以及历史模拟法的VaR比拟 6.R语言用向量自回归(VAR)进行经济数据脉冲响应 7.R语言实现向量主动回归VAR模型 8.R语言随机搜寻变量抉择SSVS预计贝叶斯向量自回归(BVAR)模型 9.R语言VAR模型的不同类型的脉冲响应剖析 ...

June 16, 2021 · 1 min · jiezi

关于算法:ExtremeNet通过极点进行目标检测更细致的目标区域-CVPR-2019

ExtremeNet检测指标的四个极点,而后以几何的形式将其组合起来进行指标检测,性能与其它传统模式的检测算法相当。ExtremeNet的检测办法非常独特,然而蕴含了较多的后处理办法,所以有很大的改良空间,感兴趣能够去看看论文试验中的谬误剖析局部 起源:晓飞的算法工程笔记 公众号论文: Bottom-up Object Detection by Grouping Extreme and Center Points 论文地址:https://arxiv.org/abs/1901.08043论文代码:https://github.com/xingyizhou/ExtremeNetIntroduction 在指标检测中,罕用的办法将指标定义为矩形框,这通常会带来大量障碍检测的背景信息。为此,论文提出ExtremeNet,通过检测指标的四个极点进行指标定位,如图1所示。整体算法基于CornerNet的思维进行改良,应用五张热图别离预测指标的四个极点以及核心区域,将不同热图的极点进行组合,通过组合的几何核心在中心点热图上的值判断组合是否符合要求。另外,ExtremeNet检测的极点可能配合DEXTR网络进行指标宰割信息的预测。 ExtremeNet for Object detection ExtremeNet应用HourglassNet进行类可知的关键点检测,遵循CornerNet的训练步骤、损失函数和偏移值预测,其中偏移值的预测是类不可知的,中心点不蕴含偏移值。骨干网络共输入$5\times C$张热图,$4\times 2$偏移值特色图,$C$为类别数,整体构造和输入如图3所示。当极点提取后,依据几何关系将他们进行组合。 Center Grouping 极点位于指标的不同方向,组合时会十分复杂,论文认为像CornerNet那样采纳embedding向量进行组合会不足全局信息,所以提出了Center Grouping进行极点组合。 Center Grouping的流程如算法1所示,首先获取四个极点热图上的顶峰点,顶峰点需满足两点:1) 其值需大于阈值$\tau_p$ 2) 为部分最大值,顶峰点的值需大于四周八个点,获取顶峰点的过程称为ExtrectPeak。在失去各个热图上的顶峰点后,遍历各顶峰点的组合,对于满足几何关系的顶峰点组合($t$,$b$,$r$,$l$),计算其几何中心点$c=(\frac{l_x+t_x}{2}, \frac{t_y+b_y}{2})$,如果几何中心点的值满足$\hat{Y}^{(c)}_{c_x, c_y} \ge \tau_c$,则认为该顶峰点组合符合要求。 Ghost box suppression 在三个大小雷同的指标等距散布的状况下,Center Grouping可能会呈现高置信度的误判。此时,两头的指标可能有两种状况,一是正确的预测,二是谬误地与隔壁的物体合并输入,论文称第二种状况的预测框为ghost框。为了解决这种状况,论文减少了soft-NMS后处理办法,如果某个预测框的内蕴含的预测框的置信度之和大于其三倍,则将其置信度除以二,而后再进行NMS操作。 Edge aggregation 极点有时不是惟一的,如果指标存在程度或垂直的边界,则边上所有的点都是极点,而网络对这种边界上的点的预测值会较小,可能导致极点的漏检。 论文采纳边聚合(edge aggregation)来解决这个场景,对于左右热图的部分最大点,在垂直方向进行分数聚合,而高低热图的部分最大点则在程度方向进行分数聚合。将对应方向上的枯燥递加分数进行聚合,直到遇到聚合方向上的部分最小点为止。假如$m$为部分最大值点,$N^{(m)}_i=\hat{Y}_{m_x+i, m_y}$为程度方向的点,定义$i_0 < 0$和$0<i_1$为两边最近的部分最小值,即$N^{(m)}_{i_0-1} > N^{(m)}_{i_0}$和$N^{(m)}_{i_1} < N^{(m)}_{i_1+1}$,则边聚合的顶峰点值更新为$\tilde{Y}_m=\hat{Y}_m+\lambda_{aggr}{\sum}^{i_1}_{i=i_0}N^{(m)}_i$,其中$\lambda_{aggr}$为聚合权重,设置为0.1,整体成果如图4。 Extreme Instance Segmentation 极点比bbox蕴含更多的指标信息,毕竟多了两倍的标注信息(8 vs 4)。基于四个极点和bbox,论文提出简略的办法来获取指标的mask信息,首先以极点为核心扩大出1/4 bbox边界长度的线,如果线超过bbox则截断,而后将四条线首尾连贯失去八边形,如图1所示。最初应用DEXTR(Deep Extreme Cut)办法进一步获取mask信息,DEXTR网络可能将极点信息转化成宰割信息,这里间接将八边形截图输出到预训练的DEXTR网络中。 Experiments ...

June 16, 2021 · 1 min · jiezi

关于算法:Binary-Search-Tree-难点解释说明

Assignment 2 - Binary Search Tree (35%)OverviewYour task is to implement a BST class, where every vertex is denoted by a string, and every vertex has a weight. The class should allow the weight to be any numeric data type, such as int, float, or double. The vertices are sorted by their weights.For example, the following BST has 8 vertices: "C", "A", "H", "D", "G", "F", "B", "E" (we list the vertices in breath-first traversal order). These vertices have weights of 5, 1, 10, 3, 20, 15, 30, 17. ...

June 16, 2021 · 5 min · jiezi

关于算法:R语言实现偏最小二乘回归法-partial-least-squares-PLS回归

原文链接:http://tecdat.cn/?p=8652原文出处:拓端数据部落公众号偏最小二乘回归是一种回归模式 。  当应用pls时,新的线性组合有助于解释模型中的自变量和因变量。 在本文中,咱们将应用pls预测“支出”。   library(Ecdat)## 'data.frame':    753 obs. of  18 variables:##  $ work      : Factor w/ 2 levels "yes","no": 2 2 2 2 2 2 2 2 2 2 ...##  $ hoursw    : int  1610 1656 1980 456 1568 2032 1440 1020 1458 1600 ...##  $ child6    : int  1 0 1 0 1 0 0 0 0 0 ...##  $ child618  : int  0 2 3 3 2 0 2 0 2 2 ...##  $ agew      : int  32 30 35 34 31 54 37 54 48 39 ...##  $ educw     : int  12 12 12 12 14 12 16 12 12 12 ...##  $ hearnw    : num  3.35 1.39 4.55 1.1 4.59 ...##  $ wagew     : num  2.65 2.65 4.04 3.25 3.6 4.7 5.95 9.98 0 4.15 ...##  $ hoursh    : int  2708 2310 3072 1920 2000 1040 2670 4120 1995 2100 ...##  $ ageh      : int  34 30 40 53 32 57 37 53 52 43 ...##  $ educh     : int  12 9 12 10 12 11 12 8 4 12 ...##  $ wageh     : num  4.03 8.44 3.58 3.54 10 ...##  $ income    : int  16310 21800 21040 7300 27300 19495 21152 18900 20405 20425 ...##  $ educwm    : int  12 7 12 7 12 14 14 3 7 7 ...##  $ educwf    : int  7 7 7 7 14 7 7 3 7 7 ...##  $ unemprate : num  5 11 5 5 9.5 7.5 5 5 3 5 ...##  $ city      : Factor w/ 2 levels "no","yes": 1 2 1 1 2 2 1 1 1 1 ...##  $ experience: int  14 5 15 6 7 33 11 35 24 21 ...首先,咱们将数据分为训练和测试集来筹备数据。  set.seed(777)train<-sample(c(T,F),nrow(Mroz),rep=T) #50/50 训练/测试拆分在下面的代码中,咱们设置“ set.seed函数”以确保可重复性。而后,咱们创立了“ train”对象 。  当初,咱们应用 “plsr”函数创立模型,而后应用“ summary”函数查看后果。咱们  应用穿插验证。上面是代码。 ## Data:    X dimension: 392 17 ##  Y dimension: 392 1## Fit method: kernelpls## Number of components considered: 17## ## VALIDATION: RMSEP## Cross-validated using 10 random segments.##        (Intercept)  1 comps  2 comps  3 comps  4 comps  5 comps  6 comps## CV           11218     8121     6701     6127     5952     5886     5857## adjCV        11218     8114     6683     6108     5941     5872     5842##        7 comps  8 comps  9 comps  10 comps  11 comps  12 comps  13 comps## CV        5853     5849     5854      5853      5853      5852      5852## adjCV     5837     5833     5837      5836      5836      5835      5835##        14 comps  15 comps  16 comps  17 comps## CV         5852      5852      5852      5852## adjCV      5835      5835      5835      5835## ## TRAINING: % variance explained##         1 comps  2 comps  3 comps  4 comps  5 comps  6 comps  7 comps## X         17.04    26.64    37.18    49.16    59.63    64.63    69.13## income    49.26    66.63    72.75    74.16    74.87    75.25    75.44##         8 comps  9 comps  10 comps  11 comps  12 comps  13 comps  14 comps## X         72.82    76.06     78.59     81.79     85.52     89.55     92.14## income    75.49    75.51     75.51     75.52     75.52     75.52     75.52##         15 comps  16 comps  17 comps## X          94.88     97.62    100.00## income     75.52     75.52     75.52输入包含“验证”局部中均方根误差 。因为有17个独立变量,所以有17个成分。 能够看到,在成分3或4之后,因变量中解释的方差简直没有改善。上面是这些后果图的代码。  咱们将应用咱们的模型进行预测。  尔后,咱们计算均方误差。这是通过从测试集的因变量中减去咱们的预测模型的后果来实现的。而后,咱们对这些信息求平方并计算平均值。  mean((pls.pred-Mroz$income\[test\])^2)## \[1\] 63386682 咱们应用传统的最小二乘回归模型运行数据并比拟后果。 ## \[1\] 59432814最小二乘模型比偏最小二乘模型好一点,然而如果看一下模型,咱们会看到几个不重要的变量。咱们删除这些,看看后果如何  summary(lm.fit)## ## Residuals:##    Min     1Q Median     3Q    Max ## -20131  -2923  -1065   1670  36246 ## ## Coefficients:##               Estimate Std. Error t value Pr(>|t|)    ## (Intercept) -1.946e+04  3.224e+03  -6.036 3.81e-09 ***## workno      -4.823e+03  1.037e+03  -4.651 4.59e-06 ***## hoursw       4.255e+00  5.517e-01   7.712 1.14e-13 ***## child6      -6.313e+02  6.694e+02  -0.943 0.346258    ## child618     4.847e+02  2.362e+02   2.052 0.040841 *  ## agew         2.782e+02  8.124e+01   3.424 0.000686 ***## educw        1.268e+02  1.889e+02   0.671 0.502513    ## hearnw       6.401e+02  1.420e+02   4.507 8.79e-06 ***## wagew        1.945e+02  1.818e+02   1.070 0.285187    ## hoursh       6.030e+00  5.342e-01  11.288  < 2e-16 ***## ageh        -9.433e+01  7.720e+01  -1.222 0.222488    ## educh        1.784e+02  1.369e+02   1.303 0.193437    ## wageh        2.202e+03  8.714e+01  25.264  < 2e-16 ***## educwm      -4.394e+01  1.128e+02  -0.390 0.697024    ## educwf       1.392e+02  1.053e+02   1.322 0.186873    ## unemprate   -1.657e+02  9.780e+01  -1.694 0.091055 .  ## cityyes     -3.475e+02  6.686e+02  -0.520 0.603496    ## experience  -1.229e+02  4.490e+01  -2.737 0.006488 ** ## ---## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1## ## Residual standard error: 5668 on 374 degrees of freedom## Multiple R-squared:  0.7552, Adjusted R-squared:  0.744 ## F-statistic: 67.85 on 17 and 374 DF,  p-value: < 2.2e-16lm.pred<-predict(lm.fit,Mroz\[test,\])mean((lm.pred-Mroz$income\[test\])^2)## \[1\] 57839715 误差升高很多,这表明最小二乘回归模型优于偏最小二乘模型。此外, 偏最小二乘模型很难解释。因而,最小二乘模型是最受欢迎的模型。

June 15, 2021 · 1 min · jiezi

关于算法:R语言用相关网络图可视化分析汽车配置和饮酒习惯

原文链接:http://tecdat.cn/?p=22772 咱们常常应用的一个关系性指标是相关性。通过能够利用数据框架和绘图来帮忙摸索相干关系。 本文先创立了相干关系的关系数据框,而后绘制了关系构造。 库= 咱们将应用以下库。 library(tidyverse)library(igraph)根本办法给定一个由数字变量组成的数据框d,咱们想在网络中绘制其相关性,这里有一个根本办法。 # 创立相干数据框d %>%   correlate() %>% # 将强于某个值的相干关系转换成转换为一个无向图的对象cors %>%   filter(abs(r) # 绘制plot(cors)例子1:汽车参数配置关联变量让咱们依照这个办法来解决MTCars数据集。默认状况下,所有的变量都是数字的,所以咱们不须要做任何预处理。 咱们首先创立一个相关性数据框,并将其转换为一个图形对象。   correlate() %>%   stretch() 接下来,咱们将这些值转换为一个无向图对象。该图是不定向的,因为相干关系没有方向。相干关系没有因果关系。 因为,咱们通常不心愿看到所有的相干关系,咱们首先过滤()出绝对值小于某个阈值的任何相干关系。例如,让咱们包含0.3或更强的相干关系(正或负)。 cors %>%  filter(abs(r) > .3) %>% 咱们绘制这个对象。上面是一个根本图。   plot(cors) 改良之后的。 plot(cors,width = abs(r), color = r,title="汽车变量之间的相干关系") 例子2:有相似饮酒习惯的国家这个例子须要进行一些数据预处理,咱们只看强正相干。 让咱们来看一个对于世界各国的啤酒、葡萄酒饮用量的数据。 drinkdata 我想找出欧洲和美洲的哪些国家有相似的啤酒、葡萄酒和烈酒饮用习惯,以及澳大利亚在其中的位置。绑定地理信息并找到我感兴趣的国家,把这些数据变成相干数据的形态。  # 标准化数据以查看绝对数量。# 而不是相对数量# 啤酒、葡萄酒和烈酒的绝对数量d %>% mutate_if(is.numeric, scale)# 整顿数据%>%   gather(type, litres, -country) %>%   drop_na() %>% #转换成宽数据以便进行关联剖析 %>%   spread(country, litres) %>%这个数据包含每个国家喝的啤酒、葡萄酒和烈酒数量的Z-scores。 咱们当初能够持续应用咱们的规范办法。因为我只对哪些国家真正类似感兴趣,咱们过滤相关系数低的数据。(r>0.9) plot(cors,alpha = r, color = r,title = "哪些国家有相似的饮酒习惯?") 这些国家的饮酒行为分为三个群组。 例如澳大利亚与许多西欧和北欧国家如英国、法国、荷兰、挪威和瑞典一起呈现在左上方的集群中。 最受欢迎的见解 1.R语言动态图可视化:如何、创立具备精美动画的图 2.R语言生存剖析可视化剖析 3.Python数据可视化-seaborn Iris鸢尾花数据 4.r语言对布丰投针(蒲丰投针)试验进行模仿和动静 5.R语言生存剖析数据分析可视化案例 6.r语言数据可视化剖析案例:摸索brfss数据数据分析 7.R语言动静可视化:制作历史寰球平均温度的累积动静折线图动画gif视频图 8.R语言高维数据的主成分pca、 t-SNE算法降维与可视化剖析案例报告 9.python主题LDA建模和t-SNE可视化

June 15, 2021 · 1 min · jiezi

关于算法:Python金融应用编程衍生品定价和套期保值的随机过程

原文链接:http://tecdat.cn/?p=5620原文出处:拓端数据部落公众号随机过程对定量融资的许多方面都很有用,包含但不限于衍生品定价,风险管理和投资治理。这些应用程序将在本文前面进一步具体探讨。本节介绍了量化融资中应用的一些风行的随机过程及其在Python中的实现。 模型参数模型参数类蕴含以下随机过程应用的所有参数。为了便于了解,这些参数的前缀是它们所用的随机过程的名称。随机过程的校准将波及寻找与某些历史数据相符的参数值。 绘制后果图上面的代码应用Matplotlib来绘制一组随机过程。 布朗运动随机过程布朗运动 是由悬浮在气体或液体中的颗粒体现出的随机静止。这种随机静止是由颗粒与液体或气体中的原子或分子碰撞引起的。布朗运动以植物学家罗伯特·布朗的名字命名,他察看了1827年的随机静止。  在实践中,布朗运动不用于模仿资产价格。我将其蕴含在内,因为它是本文中探讨的每个其余随机过程的根底。 def plot\_stochastic\_processes(processes, title):    """此办法绘制具备指定题目的随机过程列表     :return:绘制两个图    """    plt.style.use(\['bmh'\])    fig, ax = plt.subplots(1)    fig.suptitle(title, fontsize=16)    ax.set_xlabel('Time, t')    ax.set_ylabel('Simulated Asset Price')    x_axis = numpy.arange(0, len(processes\[0\]), 1)    for i in range(len(processes)):        plt.plot(x_axis, processes\[i\])    plt.show()以下是此办法生成的输入示例。 def brownian\_motion\_log_returns(param):     sqrt\_delta\_sigma = math.sqrt(param.all\_delta) * param.all\_sigma    return nrand.normal(loc=0, scale=sqrt\_delta\_sigma, size=param.all_time)def brownian\_motion\_levels(param):       return convert\_to\_prices(param, brownian\_motion\_log_returns(param))应用布朗运动随机过程模仿资产价格:5条门路应用布朗运动随机过程模仿资产价格:500条门路 几何布朗运动随机过程几何布朗运动(GBM)由费舍尔布莱克和迈伦斯科尔斯推广,他们在1973年的论文“期权定价和公司负债”中应用它来推导出Black Scholes方程。几何布朗运动基本上是布朗运动,具备漂移重量和稳定率重量。公式如下 其中是资产价格S在工夫t的变动 ; 是每年预期的百分比漂移,dt代表工夫,是资产价格中预期的每日稳定率,Wt是Wiener过程,也称为布朗运动。如下所示,布朗运动代码用于几何布朗运动办法以结构Wt的序列。 以下是此办法生成的输入示例。请留神,均匀而言,生成的门路随着工夫的推移而向上漂移,并且可能的收盘价格变动较大。在这个例子中,门路以每年14%的均匀速率增长,因而预期收益率等于14%,别离为三年和一年(800天)。 应用几何布朗运动随机过程模仿资产价格。 Merton跳跃扩散随机过程Robert C. Merton是最早解决Fisher Black和Myron Scholes提出的几何布朗随机过程中一些局限性的学者之一。1997年,默顿和斯科尔斯因其工作取得了诺贝尔经济学奖。 其中是具备速率泊松过程和ÿ是对数正态分布的随机变量。 请留神,因为跳跃扩散过程引入了向下的不间断或跳跃,因而资产的均匀预期收益率略低。 应用默顿跳跃扩散几何布朗运动随机过程模仿资产价格。 Heston随机稳定率过程原始的几何布朗运动随机过程假如随工夫的稳定是恒定的。在1990年代晚期,Steven Heston放宽了这个假如,并将几何布朗运动模型扩大到包含随机稳定率。  请留神,随着工夫的推移,资产价格会变得更加不稳固,从而导致潜在资产价格在预测完结时飙升。呈现这种景象是因为我将长期均匀稳定率设定为远高于起始稳定率的数字。 应用Heston随机稳定率几何布朗运动随机过程模仿资产价格。 COX INGERSOLL ROSS随机过程在COX INGERSOLL ROSS(CIR) 随机过程是用来形容一段时间的利率变动。  其中是Wiener过程,a是过程均值回复的速率(较大的数字导致更快的均值回复过程),b是长期均匀利率,是过程的稳定率。CIR随机过程如下。  利用Cox Ingersoll Ross均值回归随机过程模仿利率。 ORNSTEIN-UHLENBECK随机过程Ornstein Uhlenbeck过程以Leonard Ornstein和George Eugene Uhlenbeck命名。Ornstein Uhlenbeck随机过程与CIR过程之间的区别在于CIR过程将随机重量乘以前一个利率值的平方根。   其中是Wiener过程,a是过程均值回复的速率(较大的数字导致更快的均值回复过程),b是长期均匀利率,是过程的稳定率。  利用Ornstein Uhlenbeck均值回归随机过程模仿利率。 衍生品定价和套期保值的随机过程随机过程在量化金融中的最大利用是衍生品定价。 当对衍生品进行定价时,大多数量子将应用两种办法中的一种。要么为他们定价建设Black Scholes模型,要么他们将应用模仿办法来预计导数的值。这两种技术都重大依赖于应用随机过程来模仿底层证券。 === 衍生定价办法一 Black ScholeBlack Scholes模型用于在一组假如下对特定类型的衍生品合约进行定价。这些假如包含:(1)存在无风险利率,任何金额能够借入或借出,(2)根底价格依据几何布朗运动随机过程,(3)进化根底不领取股息,(4)市场上没有套利机会,(5)市场交易成本为零,(6)能够买入或卖出任何数量。  在这些假如下,能够导出着名的Black Scholes偏微分方程。  Black Scholes公式以及各种模式期权定价公式的推导,是过来三十年中衍生品交易所大量增长的次要起因。 导数定价 办法二 - 模仿办法鉴于Black Scholes公式隐含的局限性和假如,通常采纳蒙特卡罗办法(模仿)来为更少的简化假如。 ...

June 11, 2021 · 1 min · jiezi

关于算法:R语言-PCA主成分分析CA对应分析夫妻职业差异和马赛克图可视化

原文链接:http://tecdat.cn/?p=22762 主成分分析法是数据挖掘中罕用的一种降维算法,是Pearson在1901年提出的,再起初由hotelling在1933年加以倒退提出的一种多变量的统计办法,其最次要的用处在于“降维”,通过析取主成分显出的最大的个别差异,也能够用来削减回归剖析和聚类分析中变量的数目,与因子分析相似。 所谓降维,就是把具备相关性的变量数目缩小,用较少的变量来取代原先变量。如果原始变量相互正交,即没有相关性,则主成分剖析没有成果。 对应剖析(CA)是实用于剖析由两个定性变量(或分类数据)造成的大型应变表的主成分剖析的扩大。本文通过析取主成分来剖析夫妻职业的个别差异。 夫妻职业数据思考以下数据,对应于一对夫妻中的职业。咱们有以下的频数表 read.table(data.csv",header=TRUE) 传统上,对于这种数据,咱们习惯于应用卡方测验,卡方间隔,以及卡方奉献来查看数据的差异性 chisq.test(M) 马赛克图Mosaic plot经常用来展现Categorical data(分类数据)(对于不同的数据类别,mosaic plot 弱小的中央在于它可能很好的展现出2个或者多个分类型变量(categorical variable)的关系. 它也能够定义为用图像的形式展现分类型数据。 当变量是类别变量时,且数目多于三个的时候,可应用马赛克图。马赛克图中,嵌套矩阵面积反比于单元格频率,其中该频率即多维列联表中的频率。色彩和暗影可示意拟合模型的残差值。 咱们能够将其后果用马赛克图来形象化。 plot(tM)丈夫在行中,妻子在列中。重要的分割是蓝色或红色,这两种色彩别离对应于 "正 "分割(比独立状况下的联结概率高)或 "负 "分割(比独立状况下的联结概率低)。 在另一个方向 plot(M)但论断与之前一样:对角线上有很强的蓝色数值。 换句话说,这些夫妻在职业方面是绝对类似和繁多的。 主成分剖析和对应剖析在对应剖析中,咱们查看概率表,在行或列中。例如,咱们能够定义行,它是概率向量 N/apply(N,1,sum)留神到 ,咱们能够写出 咱们的线向量的重心在这里 同样,留神到 , 咱们能够用矩阵的形式来写, . L0=(t(L)-Lbar)对于每一个点,咱们都将(绝对)频率作为权重进行关联,这相当于应用矩阵 。为了测量两点之间的间隔,咱们将通过概率的倒数对欧氏间隔进行加权, 。两条线之间的间隔是 而后咱们将用这些不同的权重做主成分剖析。从矩阵的角度来看 咱们留神到特征向量,咱们定义了主成分 对线条的前两个成分的投影,在此给出了 PCA(L0,scal=FALSE 咱们的想法是将对应于行的个体进行可视化。在第二步中,咱们做雷同的事件,在列中 N/apply(N,2,sum))核心: C0=C-Cbar主成分剖析而后咱们能够做一个主成分剖析 PCA(matC0看集体的可视化。 对应剖析对应剖析的微妙之处在于,咱们 "能够 "在同一立体上示意集体的两个投影。 > plot(C\[,1:2\]) 后果如下 > afc=CA(N)   最受欢迎的见解 1.matlab偏最小二乘回归(PLSR)和主成分回归(PCR) 2.R语言高维数据的主成分pca、 t-SNE算法降维与可视化剖析 3.主成分剖析(PCA)基本原理及剖析实例 4.基于R语言实现LASSO回归剖析 5.应用LASSO回归预测股票收益数据分析 6.r语言中对lasso回归,ridge岭回归和elastic-net模型 ...

June 11, 2021 · 1 min · jiezi

关于算法:MATLAB中用BP神经网络预测人体脂肪百分比数据

原文链接:http://tecdat.cn/?p=22739 这个例子阐明了一个函数拟合的神经网络如何依据测量后果来预计脂肪百分比(BFP) 。 问题:预计脂肪百分比在这个例子中,咱们试图建设一个神经网络来预计一个人的脂肪百分比,这个人由13个物理属性形容。 年龄体重身高颈围胸围腹部周长臀围大腿周长膝盖周长踝关节周长肱二头肌(舒展)周长前臂周长腕围这是一个拟合问题的例子,其中输出与相干的指标输入相匹配,咱们心愿创立一个神经网络,它不仅能够预计已知的指标,给定已知的输出,而且还能够泛化,来精确预计未知数据的后果。 为什么是神经网络?神经网络在函数拟合问题上十分杰出。一个有足够多的元素(称为神经元)的神经网络能够以任意的精度拟合任何数据。它们特地适宜于解决非线性问题。鉴于事实世界的非线性性质,如身材脂肪的减少,神经网络是解决该问题的不错办法。 十三个物理属性将作为神经网络的输出,而体脂百分比将是指标。 该网络通过应用曾经晓得体脂百分比的人体数据来建设模型,来训练它产生目标值。 筹备数据函数拟合的数据是两个矩阵,即输出矩阵X和指标矩阵T。 输出矩阵的每一列将有13个元素,代表一个已知脂肪百分比的身材数据。 指标矩阵的每一对应列将有一个元素,代表脂肪百分比。 加载数据集后,咱们能够查看输出X和指标变量T的大小。 请留神,X和T都有252列。这些代表了252种体质(输出变量)和相干的体脂百分比(指标变量)。 输出矩阵X有13行,代表13个属性。指标矩阵T只有一行,因为对于每个例子咱们只有一个冀望的输入,即脂肪百分比。 size(X)size(T) 用神经网络拟合函数下一步是创立一个神经网络,它将学习预计脂肪百分比。 因为神经网络以随机的初始权重开始,这个例子每次运行的后果都会略有不同。设置随机种子是为了防止这种随机性。 setdemorandstream(82)两层(即一个暗藏层)前馈神经网络能够拟合任何输出-输入关系,只有暗藏层有足够的神经元。不属于输入层的层被称为暗藏层。 在这个例子中,咱们将尝试应用由15个神经元组成的繁多暗藏层。一般来说,更难的问题须要更多的神经元,兴许须要更多的层。较简略的问题则须要较少的神经元。 输出和输入的大小为0,因为神经网络还没有被配置为与咱们的输出和指标数据相匹配。将在网络被训练时进行。 net = fitnet(15);view(net) 当初,网络曾经筹备好被训练了。样本被主动划分为训练集、验证集和测试集。训练集被用来训练网络。只有网络在验证集上持续改良,训练就会持续。测试集提供了一个齐全独立的网络准确性的衡量标准。 神经网络训练工具显示正在训练的网络和用于训练的算法。它还显示了训练期间的训练状态,进行训练的规范将以绿色突出显示。 底部的按钮能够关上有用的图表,这些图表能够在训练中和训练后关上。算法名称和绘图按钮旁边的链接能够关上对于这些主题的文档。  train(net,X,T); 要看网络的性能在训练中是如何进步的,能够点击训练工具中的 "性能 "按钮。 性能是以均方误差来掂量的,并以对数比例显示。随着网络的训练,误差迅速减小。训练集、验证集和测试集的性能别离显示。最终的网络是在验证集上体现最好的网络。 plotperform(tr) 测试神经网络当初能够测量训练后的神经网络的均方误差与测试样本的关系。咱们能够理解该网络在利用于实在数据时的体现如何。 mse(net,testT,testY) 另一个掂量神经网络对数据拟合水平的办法是回归图。这里的回归图是在所有样本中绘制的。 回归图显示了理论网络输入与目标值的关系。如果网络曾经学会了很好地拟合数据,那么这个输入-指标关系的线性拟合应该与图的左下角和右上角严密相交。 如果不是这样,那么进一步的训练,或者训练一个有更多暗藏神经元的网络。 plot(T,Y) 另一个掂量神经网络对数据的拟合水平的办法是误差直方图。这显示了误差大小是如何散布的。通常状况下,大多数误差靠近零,很少有误差远离零。 e = T - Y;hist(e) 这个例子阐明了如何设计一个神经网络,从身材特色来预计脂肪百分比。 最受欢迎的见解 1.r语言用神经网络改良nelson-siegel模型拟合收益率曲线剖析 2.r语言实现拟合神经网络预测和后果可视化 3.python用遗传算法-神经网络-含糊逻辑控制算法对乐透剖析 4.用于nlp的python:应用keras的多标签文本lstm神经网络分类 5.用r语言实现神经网络预测股票实例 6.R语言基于Keras的小数据集深度学习图像分类 7.用于NLP的seq2seq模型实例用Keras实现神经机器翻译 8.python中基于网格搜索算法优化的深度学习模型剖析糖 9.matlab应用贝叶斯优化的深度学习

June 10, 2021 · 1 min · jiezi

关于算法:R语言公交地铁路线进出站数据挖掘网络图可视化

原文链接:http://tecdat.cn/?p=22751对于宏大的公交地铁路线信息的数据挖掘,个别软件遇到的问题次要有两点:1.对于文本信息的开掘,特地是中文词汇的开掘,不足成熟的工具或者软件包,2.对于大数据量,个别软件的读取和解决会遇到问题。即便一个月的局部区域路线信息也会达到几百m以上,因而,对于这类数据,无论从算法运行还是数据读取来说一般的SQL语言或者matlab软件解决起来都乏善可陈。对于这类数据,咱们个别用r软件能够轻松实现读取,数据挖掘以及可视化的过程。 例如对于上面这样的车站数据: 和近600M的进出站信息的数据, 如果要实现每隔一段时间的对应路线的进出站人数整顿以及可视化的过程,咱们能够进行一下的步骤进行剖析: 首先咱们进行数据的读取和预处理 install.packages("dplyr")library("dplyr")#读取dplyr包用以排序###对数据读取data=read.table("E:\\\201501一卡通进出站.txt",stringsAsFactors=F)##对数据列进行命名colnames(data)=c("逻辑卡号","交易日期" ,"交易工夫","票种","交易代码","交易车站","上次交易车站")###对数据进行预处理for( ii in 20150101:20150131){#每天的数据data1=data\[which(data\[,2\]==ii),\]#筛选出日期为20150101这天的数据data2=data1\[,c(2,3,6,7)\]#筛选出"交易日期" ,"交易工夫", "交易车站","上次交易车站"的数据data2#查看数据data2=data2\[order(data2$交易车站),\]line1=data2\[substr(data2$交易车站,1,1)=="1",\]#1号线line2=data2\[substr(data2$交易车站,1,1)=="2",\]#2号线###筛选出车站为243bus=unique(data2\[,3\])####################每个站的数据for(busi in 1:length(bus)){index=which(data2\[,3\]==bus\[busi\])#筛选出车站为243的数据行号data3=data2\[index,\]#获取交易车站为243的数据###data3=data2\[order(data2$交易车站),\]#如果不筛选车站,间接按交易车站递增排序data4=arrange(data3,交易日期,交易工夫)#对工夫排序,先按年份递增排序,而后依照工夫递增排序###按每十分钟工夫宰割for (time in 6:21){for(i in 1:6){index=intersect(which(data4\[,2\]>time\*10000+(i-1)\*1000),which(data4\[,2\]<=time\*10000+1000\*i))datat=data4\[index,\]outnum=length(which(datat\[,4\]!=0))innum=length(which(datat\[,4\]==0))if(i!=6)cat(file=paste("E:\\\",bus\[busi\],"车站",ii,"日一卡通进出站工夫.txt"),append=TRUE,ii,"日",time,"点",i-1,"0分到",i,"0分的出站人数为",outnum," ","进站人数为",innum,"\\n")else cat(file=paste("E:\\\",bus\[busi\],"车站",ii,"日一卡通进出站工夫.txt"),append=TRUE,ii,"日",time,"点",i-1,"0分到",time+1,"点0分的出站人数为",outnum," ","进站人数为",innum,"\\n")#cat(file="E:\\\243车站一卡通进出站工夫.txt",append=TRUE,time,"点",i-1,"0分到",time+1,"点0分的出站人数为",outnum," ","进站人数为",innum,"\\n")}}#筛选出出站人数dataout=data3\[which(data3\[,4\]!=0),\]#上次交易车站不为0,为出站人数datain=data3\[which(data3\[,4\]==0),\]###将数据进行输入write.table(data4,paste("E:\\\",ii,"日 ",bus\[busi\],"车站一卡通进出站整顿.txt"))#将数据整顿好输入到指定的目录文件名}}####################################################################################3################1,2号线##########data2=data2\[order(data2$交易车站),\]line1=data2\[substr(data2$交易车站,1,1)=="1",\]#1号线line2=data2\[substr(data2$交易车站,1,1)=="2",\]#2号线#########1号线data4=arrange(line1,交易日期,交易工夫)#对工夫排序,先按年份递增排序,而后依照工夫递增排序###按每十分钟工夫宰割cat(file="E:\\\1号线一卡通进出站工夫.txt",append=TRUE, " 点", " 分"," 出站人数", " ","进站人数 " ,"\\n")for (time in 6:21){for(i in 1:6){index=intersect(which(data4\[,2\]>time\*10000+(i-1)\*1000),which(data4\[,2\]<=time\*10000+1000\*i))datat=data4\[index,\]outnum=length(which(datat\[,4\]!=0))innum=length(which(datat\[,4\]==0))if(i!=6)cat(file="E:\\\1号线一卡通进出站工夫.txt",append=TRUE,time," ",i-1,"0 "," ",outnum," "," ",innum,"\\n")#cat(time,"点",i-1,"0分到",i,"0分的出站人数为",outnum," ","进站人数为",innum,"\\n")else cat(file="E:\\\1号线一卡通进出站工夫.txt",append=TRUE,time," ",i-1,"0 "," ",outnum," "," ",innum,"\\n")#cat(time,"点",i-1,"0分到",time+1,"点0分的出站人数为",outnum," ","进站人数为",innum,"\\n") ##cat(file="E:\\\20150101日243车站一卡通进出站工夫.txt",append=TRUE,time,"点",i-1,"0分到",time+1,"点0分的出站人数为",outnum," ","进站人数为",innum,"\\n")}}#筛选出出站人数dataout=data3\[which(data3\[,4\]!=0),\]#上次交易车站不为0,为出站人数datain=data3\[which(data3\[,4\]==0),\]numout=dim(dataout)\[1\]#出站人数总和numin=dim(datain)\[1\]#进站人数总和###将数据进行输入write.table(data4,"E:\\\1号线一卡通进出站整顿.txt")#将数据整顿好输入到指定的目录文件名########2号线data4=arrange(line2,交易日期,交易工夫)#对工夫排序,先按年份递增排序,而后依照工夫递增排序###按每十分钟工夫宰割cat(file="E:\\\2号线一卡通进出站工夫.txt",append=TRUE, " 点", " 分"," 出站人数", " ","进站人数 " ,"\\n")for (time in 6:21){for(i in 1:6){index=intersect(which(data4\[,2\]>time\*10000+(i-1)\*1000),which(data4\[,2\]<=time\*10000+1000\*i))datat=data4\[index,\]outnum=length(which(datat\[,4\]!=0))innum=length(which(datat\[,4\]==0))if(i!=6)cat(file="E:\\\2号线一卡通进出站工夫.txt",append=TRUE,time," ",i-1,"0 "," ",outnum," "," ",innum,"\\n")#cat(time,"点",i-1,"0分到",i,"0分的出站人数为",outnum," ","进站人数为",innum,"\\n")else cat(file="E:\\\2号线一卡通进出站工夫.txt",append=TRUE,time," ",i-1,"0 ", " ",outnum," "," ",innum,"\\n")#cat(time,"点",i-1,"0分到",time+1,"点0分的出站人数为",outnum," ","进站人数为",innum,"\\n") ##cat(file="E:\\\TB related\\\Service\\\temp\\\20150101日243车站一卡通进出站工夫.txt",append=TRUE,time,"点",i-1,"0分到",time+1,"点0分的出站人数为",outnum," ","进站人数为",innum,"\\n")}}#筛选出出站人数dataout=data3\[which(data3\[,4\]!=0),\]#上次交易车站不为0,为出站人数datain=data3\[which(data3\[,4\]==0),\]###将数据进行输入write.table(data4,"E:\\\2号线一卡通进出站整顿.txt")#将数据整顿好输入到指定的目录文件名#########1,2总和data4=arrange(line1,交易日期,交易工夫)#对工夫排序,先按年份递增排序,而后依照工夫递增排序data44=arrange(line2,交易日期,交易工夫)#对工夫排序,先按年份递增排序,而后依照工夫递增排序cat(file="E:\\\1,2号线一卡通进出站工夫.txt",append=TRUE, " 点", " 分"," 出站人数", " ","进站人数 " ,"\\n")for (time in 6:21){for(i in 1:6){index=intersect(which(data4\[,2\]>time\*10000+(i-1)\*1000),which(data4\[,2\]<=time\*10000+1000\*i))index2=intersect(which(data44\[,2\]>time\*10000+(i-1)\*1000),which(data44\[,2\]<=time\*10000+1000\*i))datat=data4\[index,\]datat1=data44\[index2,\]outnum=length(which(datat\[,4\]!=0))outnum1=length(which(datat1\[,4\]!=0))innum=length(which(datat\[,4\]==0))innum1=length(which(datat1\[,4\]==0))if(i!=6)cat(file="E:\\\1,2号线一卡通进出站工夫.txt",append=TRUE,time," ",i-1,"0 "," ",outnum+outnum1," "," ",innum+innum1,"\\n")#cat(time,"点",i-1,"0分到",i,"0分的出站人数为",outnum," ","进站人数为",innum,"\\n")else cat(file="E:\\\1,2号线一卡通进出站工夫.txt",append=TRUE,time," ",i-1,"0 ", " ",outnum+outnum1," "," ",innum+innum1,"\\n")#cat(time,"点",i-1,"0分到",time+1,"点0分的出站人数为",outnum," ","进站人数为",innum,"\\n") ##cat(file="E:\\\20150101日243车站一卡通进出站工夫.txt",append=TRUE,time,"点",i-1,"0分到",time+1,"点0分的出站人数为",outnum," ","进站人数为",innum,"\\n")}}}通过以上过程,咱们能够将整顿后的数据输入到对应的文件中: 以及交通路线的可视化过程; 对于交通路线的网络图来说,r中igraph包确实是实现利器: #读取数据ljhdat1=readLines("E:/ shanghai_1.txt" )ljhdat2=readLines("E:/ shanghai_2.txt")ljhdat3=readLines("E:/ shanghai_3.txt")ljhdat4=readLines("E:/ shanghai_4.txt")ljhdat5=readLines("E:/ shanghai_5.txt")bus=""#建设巴士信息库for(i in 1:length(ljhdat1)){if(ljhdat1\[i\]=="")bus=c(bus,ljhdat1\[i-1\])#提取每个巴士的路线信息}for(i in 1:length(ljhdat2)){if(ljhdat2\[i\]=="")bus=c(bus,ljhdat2\[i-1\])#提取每个巴士的路线信息}for(i in 1:length(ljhdat3)){if(ljhdat3\[i\]=="")bus=c(bus,ljhdat3\[i-1\])#提取每个巴士的路线信息}for(i in 1:length(ljhdat4)){if(ljhdat4\[i\]=="")bus=c(bus,ljhdat4\[i-1\])#提取每个巴士的路线信息}for(i in 1:length(ljhdat5)){if(ljhdat5\[i\]=="")bus=c(bus,ljhdat5\[i-1\])#提取每个巴士的路线信息}bus;bus=bus\[-1\]route=list(0)#建设路线信息#######################宰割路线失去站点信息 #################################route\[\[1\]\]=unlist(strsplit(bus\[1\],split=" "))\[-1\]route\[\[1\]\]=route\[\[1\]\]\[-which(route\[\[1\]\]=="#")\]#删除#号n=length(route\[\[1\]\])library(igraph)d = data.frame(route\[\[1\]\]\[1:n-1\] ,route\[\[1\]\]\[2:n \]#建设邻接矩阵)g = graph.data.frame(d, directed = TRUE)plot(g )################################宰割所有路线失去站点信息###########################library(igraph)route1=character(0); 对于最初生成的网络图因为路线泛滥,在查看的过程中能够通过设置可视化参数来进一步优化。 最受欢迎的见解 1.数据类岗位需要的数据面 2.探析大数据期刊文章钻研热点 3.机器学习助推快时尚精准销售预测 4.用机器学习辨认一直变动的股市情况—隐马尔科夫模型(HMM)的利用 5.数据凝听人民网留言板的那些“网事” 6.在r语言中应用GAM(狭义相加模型)进行电力负荷工夫序列剖析 7.用数据解读体育决策:开掘体育赛事新价值 8.把握出租车行驶的数据脉搏 9.智能门锁“剁手”数据攻略

June 10, 2021 · 1 min · jiezi

关于算法:R语言关联规则模型Apriori算法挖掘杂货店的交易数据与交互可视化

原文链接:http://tecdat.cn/?p=22732 关联规定开掘是一种无监督的学习办法,从交易数据中开掘规定。它有助于找出数据集中的关系和一起呈现的我的项目。在这篇文章中,我将解释如何在R中提取关联规定。 关联规定模型实用于交易数据。交易数据的一个例子能够是客户的购物历史。 数据分析的第一件事是理解指标数据结构和内容。出于学习的目标,我认为应用一个简略的数据集更好。一旦咱们晓得了这个模型,就能够很容易地把它利用于更简单的数据集。 在这里,咱们应用杂货店的交易数据。首先,咱们创立一个数据框并将其转换为交易类型。 读取数据n=500 # 交易数量trans <- data.frame() # 收集数据的数据框架创立数据并将其收集到交易数据框中。 for(i in 1:n){  count <- sample(1:3, 1) # 从1到3的物品计数  如果(i %% 2 == 1)  {    if(!add_product %in% selected)    {      tran <- data.frame(items = add_product, tid = i)查看交易数据框中的数据。 接下来,咱们须要将生成的数据框转换为交易数据类型。   as(split(\[, "items"\], \[, "tid"\]), "transa") 为了查看交易数据的内容,咱们应用 inspect() 命令。  开掘规定sort(rules_1, dby = "confidence") ....... 咱们从下面的列表中获取第一个rhs项(规定后项)来查看该项的规定。但如果你晓得指标我的项目,能够在参数中只写rhs="melon"。   inspect(rules_1@rhs\[1\]) > rhs_item <- gsub("\\\}","", rhs) 咱们为咱们的rhs_item建设规定 按 "置信度 "排序并查看规定 sort(rules_2, "confidence") 后果可视化最初,咱们从规定集_2中绘制出前5条规定。 > plot(rules_2\[1:5\]) 绘制全副规定 交互可视化绘制出前5条规定 precision  =  3igraphLayout  =  layout_nicelylist(nodes = nodes, edges = edges, nodesToDataframe = nodesToDataframe,             edgesToDataframe = edgesToDataframe,x$legend <- legend    htmlwidgets::createWidget( x, width = width,         height = height) 绘制全副规定 最受欢迎的见解 1.采纳spss-modeler的web简单网络对所有腧穴进行剖析 2.用R语言和python进行社交网络中的社区检测 3.R语言文本开掘NASA数据网络剖析,tf-idf和主题建模 4.在R语言中应用航空公司简单网络对疫情进行建模 5.python附属关系图模型 基于模型的网络中密集重叠社区检测 6.应用Python和SAS Viya剖析社交网络 7.关联网络分析:已迁离北京外来人口的数据画像 8.情感语义网络:游记数据感知游览目的地形象 9.用关联规定数据挖掘摸索药物配伍中的法则

June 9, 2021 · 1 min · jiezi

关于算法:大数据部落R语言基于决策树的银行信贷风险预警模型

原文链接:http://tecdat.cn/?p=2783引言我国经济高速倒退,集体信贷业务也随着疾速倒退,而集体信贷业务对进步内需,促成生产也有拉动作用。有正必有反,在集体信贷业务规模不断扩大的同时,信贷的守约等危险问题也日益突出,肯定水平上制约着我国的信贷市场的衰弱倒退。 挑战近年来,个人消费贷款的类型呈现出多元化的变动与倒退,由本来的繁多贷款品种倒退到明天各式各样的贷款品种,汽车按揭贷款,教育助学贷款,耐用消费品贷款(家电,电脑,厨具等),结婚贷款等在我国陆续发展。守约危险是指债务人因为各种起因不能按时偿还贷款债权的危险,对于商业银行来说,守约危险次要是指因为贷款人得还款能力降落或者信用程度升高从而守约。 实践相干概述 ============= 决策树决策树(Decision Tree)是用于分类和预测的次要技术,它着眼于从一组无规则的事例推理出决策树示意模式的分类规定,采纳自顶向下的递归形式,在决策树的外部节点进行属性值的比拟,并依据不同属性判断从该节点向下分支,在决策树的叶节点失去论断。因而,从根节点到叶节点就对应着一条正当规定,整棵树就对应着一组表达式规定。决策树是数据分析中一种常常要用到且十分重要的技术,既可能用于数据分析,也可能作预测。基于决策树算法的一个最大的长处是它在学习过程中不须要使用者理解很多背景常识,只有训练事例可能用属性即论断的形式表达出来,就能应用该算法进行学习。 基于决策树的分类模型有如下几个特点:(1)决策树办法构造简略,,便于了解;(2)决策树模型效率高,对训练集数据量较大的状况较为适宜;(3)树办法通常不须要承受训练集数据外的常识;(4)决策树办法具备较高的分类精确度。 预警方案设计数据在进行操作的过程中,咱们一共分了四步,别离是数据分析和拆散数据集,建设训练数据集决策树,评估模型性能,进步模型性能。 数据分析和拆散数据集在数据进行剖析时,能够从中晓得所有申请者的守约状况在拆散数据集这一步,咱们将数据分成两局部:用来建设决策树训练数据集和用来评估模型性能的测试数据集,依照80%训练集和20%测试集来拆散样本。总的来看,这两个数据集的比例是大致相同的,所以拆散的两个数据集是正当的。 训练数据集 测试数据集 守约 不守约 守约 不守约 0.31625 0.68375 0.235 0.765 25300 54700 4700 15300 表1 建设训练数据集决策树 图1 图1是训练数据集决策树的根本状况。 图2 图2是训练数据集的局部决策树。 因为咱们咱们的数据宏大,生成的决策树十分的大,上图的输入显示了决策树的局部分枝,咱们用简略的语言来举例解释前五行: (1)如果支票账户余额是未知的,则归类为不太可能守约。 (2)否则,如果支票账户余额少于0,或者1〜200之间; (3)月贷款期限少于或等于11个月的 (4)信用记录是危及,好的,优良的,差的,归类为不太可能守约。 (5)信用记录是十分优良的,就归类为很有可能守约。 括号中的数字示意合乎该决策准则的案例的数量以及依据该决策不正确分类的案例的数量。 在决策树中咱们不难发现,为什么一个申请者的信用记录十分优良,却被判成很有可能守约,而那些支票余额未知的申请者却不太可能守约呢?这些决策看似没有逻辑意义,但其实它们可能反映了数据中的一个实在模式,或者它们可能是统计中的异样值。 在决策树生成后,输入一个混同矩阵,这是一个穿插列表,示意模型对训练数据谬误分类的记录数: 家喻户晓,决策树有一种适度拟合训练数据模型的偏向,因为这个起因,训练数据中报告的错误率可能过于乐观,因而,基于测试数据集来评估决策树模型是十分重要的。 评估模型性能在这一步中应用测试数据集做预测,后果如图3所示。 理论值 预测值 行共计 不守约 守约 不守约 12500 0.625 2800 0.140 15300 守约 2300 0.115 2400 0.120 4700 列共计 14800 5200 20000 表2 从表2中能够得悉,在测试集样本中,理论不守约被判为不守约的数量,占比为0.625;理论不守约被判为守约的数量,占比为0.140;而理论守约被判为不守约的数量占比为0.115;理论守约被判为守约的数量,占比为0.120。 从银行角度登程,申请人理论不守约被判为守约的影响远没有理论守约被判为不守约的影响大。起因有以下几点:一,申请人理论不守约被判为守约,银行可能不会通过贷款申请,从而不发放贷款,这样银行不会蒙受贷款发放进来却收不回来的危险,只是少收局部贷款利息而已。二,申请人理论守约被判为不守约,银行可能会批准申请人的贷款申请批准发放贷款,在发放贷款后,被判为不守约的申请人可能会因为不足诚信,不恪守合约规定按时还款,这样银行不仅损失了利息的支出,连本金都有可能收不回来三,在测试数据集数据中,理论不守约的数量,占比0.183;而理论守约的数量,被判为不守约的数量,占比0.489。 由以上三点能够得出结论,基于训练测试集得出的模型,用测试数据集中的数据进行测验,最终进去的后果并不是很好。从银行角度登程,如果应用该模型援用到理论生存中,会因为申请人理论守约被误判为不守约的概率太大,而使银行做出谬误的决定,从而产生损失。 ...

June 9, 2021 · 1 min · jiezi

关于算法:Neo4j图计算源码分析环境配置

Neo4j图计算源码剖析neo4j提供了弱小的OLAP能力,在数据库上反对多种图算法,包含门路、核心度、社区发现、类似度等算法。实践上来讲,neo4j通过图计算的插件能够计算2^31 -1 个顶点的数据,也也就是21亿左右。 装置Neo4j社区幅员数据库拉取neo4j图计算源码仓库到本地https://github.com/neo4j-contrib/neo4j-graph-algorithms.git目前该算法包的最新版本为3.5,对应的neo4j数据库版本也为3.5.不过该仓库曾经进行更新了,最新的neo4j算法反对仓库是graph-data-science,用作科学计算库,蕴含了更多的算法,机器学习等。 本次源码剖析还是基于图算法包3.5版本的,倡议应用对应版本的Neo4j数据库。 导入Neo4j-graph-algorithms算法库源码这里能够应用IntelliJ IDEA,间接open 或者 import已存在的源码我的项目,将我的项目增加为maven我的项目。 neo4j算法库反对很多种算法,这些算法都是基于图论的算法,在neo4j控制台应用CALL algo.list()能够看到所有算法的品种以及每种算法的应用形式。在doc模块具体记录了每个算法的原理,参数,计算用例。文档基于asciidoc语法格局编写,有趣味的敌人能够装置adoc插件查看的。下载neo4j算法领导手册《graph-algorithms-book》 算法的外围模块是core以及algo两个子maven我的项目,当前我会基于test单元测试类模块作为入口对整个算法体系进行剖析。

June 9, 2021 · 1 min · jiezi

关于算法:R语言Lasso回归模型变量选择和糖尿病发展预测模型

原文链接:http://tecdat.cn/?p=22721 Lease Absolute Shrinkage and Selection Operator(LASSO)在给定的模型上执行正则化和变量抉择。依据惩办项的大小,LASSO将不太相干的预测因子放大到(可能)零。因而,它使咱们可能思考一个更扼要的模型。在这组练习中,咱们将在R中实现LASSO回归。 练习1加载糖尿病数据集。这有对于糖尿病的病人程度的数据。数据为n = 442名糖尿病患者中的每个人取得了10个基线变量、年龄、性别、体重指数、均匀血压和6个血清测量值,以及感兴趣的反馈,即一年后疾病停顿的定量测量。" 接下来,加载包用来实现LASSO。 head(data) 练习2数据集有三个矩阵x、x2和y。x是较小的自变量集,而x2蕴含残缺的自变量集以及二次和交互项。 查看每个预测因素与因变量的关系。生成独自的散点图,所有预测因子的最佳拟合线在x中,y在纵轴上。用一个循环来主动实现这个过程。 summary(x) for(i in 1:10){  plot(x\[,i\], y)  abline(lm(y~x\[,i\])}  练习3应用OLS将y与x中的预测因子进行回归。咱们将用这个后果作为比拟的基准。 lm(y ~ x)  练习4绘制x的每个变量系数与向量的L1准则的门路。该图表明每个系数在哪个阶段缩减为零。 plot(model_lasso) 练习5失去穿插验证曲线和最小化均匀穿插验证误差的lambda的值。 plot(cv_fit) 练习6应用上一个练习中的lambda的最小值,失去预计的矩阵。留神,有些系数曾经缩减为零。这表明哪些预测因子在解释y的变动方面是重要的。 > fit$beta 练习7为了失去一个更扼要的模型,咱们能够应用一个更高的值,即在最小值的一个标准误差之内。用这个lambda值来失去系数。留神,当初有更多的系数被缩减为零。 lambda.1se  beta 练习8如前所述,x2蕴含更多的预测因子。应用OLS,将y回归到x2,并评估后果。 summary(ols2)  练习9对新模型反复练习-4。 lasso(x2, y)plot(model_lasso1)  练习10对新模型反复练习5和6,看看哪些系数被缩减为零。当有很多候选变量时,这是放大重要预测变量的无效办法。 plot(cv_fit1) beta  最受欢迎的见解 1.R语言多元Logistic逻辑回归 利用案例 2.面板平滑转移回归(PSTR)剖析案例实现 3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR) 4.R语言泊松Poisson回归模型剖析案例 5.R语言回归中的Hosmer-Lemeshow拟合优度测验 6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现 7.在R语言中实现Logistic逻辑回归 8.python用线性回归预测股票价格 9.R语言如何在生存剖析与Cox回归中计算IDI,NRI指标`

June 8, 2021 · 1 min · jiezi

关于算法:R语言中的block-Gibbs吉布斯采样贝叶斯多元线性回归

原文链接:http://tecdat.cn/?p=11617原文出处:拓端数据部落公众号在这篇文章中,我将对多元线性回归应用block的Gibbs采样,得出block的Gibbs采样所需的条件后验散布。而后,对采样器进行编码,并应用模仿数据对其进行测试。  贝叶斯模型假如咱们有一个样本量的主题。 贝叶斯多元回归假如该向量是从多元正态分布中提取的 ,通过应用恒等矩阵,咱们假如独立的察看后果。 到目前为止,这与多元正态回归雷同。 则将概率最大化可得出以下解 : 贝叶斯模型是通过指定为一个先验散布失去 。在此示例中,我将在以下状况下应用 先验值  block Gibbs在对采样器进行编码之前,咱们须要导出Gibbs采样器的 每个参数的后验条件散布。 条件后验取更多的线性代数。 这是一个十分丑陋和直观的后果。 条件后验的协方差矩阵是协方差矩阵的预计, 还要留神,条件后验是一个多元散布。因而,在Gibbs采样器的每次迭代中,咱们从后验绘制出一个残缺的矢量 。 模仿我模仿的 后果向量。  运行 Gibbs采样器 会生成对实在系数和方差参数的预计。运行了500,000次迭代。周期为100,000次,10次迭代。 以下是MCMC链的图,其中实在值用红线示意。 # 计算后验摘要统计信息post_dist %>%  group_by(para) %>%  summarise(median=median(draw),            lwr=quantile(.025),            upr=quantile(.975)) %>% # 合并汇总统计信息post\_dist <- post\_dist %>%  left\_join(post\_sum_stats, by='param') # 绘制MCMC链ggplot(post_dist,aes(x=iter,y=dra)) +  geom_line() +  geom\_hline(aes(yintercept=true\_vals)) 这是修整后参数的后验散布: ggplot(post_dist,aes(x=draw)) +  geom_histogram(aes(x=draw),bins=50) +  geom\_vline(aes(xintercept = true\_vals)) 仿佛可能取得这些参数的正当后验预计。 为了确保贝叶斯预计器失常工作,我对1,000个模仿数据集反复了此过程。 这将产生1,000组后验均值和1,000组95%置信区间。均匀而言,这1000个后验均值应以实在值为核心。均匀而言,实在参数值应在95%的工夫的置信区间内。 以下是这些评估的摘要。 “预计平均值”列是所有1,000个模仿中的均匀后验平均值。偏差百分比均小于5%。对于所有参数,95%CI的覆盖率约为95%。 扩大 咱们能够对该模型进行许多扩大。例如,能够应用除正态分布外的其余散布来拟合不同类型的后果。 例如,如果咱们有二元数据,则能够将其建模为: 而后在上放一个先验散布。这个想法将贝叶斯线性回归推广到贝叶斯GLM。 在本文中概述的线性状况下,能够更灵便地对协方差矩阵建模。相同,假如协方差矩阵是对角线且具备单个公共方差。这是多元线性回归中的同方差假如。如果数据是分类的(例如,每个受试者有多个察看后果),咱们能够应用反Wishart散布来建模整个协方差矩阵。 最受欢迎的见解  1.matlab应用贝叶斯优化的深度学习 2.matlab贝叶斯隐马尔可夫hmm模型实现 3.R语言Gibbs抽样的贝叶斯简略线性回归仿真 4.R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归 5.R语言中的Stan概率编程MCMC采样的贝叶斯模型 6.Python用PyMC3实现贝叶斯线性回归模型 7.R语言应用贝叶斯 层次模型进行空间数据分析 8.R语言随机搜寻变量抉择SSVS预计贝叶斯向量自回归(BVAR)模型 9.matlab贝叶斯隐马尔可夫hmm模型实现

June 8, 2021 · 1 min · jiezi

关于算法:一文搞懂全排列组合子集问题建议收藏

前言Hello,大家好,我是bigsai,long time no see!在刷题和面试过程中,咱们常常遇到一些排列组合类的问题,而全排列、组合、子集等问题更是十分经典问题。本篇文章就带你彻底搞懂全排列! 求全排列? 全排列即:n个元素取n个元素(所有元素)的所有排列组合状况。 求组合? 组合即:n个元素取m个元素的所有组合状况(非排列)。 求子集? 子集即:n个元素的所有子集(所有可能的组合状况)。 总的来说全排列数值个数是所有元素,不同的是排列程序;而组合是选取固定个数的组合状况(不看排列);子集是对组合拓展,所有可能的组合状况(同不思考排列)。 当然,这三种问题,有相似之处又略有所不同,咱们接触到的全排列可能更多,所以你能够把组合和子集问题认为是全排列的拓展变形。且问题可能会遇到待处理字符是否有反复的状况。采取不同的策略去去重也是相当要害和重要的!在各个问题的具体求解上办法可能不少,在全排列上最风行的就是邻里调换法和回溯法,而其余的组合和子集问题是经典回溯问题。而本篇最重要和根底的就是要把握这两种办法实现的无反复全排列,其余的都是基于这个进行变换和拓展。 全排列问题全排列,元素总数为最大,不同是排列的程序。 无反复序列的全排列这个问题刚好在力扣46题是原题的,大家学完能够去a试试。 问题形容: 给定一个 没有反复 数字的序列,返回其所有可能的全排列。示例: 输出: [1,2,3]输入:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]回溯法实现无反复全排列 回溯算法用来解决搜寻问题,而全排列刚好也是一种搜寻问题,先回顾一下什么是回溯算法: 回溯算法实际上一个相似枚举的搜寻尝试过程,次要是在搜寻尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的门路.而全排列刚好能够应用试探的办法去枚举所有中可能性。一个长度为n的序列或者汇合。它的所有排列组合的可能性共有n!种。具体的试探策略如下: 从待选汇合中选取第一个元素(共有n种状况),并标记该元素曾经被应用不能再应用。在步骤1的根底上进行递归到下一层,从残余n-1个元素中依照1的办法找到一个元素并标记,持续向下递归。当所有元素被标记后,程序收集被标记的元素存储到后果中,以后层递归完结,回到上一层(同时将以后层标记的元素革除标记)。这样始终执行到最初。回溯的流程如果从伪代码流程大抵为这样: 递归函数: 如果汇合所有元素被标记: 将长期贮存增加到后果集中 否则: 从汇合中未标记的元素中选取一个存储到长期汇合中 标记该元素被应用 下一层递归函数 (这层递归完结)标记该元素未被应用如果用序列 1 2 3 4来示意这么回溯的一个过程,能够用这张图来显示: 用代码来实现思路也是比拟多的,须要一个List去存储长期后果是很有必要的,然而对于原汇合咱们标记也有两种解决思路,第一种是应用List存储汇合,应用过就移除而后递归下一层,递归结束后再增加到原来地位。另一种思路就是应用固定数组存储,应用过对应地位应用一个boolean数组对应地位标记一下,递归完结后再还原。因为List频繁查找插入删除效率个别比拟低,所以咱们个别应用一个boolean数组去标记该地位元素是否被应用。 具体实现的代码为: List<List<Integer>> list;public List<List<Integer>> permuteUnique(int[] nums) { list=new ArrayList<List<Integer>>();//最终的后果 List<Integer> team=new ArrayList<Integer>();//回溯过程收集元素 boolean jud[]=new boolean[nums.length];//用来标记 dfs(jud, nums, team, 0); return list;}private void dfs(boolean[] jud, int[] nums, List<Integer> team, int index) { int len = nums.length; if (index == len)// 进行 { list.add(new ArrayList<Integer>(team)); } else for (int i = 0; i < len; i++) { if (jud[i]) //以后数字被用过 以后即不可用 continue; team.add(nums[i]); jud[i]=true;//标记该元素被应用 dfs(jud, nums, team, index + 1); jud[i] = false;// 还原 team.remove(index);//将后果移除长期汇合 }}批改一下输入的后果和下面思维导图也是统一的: ...

June 8, 2021 · 4 min · jiezi

关于算法:oCPX简介广告界的无人驾驶技术

oCPX诞生历程 互联网广告最早呈现的时候会让广告主按工夫长度去买断一个展现地位的广告,或者按广告展示次数去投放广告。这种形式与传统电视广告投放形式比拟相似。咱们当初看到的一些网站的Banner和大部分App的开屏广告都属于这种广告投放形式,而这些广告主都是以品牌推广为目标进行广告投放的。 这类广告特点是个性化差,所有用户观看这个电视节目或者关上这个网页都会看到这个广告,所以很多男士在电视上会看到化妆品广告,女士会看到耐克的广告,而实际上大部分状况下他们对这个品牌商品是不感兴趣的,广告流量节约会比拟多。而投放品牌广告的广告主也不太在意这些流量节约,不要求用户看完广告会马上购买商品,从更长期角度来看来加强公众对该品牌的认知。 个别可能投放品牌广告的都是大广告主,比拟重视长期品牌效应。然而对于泛滥中小广告主而言,他们更心愿一分投入有一分产出。在Google、百度等商业搜索引擎呈现之后,按点击扣费的成果广告失去大规模推广应用,很长一段时间成为互联网广告的次要投放形式。 广告主投放广告之后,广告会呈现在搜寻后果页或者内容举荐页下面。广告展示自身是不免费用的,只有用户点击广告之后才会进行广告扣费。这样的广告对广告主来说广告成果会更加可控,一次广告扣费就会带来一个用户拜访,而不是仅仅领取广告费用其余所有方面都没有保障。而且一般来说用户感兴趣才会点击广告链接,用户对广告内容会有肯定相关性,肯定水平晋升广告转化和用户体验。对广告平台放来说,能够把不同用户的曝光卖给不同广告主,比起把所有用户曝光都卖给同一个广告主来说收益更高了。另一方面也对平台技术提出了更高要求,平台须要精确预估用户对每个候选广告点击率(ctr),依照ctr*bid进行排序,一直优化ctr预估模型能力更正当地把用户和广告主配对,晋升平台收益。 很长一段时间互联网广告都是以点击扣费(CPC)为主的广告投放形式,平台方更多的是一个导流的作用,把用户导给广告主,而用到广告主的页面或者App后怎么营销就是广告主本人的责任。这样对广告主来说,真正的转化老本其实也不是那么可控,点击广告链接后可能最终没有在广告主这里买货色。另一方面也导致局部广告主做一些题目党或者SEO的广告,让模型预估pCtr偏高,从而便宜获取用户。实际上毁坏用户体验,也毁坏了广告生态。 一个互联网广告的转化漏斗是很深的,以游戏App为例,整个广告转化流程简略包含申请、曝光、点击、下载、注册、付费6个阶段,咱们个别在广告点击阶段就扣除广告费用了,而广告主实际上想要的是用户付费,更心愿可能按一个付费用户多少钱来投放广告。 而事实当中,像房屋买卖租赁两头就是这样免费的,按房子成交金额扣除肯定比例的平台佣金。这样无论两头带多少人来看房都是不免费的,只有成交了才免费。CPC导流形式在这个场景下就是:中介带人来看房(导流),如果有人违心来看房即导流胜利,每次能把人带来收取3~5元的导流费用,最初是否成交看房主本身的营销伎俩。相对来说房主会更偏向按成交佣金的形式。 咱们把按转化扣费的形式称作CPA,而在互联网场景上运作CPA形式会有比拟多问题。 转化行为都有提早,转化行为产生时不肯定能进行扣费。精确转化数据在广告主手上,互联网场景无奈像事实中介一样全程陪同。须要对接很多中小广告主,他们技术水平不高,回传转化数据流程容易出问题。基于下面3点思考CPA形式在互联网比拟难落地,晋升广告后端转化率升高转化老本始终都是大家致力方向,期间有比拟长时间是让广告主抉择人群定向标签来进行投放,从而晋升转化率,但理论落地也有一些不尽人意的中央。 近年来有Facebook、头条等头部公司推出oCPC的投放形式来保障后端转化老本。其模式还是在用户点击时进行广告扣费,然而这里扣费价格不是先前的一个固定价格,而是依据广告后端转化率计算出来的价格;bid=CPA*pCvr,这里CPA是用户转化出价,例如一个付费用户100元,pCvr是模型预估的点击到指标转化(付费)的概率。因为还是在点击时扣费,广告主在回传转化数据下面舞弊的动机就没有了,整体危险是平台和客户共担,搞乱转化数据只会让模型成果变差,转化成果不可控。同时在原理层面上是能够做到老本可控的,能够满足广告主需要,而且从平台来看流量调配更正当收益更大,广告生态更好。只是对于平台理论工程实现来说会更加简单,技术挑战更大,理论转化老本与CPA存在肯定偏差。 oCPC之外,前面还有oCPM、oCPD等投放形式,其原理比拟相似统称oCPX。 oCPX算法技术架构 首先须要建设实时转化数据回传归因模块,把广告主回传的转化数据分门别类的存储下来,并且正确归因(把转化数据和带来转化的点击关联起来)。数据是算法零碎的基石,没有数据就没有前面整个算法零碎,实时数据流程必须做到稳固牢靠。 其次是咱们的模型训练模块,这里会跟进广告点击和转化数据,对点击转化率进行建模,即建设模型预估条件概率P(转化=1|点击=1)。模型特色层面复用大部分ctr模型特色,减少cvr的统计类特色以及落地页特色来表白用户与转化行为之间的关系。模型会推送到线上服务用来预估每个候选广告的点击转化率pCvr。 为了保障广告老本可控以及纠正模型在广告维度上的预估偏差,咱们还须要一个实时老本管制模块。它会实时统计每个广告当天实际成本和广告主预期老本状况,利用工业控制算法来调整每个广告的整体出价。如果某广告老本偏高,会升高该广告整体出价,让广告的转化实际成本和广告主预期老本趋于统一,反之亦然。 在线上排序服务(ranker)下面,咱们须要对每个候选广告依照它的投放指标(可能是下载、激活、注册、付费……)来预估它的转化率pCvr,联合广告主转化出价CPA以及管制模块计算的广告出价管制系数k来计算广告这次的点击智能出价bid=pCvrCPAk。失去点击出价后,和其余CPC广告一起依照score=pCtr*bid的形式进行整体综合广告竞价。通过若干排序策略最终抉择胜出广告下发到客户端进行广告展示。 整个数据和算法零碎简单的是比拟高的,各个环节都可能出问题,一个debug和case剖析模块是必不可少的。这里在ranker侧会上报一些debug数据进入咱们的case剖析模块,能够跟进理论察看到的和广告主反馈的问题进行跟踪和定位,及时对系统进行调整和后续优化。 CVR建模技术简介 Cvr预估模型是oCPX零碎的外围,它的成果会很大水平影响最终平台收益和广告老本偏差状况。 在Cvr模型建模之前实际上曾经有Ctr预估模型,只是一个是对点击转化建模,另一个是对曝光点击建模。而实际上Cvr建模还是有不少技术难度须要克服。 预估准确性要求更高对于pCtr而言,技术预估后果有肯定偏差,只有偏差对最终竞价的后果不影响就没问题;而pCvr间接影响广告的点击出价和老本状况,即便是偏差5%也会反馈到广告主的转化老本上,对广告主来说有显著感知。pCvr须要预估更加精确。对应预估偏差问题一般来说解决模型优化之外还须要进行pCvr校准,通过模型预估pCvr值与实在统计Cvr值进行比照,通过保序回归模型进行校准。样本稠密有偏问题更加重大咱们训练模型样本都是以用户点击后是否转化行为进行训练,这些样本都是最终竞价胜出并且被用户点击的状况,证实都用户与广告配对比拟好的状况。而线上预估时是对所有候选广告进行预估。这样就如同咱们要做一个预估全国人民支出预估的模型,而建模训练样本只应用深圳市样本一样,样本有偏问题比较严重。样本有偏问题能够通过联结建模进行缓解和优化,支流有ESMM和MMoE两个模型能够抉择,目前理论发现MMoE多转化类型联结建模对模型成果有肯定晋升作用。而ESMM成果不显著。提早转化目前模型是增量训练形式进行更新的,深度转化行为提早比拟大,如果不做非凡解决容易一个点击行为先产生,作为负样本进入模型进行训练,过了几天用户付费了,再以正样本进入模型训练。一方面是训练不精确,另一方面对于新上线广告而言容易呈现较大转化率低估的状况。这个提早问题对于Ctr模型来说会更加大。这里咱们认为7天是转化行为回流最大窗口(能笼罩95%+的状况),首先会增量训练一个T-7的模型,因为这个时候转化数据曾经回流齐全,因而这个模型没有提早转化问题。 而后每天会刷新最近7天的正负样本数据,并且依据每天转化回流比例来调整样本权重来打平正负样本比。接着咱们会base T-7的模型,以最近7天的调权样本数据进行增量训练,失去T-0的模型,这样T-0模型在样本比例上打平了提早转化问题。 老本控制策略简介 通过针对性的伎俩会让cvr模型预估更加精确,然而难免会呈现预估有偏差的状况,尤其是转化数据比拟稠密,理论转化量容易呈现较大稳定。因而须要一个老本管制模块来为广告主老本达成提供保障。这里引入几个概念: 理论耗费:广告主当天扣费金额广告主价值:按CPA计费状况下,当天应该扣费金额耗费比=理论耗费/广告主价值,管制模块让耗费比趋近1.0,从而让理论耗费趋近广告主价值。控制策略模块会计算广告维度出价系数k,bid=CPApCvrk,来调整广告维度的出价。 最开始咱们采纳比例控制办法,k=1.0/耗费比。思路比拟奢侈,如果理论耗费是广告主价值的2倍,那么每次以一半的之前价格出价就能够达成广告主预期老本。然而实际上调控过程也在影响耗费比,最终通过数学推导下面的状况只能让耗费比管制到1.414,无奈最终让耗费比趋近1.0. 应用了比例控制整体老本状况有了肯定晋升,而且控制算法比较简单,管制鲁棒性比拟好。 第二版控制策略咱们采纳了工业管制中广泛应用的PID控制算法。 其算法原理通过P项(比例)、I项(积分)、D项(差分)让管制误差趋近0,可能无效解决比例控制的问题。实际上线之后PID算法也是获得肯定老本管制成果晋升,然而鲁棒性比P管制稍差,须要较多的规定进行限度能力稳固运行。 作者简介朱泰鹏 OPPO机器学习观星实验室负责人8年互联网算法工作经验,2016年退出OPPO负责信息流广告算法,2020年负责举荐/广告机器学习基础设施建设工作。 获取更多精彩内容:关注[OPPO互联网技术]公众号

June 8, 2021 · 1 min · jiezi

关于算法:R语言实现贝叶斯分位数回归lasso和自适应lasso贝叶斯分位数回归分析

原文链接:http://tecdat.cn/?p=22702摘要贝叶斯回归分位数在最近的文献中受到宽泛关注,本文实现了贝叶斯系数预计和回归分位数(RQ)中的变量抉择,带有lasso和自适应lasso惩办的贝叶斯。还包含总结后果、绘制门路图、后验直方图、自相干图和绘制分位数图的进一步建模性能。 简介回归分位数(RQ)由(Koenker和Gilbert,1978)提出,将感兴趣的后果的条件分位数作为预测因子的函数来建模。自引入以来,分位数回归始终是理论界十分关注的话题,也在许多钻研畛域失去了大量的利用,如计量经济学、市场营销、医学、生态学和生存剖析(Neelon等,2015;Davino等,2013;Hao和Naiman,2007)。假如咱们有一个察看样本{(xi , yi);i = 1, 2, - -, n},其中yi示意因变量,xi示意协变量的k维矢量。  贝叶斯_分位数_回归Tobit RQ为形容非负因变量和协变量向量之间的关系提供了一种办法,能够被表述为因变量的数据未被齐全察看到的分位数回归模型。对于Tobit 分位数回归模型有相当多的文献,咱们能够参考Powell(1986)、Portnoy(2003)、Portnoy和Lin(2010)以及Kozumi和Kobayashi(2011)来理解详情。考虑一下这个模型。 其中,yi是察看到的因变量,y∗i是相应的潜在的未察看到的因变量,y 0是一个已知的点。能够证实,RQ系数向量能够通过以下最小化问题的解来继续预计 Yu和Stander(2007)提出了一种Tobit RQ的贝叶斯办法,应用ALD计算误差,并应用Metropolis-Hastings(MH)办法从其后验散布中抽取。 实在数据实例咱们思考用实在的数据例子。 免疫球蛋白G数据这个数据集包含298名6个月到6岁儿童的免疫球蛋白G的血清浓度(克/升),Isaacs等人(1983)对其进行了具体探讨,Yu等人(2003)也应用了该数据集。为了阐明问题,该数据集的贝叶斯分位数回归模型(能够拟合如下)。  rq(血清浓度~年龄, tau=0.5, runs=2000)摘要函数提供估计值和95%的置信区间   绘制数据,而后将五条拟合的RQ线叠加在散点图上。  R> for (i in 1:5) {+ taus=c(0.05, 0.25, 0.5, 0.75, 0.95)+ rq(tau=taus\[i\],runs=500, burn=100)+ abline(fit, col=i)+ }R> R> for (i in 1:5) {+ fit = rq(年龄+I(年龄^2),tau=taus\[i\],runs=500, burn=100)+ curve(,add=TRUE)+ } 图2:免疫球蛋白G数据的散点图和RQ拟合。 该图显示了298名6个月至6岁儿童的免疫球蛋白G的散点图。叠加在该图上的是{.05, .25, .50, .75, .95}的RQ线(左图)和 RQ线(左图)和RQ曲线(右图)。 图能够用来评估吉布斯采样向安稳散布的收敛状况。咱们在图1中只报告了=0.50时每个参数的门路图和后验直方图。咱们应用以下代码 plot(fit,"tracehist",D=c(1,2))能够通过生成门路图、后验直方图、自相干图来对Gibbs采样的绘制后果进行图形总结。门路和直方图,门路和自相干,直方图和自相干,以及门路、直方图和自相干。这个函数还有一个选项。在图3中,免疫球蛋白G数据系数的门路图表明,采样从后验空间的一个偏僻区域跳到另一个区域的步骤绝对较少。此外,直方图显示边际密度实际上是所冀望的安稳的单变量常态。 图3:当=0.50时,免疫球蛋白G数据集的系数的门路和密度图。 前列腺癌数据在本大节中,咱们阐明贝叶斯分位数回归在前列腺癌数据集(Stamey等人,1989)上的体现。该数据集考察了期待根治性前列腺切除术的病人的前列腺特异性抗原(lpsa)程度和八个协变量之间的关系。 这些协变量是:癌症对数体积(lcavol)、前列腺的对数分量(lweight)、年龄(age)、良性前列腺的对数体积(lbph)、精囊进犯(svi)、胶囊穿透的对数(lcp)、格里森评分(gleason)以及格里森评分4或5的百分比(pgg45)。 在本大节中,咱们假如因变量(lpsa)均值为零,而预测因子已被标准化,均值为零。为了阐明问题,咱们思考当=0.50时,贝叶斯lasso套索RQ(办法="BLqr")。在这种状况下,咱们应用以下代码 R> x=as.matrix(x)R> rq(y~x,tau = 0.5, method="BLqr", runs = 5000, burn = 1000, thin = 1) 模型法可用于确定回归中的沉闷变量。  相应的吉布斯采样的收敛性是通过生成样本的门路图和边际后验直方图评估的。因而,图能够用来提供一个对于吉布斯采样器收敛的图形查看,通过应用以下代码查看门路图和边际后验直方图。 plot(fit, type="trace")上述代码的后果别离显示在图4和图5中。图4中的门路图显示,生成的样本迅速穿梭了后验空间,图5中的边际后验直方图显示,条件后验散布实际上是所需的安稳单变量常态。  小麦数据咱们思考一个小麦数据集。这个数据集来自于国家小麦种植倒退打算(2017)。这个小麦数据由11个变量的584个观测值组成。因变量是每2500平方米小麦产量减少的百分比。协变量是化肥尿素(U)、小麦种子收获日期(Ds)、小麦种子播种量(Qs)、激光平田技术(LT)、复合肥施肥(NPK)、播种机技术(SMT)、绿豆作物种植(SC)、作物除草剂(H)、作物高钾肥(K)、微量元素肥料(ME)。 上面的命令给出了=0.50时Tobit RQ的后验散布。 rq(y~x,tau=0.5, methods="Btqr")  还能够拟合贝叶斯lassoTobit 分位数回归和贝叶斯自适应lassoTobit 分位数回归。当=0.50时,函数能够用来取得Tobit 分位数回归的后验平均值和95%的置信区间。  论断在本文中,咱们曾经阐明了在分位数回归(RQ)中进行贝叶斯系数预计和变量抉择。此外,本文还实现了带有lasso和自适应lasso惩办的贝叶斯Tobit 分位数回归。还包含总结后果、绘制门路图、后验直方图、自相干图和绘制定量图的进一步建模。 参考文献Alhamzawi, R., K. Yu, and D. F. Benoit (2012). Bayesian adaptive lasso quantile regression. Statistical Modelling 12 (3), 279–297. ...

June 7, 2021 · 1 min · jiezi

关于算法:Python贝叶斯回归分析住房负担能力数据集

原文链接:http://tecdat.cn/?p=11664   我想钻研如何应用pymc3在贝叶斯框架内进行线性回归。依据从数据中学到的常识进行推断。   贝叶斯规定是什么? 实质上,咱们必须将曾经晓得的常识与世界上的事实相结合。 这里有一个例子。 假如存在这种常见疾病,每10,000人中就有1人随机感化这种疾病。换句话说,有0.01%的机会患上这种疾病。 侥幸的是,有一项测试能够99%的正确辨认出患有这种疾病的人,如果没有这种疾病,它也能够正确地说出您99%没有患这种疾病。您加入了测试,后果为阳性。您有多少几率理论患上该病? 好吧,让咱们从逻辑上考虑一下。咱们晓得,每10,000人中就有1人患此病。假如有10,000人。他们中的9,999人没有疾病,但其中1%的人会失去阳性后果。因而,即便只有1人理论患有这种疾病,也有约101人取得了阳性后果。这意味着即便后果为阳性,您也只有101分的几率理论患上该病(或大概1%的几率)。  数学形容  : 看起来很简略。实际上,这很简略。该公式仅须要一些概率分布的常识。然而实际上,左边的分母通常意味着咱们将要计算很多真正的计算重积分。因而,贝叶斯统计被放弃了很多年。从某种意义上讲,它自然而然地脱离了概率论。如果咱们只有善于计算大量数字的货色,那么这类问题就能够解决。 计算机的确十分快地进行计算贝叶斯回归。 代码这是进行贝叶斯回归所需的常识。通常,咱们想到这样的回归: e是正态分布的误差。   因而,咱们假如: 与先验: 因而,如果咱们领有X和Y的数据,则能够进行贝叶斯线性回归。   代码 咱们要应用的数据集是《  住房考察: 2013年住房累赘能力数据 》数据集。  咱们感兴趣的是住房累赘如何随着年龄而变动。AGE1蕴含户主的年龄。BURDEN是一个变量,它通知咱们住房费用绝对于支出有多大。为简略起见,咱们仅关注这两个变量。咱们想晓得的是,随着年龄的增长,住房累赘会变得更容易吗?特地是,咱们想晓得斜率系数是否为负,并且因为咱们处于贝叶斯框架中,因而该概率为负的概率是多少? 因而,咱们将导入所需的库和数据。进行一些数据清理。 df=pd.read_csv('2013n.txt',sep=',')df=df\[df\['BURDEN'\]>0\]df=df\[df\['AGE1'\]>0\]当初,让咱们构建下面探讨的模型。让咱们做一个散点图,看看数据是什么样子。 plt.scatter(df\['AGE1'\],df\['BURDEN'\])plt.show()后果如下: 住房累赘很容易超过支出的10倍。 这是构建和运行模型的代码: pm.traceplot(trace)plt.show()**看起来与咱们下面的模型齐全一样,不同之处在于咱们还有一个正态分布的截距beta。当初咱们的模型曾经训练好了,咱们能够持续做一些推论工作。 ** 实现运行后,会看到相似以下内容: 能够看到,咱们有斜率和截距的后验散布以及回归的标准偏差。 **住房累赘会随着年龄的增长而缩小吗? ** 是的。随着人们的建设,他们的住房老本将绝对于支出降落。这将等于年龄变量的负斜率系数。运行以下代码,则能够找出斜率系数为负的确切概率。 print(np.mean(\[1 if obj<0 else 0 for obj in trace\['x'\]\])) 该系数为负的概率约为13.8%。

June 7, 2021 · 1 min · jiezi

关于算法:最大异或和

一、字典树用来高效的存储查找字符串汇合 也能够存储二进制信息存储字典树存储模式如下:其中每个单词的开端会做上一个 标记 查找 判断单词是否在门路上如果在门路上,判断单词开端是否存在标记残缺代码如下: int son[N][26], cnt[N], idx;// 0号点既是根节点,又是空节点// son[][]存储树中每个节点的子节点, 26是假如仅有小写字母, 则每个节点的孩子最多为26个// cnt[]存储以每个节点结尾的单词数量// idx 示意每个节点的索引// 插入一个字符串void insert(char *str){ int p = 0; for (int i = 0; str[i]; i ++ ) { int u = str[i] - 'a'; if (!son[p][u]) son[p][u] = ++ idx; // 如果没有这个字符作为子节点,则新建 p = son[p][u]; // 如果存在则以找到的这个节点为父节点向下寻找 } cnt[p] ++ ; // 单词数加一}// 查问字符串呈现的次数int query(char *str){ int p = 0; for (int i = 0; str[i]; i ++ ) { int u = str[i] - 'a'; if (!son[p][u]) return 0; p = son[p][u]; } return cnt[p];}二、字典树相干题目143. 最大异或对1. 异或和性质异或被称为无进位加法,所以其与加法性质相似。假如数 x 的二进制示意为 $x_n...x_1x_0$,数 y 的二进制示意为 $y_n...y_0$则二者的异或和为各位的异或后果乘以以后位的权值。即 $(x_n \bigoplus y_n) \times 2^n + ... + (x_0 \bigoplus y_0) \times 2^0$ ...

June 6, 2021 · 3 min · jiezi

关于算法:C-抢占时优先级进程调度

先来先服务短过程优先算法优先级调度(抢占)优先级调度#include <iostream>#include <cstdio>#include <vector>#include <algorithm>using namespace std;struct PCB{ int id; // 过程id double turnaround_time; // 周转工夫 double weighted_turnaround_time; // 带权周转工夫 double wait_time; // 等待时间 double start_time; // 开始工夫 double coming_time; // 达到工夫 double service_time; // 运行工夫 double finish_time; // 实现工夫 int youxianji; // 优先级 double run_time; // 已运行工夫};int n; // 过程个数vector<PCB> process_list; // 输出的过程序列vector<PCB> res; // 待输入的后果队列void input_process_count(){ printf("请输出过程数量:"); scanf("%d", &n); for (int i = 0; i < n; i++) { PCB pcb; // pcb初始化 pcb.id = i + 1; pcb.run_time = 0; // 初始时已运行工夫为零 pcb.start_time = -1; // 为判断是否第一次达到 process_list.push_back(pcb); // 退出已初始化好的pcb }}void input_youxianshu() // 输出优先级{ for (int i = 0; i < n; i++) { printf("请输出过程%d的优先级:", process_list[i].id); scanf("%d", &process_list[i].youxianji); }}void input_coming_time() // 输出达到工夫{ for (int i = 0; i < n; i++) { printf("请输出过程%d的达到工夫:", process_list[i].id); scanf("%lf", &process_list[i].coming_time); }}void input_serve_time() // 输出须要服务工夫{ for (int i = 0; i < n; i++) { printf("请输出过程%d所需工夫", process_list[i].id); scanf("%lf", &process_list[i].service_time); }}int choose_method() // 输出抉择的算法{ int select = 0; cout << "*****************************************\n"; cout << "1 \t 先来先服务算法 *******\n"; cout << "2 \t 短过程优先算法 *******\n"; cout << "3 \t 优先级调度(抢占) *******\n"; cout << "4 \t 优先级调度(非抢占) *******\n"; cout << "请抉择: "; cin >> select; return select;}int cmpByComingTime(PCB a, PCB b) // 依照达到工夫从小到大排序{ return a.coming_time < b.coming_time;}int cmpByServiceTime(PCB a, PCB b) // 依照须要服务工夫从大到小排序{ return a.service_time > b.service_time;}void FCFS(){ sort(process_list.begin(), process_list.end(), cmpByComingTime); // 先依照达到工夫排序 double time = process_list[0].coming_time; // 初始化工夫 for (int i = 0; i < n; i++) { PCB pcb = process_list[i]; // 因为曾经依照工夫排序,所以以后为待运行的过程 // 更新以后过程的信息 pcb.start_time = time; pcb.wait_time = time - pcb.coming_time; pcb.finish_time = time + pcb.service_time; pcb.turnaround_time = pcb.finish_time - pcb.coming_time; pcb.weighted_turnaround_time = (pcb.turnaround_time) / pcb.service_time; time = pcb.finish_time; // 以以后过程的工夫更新time process_list[i] = pcb; res.push_back(pcb); // 退出后果队列 }}void SJF(){ int top = 0; vector<PCB> short_jobs; // 定义短过程队列 其中数据由大到小 sort(process_list.begin(), process_list.end(), cmpByComingTime); // 依照达到工夫初始化 double time = process_list[0].coming_time; // 初始化工夫 while (top < n || !short_jobs.empty()) // 如果两个对列里依然存在元素 { if (short_jobs.empty()) // 如果队列未空,则退出以后曾经达到的过程 short_jobs.push_back(process_list[top++]); PCB pcb = short_jobs[int(short_jobs.size() - 1)]; // 取出工夫最短的 if (pcb.start_time == -1) pcb.start_time = time; // 更新pcb的工夫 pcb.wait_time = time - pcb.coming_time; pcb.finish_time = time + pcb.service_time; pcb.turnaround_time = pcb.finish_time - pcb.coming_time; pcb.weighted_turnaround_time = (pcb.turnaround_time) / pcb.service_time; time = pcb.finish_time; // 退出到运行完结队列 res.push_back(pcb); short_jobs.pop_back(); // 如果在上个过程运行期间有过程达到则退出short_jobs队列 for (; top < n && process_list[top].coming_time < time; top++) { short_jobs.push_back(process_list[top]); } // 因为有新的过程退出,所以对short_jobs进行排序 sort(short_jobs.begin(), short_jobs.end(), cmpByComingTime); }}bool cmpByPriority(PCB a, PCB b) // 依照优先级排序{ if (a.youxianji == b.youxianji) return a.coming_time > b.coming_time; return a.youxianji < b.youxianji;}void PriorityNo() // 非抢占优先级调度{ int top = 0; // 定义头指针 vector<PCB> priority_higher; sort(process_list.begin(), process_list.end(), cmpByComingTime); double time = process_list[0].coming_time; while (top < n || !priority_higher.empty()) // 如果仍有过程未运行完结 { if (priority_higher.empty()) // 为空则退出新的过程 priority_higher.push_back(process_list[top++]); PCB pcb = priority_higher[int(priority_higher.size() - 1)]; // 取出要运行的过程 if (pcb.start_time == -1) //如果是第一次到达则更新工夫 pcb.start_time = time; // 更新pcb pcb.wait_time = time - pcb.coming_time; pcb.finish_time = time + pcb.service_time; pcb.turnaround_time = pcb.finish_time - pcb.coming_time; pcb.weighted_turnaround_time = (pcb.turnaround_time) / pcb.service_time; time = pcb.finish_time; res.push_back(pcb); // 运行完结则退出res priority_higher.pop_back(); // 并删除已运行完结的过程 for (; top < n && process_list[top].coming_time < time; top++) { // 退出在此期间达到的过程 priority_higher.push_back(process_list[top]); } // 因为有新过程退出,进行排序 sort(priority_higher.begin(), priority_higher.end(), cmpByPriority); }}void PriorityYes(){ int top = 0; vector<PCB> priority_higher; sort(process_list.begin(), process_list.end(), cmpByComingTime); double time = process_list[0].coming_time; // 初始化工夫 while (top < n || !priority_higher.empty()) // 如果仍有过程未完结 { if (priority_higher.empty()) // 如果为空,则退出新的过程 priority_higher.push_back(process_list[top++]); PCB pcb = priority_higher[int(priority_higher.size() - 1)]; // 取出优先级最高的过程运行 if (pcb.start_time == -1) // 如果是第一次达到,则记录开始工夫 { pcb.start_time = time; pcb.wait_time = pcb.start_time - pcb.coming_time; } if (top < n && process_list[top].coming_time <= time + pcb.service_time - pcb.run_time) // 如果仍有未退出的过程, 并且在运行期间有新的过程达到 { pcb.run_time += process_list[top].coming_time - time; // 则先运行间隔下个过程达到的工夫 time += process_list[top].coming_time - time; // 并更新工夫 priority_higher[priority_higher.size() - 1] = pcb; // 更新队列 priority_higher.push_back(process_list[top++]); // 把下一个过程退出 sort(priority_higher.begin(), priority_higher.end(), cmpByPriority); // 并进行排序 if (pcb.run_time == pcb.service_time) // 如果以后过程的运行工夫曾经够了,则更新pcb信息,并删除过程 { pcb.finish_time = time; pcb.turnaround_time = pcb.finish_time - pcb.coming_time; pcb.weighted_turnaround_time = (pcb.turnaround_time) / pcb.service_time; res.push_back(pcb); priority_higher.pop_back(); } } else // 如果没有新的过程达到, 则将以后过程运行结束 { pcb.finish_time = time + pcb.service_time - pcb.run_time; pcb.turnaround_time = pcb.finish_time - pcb.coming_time; pcb.weighted_turnaround_time = (pcb.turnaround_time) / pcb.service_time; time = time + pcb.service_time - pcb.run_time; res.push_back(pcb); // 运行结束则退出res priority_higher.pop_back(); } }}bool cmpById(PCB a, PCB b){ return a.id < b.id;}void print_schedulInfo(){ printf("过程编号\t提交工夫\t运行工夫\t开始工夫\t等待时间\t实现工夫\t周转工夫\t带权周转工夫\n"); // cout << res.size() << endl; sort(res.begin(), res.end(), cmpById); // 依照ID排序 double start = 0x3f3f3f3f3f, end = 0; double allTT = 0, allWTT = 0, runTime = 0; for (int i = 0; i < n; i++) { PCB pcb = res[i]; start = min(start, pcb.start_time); // 失去开始工夫 end = max(end, pcb.finish_time); // 所有过程完结工夫 allTT += pcb.turnaround_time; // 总的周转工夫 allWTT += pcb.weighted_turnaround_time; // 总的带权周转工夫 runTime += pcb.service_time; // 总的服务工夫 printf("%8d\t%8.2f\t%8.2f\t%8.2f\t%8.2f\t%8.2f\t%8.2f\t%8.2f\n", pcb.id, pcb.coming_time, pcb.service_time, pcb.start_time, pcb.wait_time, pcb.finish_time, pcb.turnaround_time, pcb.weighted_turnaround_time); } printf("均匀周转工夫%.2f\t均匀带权周转工夫%.2f\tCPU利用率%.2f\t零碎吞吐量%.2f\n", allTT / n, allWTT / n, (runTime) / (end - start), (n) / (end - start));}int main(){ // 4 1 1 1 1 9 8 8.4 8.8 0.2 2 1 0.5 // 4 2 4 3 1 10 20 30 50 20 30 25 20 // 4 1 2 3 2 0 2 4 5 7 4 1 4 input_process_count(); // 输入过程数量 input_youxianshu(); // 输出优先级数 input_coming_time(); // 输出达到工夫 input_serve_time(); // 输出须要服务工夫 int choose = choose_method(); // 失去用户抉择的数 // printf("%d\n", choose); switch (choose) { case 1: FCFS(); // 先来先服务 break; case 2: SJF(); // 短作业优先 break; case 3: PriorityYes(); // 优先级抢占式 break; default: PriorityNo(); // 优先级非抢占式 break; } print_schedulInfo(); // 打印后果 return 0;}

June 6, 2021 · 5 min · jiezi

关于算法:算法八皇后Java实现

八皇后算法形容如下:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法! 上面来剖析一波,假如此时咱们想要在彩色方块地位搁置一个皇后: 如果一列一列的搁置皇后的话,图中彩色地位能搁置一个皇后的合法性条件为:1、绿色线条通过的方格没有皇后 (不处于同一斜线)2、红色线条通过的方格没有皇后 (不处于同一行)3、紫色线条通过的方格没有皇后 (不处于同一斜线) 也就是说如果以彩色方块地位为参照原点:(0,0)坐标点,紫色和绿色两个线条别离是斜率为1和-1的两个函数,如下图:紫色线所代表的函数是:y = -x;绿色先所代表的函数是:y=x;(横坐标是列,纵坐标为行,留神行从上到下递增) 但凡位于这两条函数线上的地位(点)以及横坐标(阐明位于同一行)都不能有皇后。也即行和列的差值要相等,如图所示Java代码实现: public class EightQueenMain { private static int[] queen = new int[]{-1, -1, -1, -1, -1, -1, -1, -1}; private static int count = 0; public static void main(String[] args) { eightQueue(0); System.out.println(count); } private static boolean isLegal(int currentRow, int currentCol) { for (int col = 0; col < currentCol; col++) { if (currentRow == queen[col]) { // 只判断行相等,因为是按列放皇后的 return false; } if (Math.abs(queen[col] - currentRow) == Math.abs(col - currentCol)) { // 在斜线上(行列差值相等) return false; } } return true; } private static void eightQueue(int currentCol) { for (int row = 0; row < 8; row++) { if (isLegal(row, currentCol)) { queen[currentCol] = row; if (currentCol == 7) { // 达到最初一列取得正确后果 count++; } eightQueue(currentCol + 1); } } }}输入92参考链接:八皇后回溯算法原理分析及其JS实现 ...

June 4, 2021 · 1 min · jiezi

关于算法:Python用PyMC3实现贝叶斯线性回归模型

原文链接:http://tecdat.cn/?p=5263在本文中,咱们将在贝叶斯框架中引入回归建模,并应用PyMC3 MCMC库进行推理。 咱们将首先回顾经典频率论的多重线性回归办法。而后探讨贝叶斯如何思考线性回归。 用PyMC3进行贝叶斯线性回归在本节中,咱们将对统计实例进行一种经典的办法,即模仿一些咱们晓得的属性的数据,而后拟合一个模型来推算这些原始属性。 什么是狭义线性模型?在咱们开始探讨贝叶斯线性回归之前,我想简要地概述狭义线性模型(GLM)的概念,因为咱们将应用它们来在PyMC3中建设咱们的模型。 狭义线性模型是将一般线性回归扩大到更个别模式的回归的灵便办法,包含逻辑回归(分类)和泊松回归(用于计数数据)以及线性回归自身。GLM容许具备除正态分布以外的误差散布的因变量。 用PyMC3模仿数据并拟合模型在咱们应用PyMC3来指定和采样贝叶斯模型之前,咱们须要模仿一些噪声线性数据。 输入如下图所示: 通过Numpy,pandas和seaborn模仿噪声线性数据 当初咱们曾经进行了模仿,咱们想要对数据拟合贝叶斯线性回归。这是glm办法。 而后咱们将找到MCMC采样器的最大后验概率(MAP)估计值。最初,咱们将应用No-U-Turn Sampler(NUTS)来进行理论推理,而后绘制模型的曲线,将前500个样本抛弃为“burn in”预烧过程。 traceplot如下图所示: 应用PyMC3将贝叶斯GLM线性回归模型拟合到模仿数据首先咱们应用seaborn lmplot办法,fit_reg参数设置False,不绘制频数回归曲线。而后咱们绘制100个采样的后验预测回归线。最初,咱们绘制应用原始的“实在”回归线和1=2的参数。 咱们能够在下图中看到回归线的抽样范畴: 有问题欢送分割咱们!最受欢迎的见解 1.matlab应用贝叶斯优化的深度学习 2.matlab贝叶斯隐马尔可夫hmm模型实现 3.R语言Gibbs抽样的贝叶斯简略线性回归仿真 4.R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归 5.R语言中的Stan概率编程MCMC采样的贝叶斯模型 6.Python用PyMC3实现贝叶斯线性回归模型 7.R语言应用贝叶斯 层次模型进行空间数据分析 8.R语言随机搜寻变量抉择SSVS预计贝叶斯向量自回归(BVAR)模型 9.matlab贝叶斯隐马尔可夫hmm模型实现

June 4, 2021 · 1 min · jiezi