python异步并发学习
作为一名算法…哦不对,是调参工程师,在日常调参之外,偶尔也需要把模型整成一个http服务对外支持,而在这里面最烦的就是业务方要求要大量的并发请求,以及实时性。这时候就会涉及到一些多进程,多线程,协程,异步非阻塞等等概念。这里记录一下自己对这些概念的理解,以及如何将自己的程序耗时缩减到最小。
概念篇1.线程、进程进程:对于操作系统而言,进程是最小的资源管理单元。假设有两个任务A和B,当A遇到了一个很复杂的IO操作,此时CPU只能等待A读写完后,再去执行B任务。因此这样会对CPU的资源造成极大的浪费,而一种高效的执行方式是,让A在进行IO操作时,将CPU切换给B执行,当A读取完数据后,再将CPU切换回给任务A。而这就涉及到任务的切换,任务状态的恢复,以及任务所需的系统资源等等。此时就需要一个去记录这些东西,因此进程就被设计出来,计算机通过进程去识别任务,分配调度任务系统资源。而进程的状态的记录、恢复、切换被称之为上下文切换。
线程:对于操作系统而言,线程是最小的执行单元。假设我们有一个文本程序,需要接受键盘输入,将输入内容显示到屏幕,还要把内容保存到硬盘中,如果我们只有一个进程,那么我们在 ...
图数据库Nebula Graph DB学习
1 本地安装(linux环境)下载rpm包
wget https://oss-cdn.nebula-graph.com.cn/package/3.3.0/nebula-graph-3.3.0.el7.x86_64.rpm
安装rpm包
sudo rpm -ivh --prefix=<installation_path> <package_name>
--prefix为可选项,用于指定安装路径。如不设置,系统会将 NebulaGraph 安装到默认路径/usr/local/nebula/。
例如,要在默认路径下安装3.3.0版本的 RPM 包,运行如下命令:
1sudo rpm -ivh nebula-graph-3.3.0.el7.x86_64.rpm
启动NebulaGraph 服务
执行如下命令启动服务:
1234567$ sudo /usr/local/nebula/scripts/nebula.service start all[INFO] Starting nebula-metad...[INFO] ...
异常检测算法-Time2Graph
异常检测算法-Time2GraphTime2Graph提出了一种可解释的时间序列表示学习的方法
在Time2Graph里,寻找出最优的shapelet时,需要去计算shapelet与时序样本之间的距离。欧式距离只能度量两个长度相等的序列,而无法适用于长度不等的序列。因此我们需要使用一种可以计算变长序列之间距离的方法,因此在了解Time2Graph之前我们需要先学习一下DTW(Dynamic Time Warping)。
DTW算法DTW最开始运用于比较两段语音之间的相似性,假设我们用数字表示音调高低,例如某个单词发音的音调为1-3-2-4。现在有两个人说这个单词,A在前半部分拖长,其发音为1-1-3-3-2-4;B在后半部分拖长,其发音为1-3-2-2-4-4。这两种发音在我们的认知里相似性应该是很高的(都是同一个单词的发音),但是如果我们使用欧式距离来计算两种发音的距离:
$dist(A,B)=|A(1)-B(1)|+|A(2)-B(2)|+|A(3)-B(3)|+|A(4)-B(4)|+|A(5)-B(5)|+|A(6)-B(6)|$
$=|1-1|+|1-3|+|3-2|+|3- ...
异常检测算法-LOF(Local Outlie Factor)
异常检测算法-LOF(Local Outlie Factor)LOF异常检测算法是一种基于密度的异常检测算法,基于密度的异常检测算法主要思想是:给定的样本数据集,对于数据集中的点,如果其局部领域的点都很密集,那么这个点大概率为正常的数据点;而如果这个点距离其相邻的点距离较远,也就是在一个局部领域的点密度较小,那么这个点可能为异常点。
1 算法简介LOF算法通过对计算数据集中的每一个点的离群因子LOF,对离群因子的大小进行判断,如果离群因子远大于1,将该点判断为异常点,如果离群因子接近1,则数据点为正常样本点。
1.1 k-邻近距离(第k距离)定义$d_k(O)$为点O的k-邻近距离,$d_k(O)=d(O,P)$满足以下两个条件:
在数据集中,至少存在k个点$P’\in D{O}$,使得$d(P’,O) \le d(P,O)$
在数据集中,至少存在k-1个点$P’\in D{O}$,使得$d(P’,O)<d(P,O)$
也就是说第k距离就是距离点P第k远的点,不包括点P在内,如下图所示:
1.2 第k距离邻域定义$N_k(O)$为点O的第k距离邻域,那么它需要满足:
$N ...
异常检测算法-RRCF(Robust Random Cut Forest)
异常检测算法-RRCF(Robust Random Cut Forest)最近部门架构变化,方向由原来的CV切换到了AIops,需要用到监控数据的根因分析和异常检测。因此把AIops里的常用算法整理一下,在异常检测里比较有名的莫过于RRCF里,是亚马逊改进了周志华老师提出的孤立森林(Isolation Forest)产生的,因此在介绍RRCF的原理之前我们需要科普一下孤立森林(Isolation Forest)。
1. 孤立森林(Isolation Forest)1.1 原理简介孤立森林对异常点的定义为“容易被孤立的点”,我们可以理解为在样本空间中分布较为稀疏,且距离密度高的群体距离较远的点,而在样本空间中分布较为稀疏代表着这个样本点发生的概率较低,并且距离密度高也就是大部分正常的样本距离较远,当样本落入到这种区域我们可以将其判定为异常点。
孤立森林是一种无监督学习的算法,它不需要大量的标注样本。由该算法对异常的定义可以得知,它希望在我们的数据中,异常数据是占很少的一部分,并且异常样本的数据与正常样本相差较大(较容易区分)。当样本中存在大量异常数据时,算法会将其认为是正常样本。
孤立 ...
蓄水池抽样
蓄水池抽样最近在做监控的异常检测,而在异常检测中,一个很有名的算法叫RRCF,它是IsolationForest的改进版,适用于流式的数据,其中一个优化的点就是采用了蓄水池抽样的方法来获取数据。
一、问题描述
假设有N条数据,其中N非常非常大,如何遍历一次数据不重复抽取出m条数据,要求N中每条数据被选取到的概率相同。
二、解决思路
那么在解决这个问题时,我们需要注意到如下几点:
数据很大,我们无法一次性存入到内存中;
要求时间复杂度在O(N);
要求每条数据被选取到的概率为$m/N$;
因此,对于第一条,我们就无法一次性讲数据存入到内存中,再在 $[0,N-1]$ 中随机选取出m个数,按照索引来选取数据;对于第二条,我们就无法分块来读取多次数据;对于第三条,需要确保其是完全随机。
解决方案:
step1:当接收数据$i<m$时,将数据放到蓄水池中;
step2:当接收数据$i>m$时,随机从$[0, i-1]$中生成随机数$j$,如果$j<m$,那么按照索引替换蓄水池中的第$j$个数,否则进行替换;
step3:重复step2;
...
数据处理
最近碰到一些关于模型正则化,以及数据归一化的问题,对于归一化、标准化、中心化、正则化和范数等等概念有点混乱,整理一下,方便以后随时查阅。
是什么?首先解释一下这几个东西的概念:
归一化:归一化主要是指将数据缩放到(0,1)区间内,或者缩放到(-1,1)内,消除特征(指标)之间量纲与量纲单位的影响,这样特征之间就有可比性了。主要的计算方法有以下几种:
线性转化
$y={(x-min)\over(max-min)}$
对数转化
$y={log_{10}(x)}$
反余切函数转化
$y={arctan(x)*2\over\pi}$
标准化:
服饰搭配综述
服饰搭配综述Learning Type-Aware Embeddings for Fashion Compatibility1. 模型主要思想 主要目标是希望能找到一个特征空间,在这个特征空间中,特征之间的欧氏距离的远近能够表达出对应服饰的**搭配程度(compatibility)**,也就是让搭配的服饰之间特征的距离尽可能近,而不搭配的服饰特征之间的距离尽可能远。这就很容易去联想到triplet loss。
传统使用卷积的方法提取特征,然后用上面描述的,让搭配的服饰的两个特征尽可能相近,让不搭的两个特征距离尽可能远的方法不太可行。主要原因是因为,如果一件衬衣和一双鞋子搭配,那么衬衣与鞋子的特征距离就会被拉进。如果这双鞋子和一顶帽子搭配,而这顶帽子和刚刚的衬衣不搭配的话,就会出现一个问题。由于鞋子与帽子是搭的,因此鞋子和帽子的距离就会被拉近,同时帽子也会与衬衣的距离相近,然而衬衣与帽子是不搭的,这样就会出现问题。主要的原因是距离是可以传递的,而是否搭配(compatibility)是无法传递的。也就是A和B搭配,B和C搭配,不一定就能得出A ...
python异步编程
作为一名算法…哦不对,是调参工程师,在日常调参之外,偶尔也需要把模型整成一个http服务对外支持,而在这里面最烦的就是业务方要求要大量的并发请求,以及实时性。这时候就会涉及到一些多进程,多线程,协程,异步非阻塞等等概念。这里记录一下自己对这些概念的理解,以及如何将自己的程序耗时缩减到最小。
概念篇1. 线程、进程、协程进程:对于操作系统而言,进程是最小的资源管理单元。假设有两个任务A和B,当A遇到了一个很复杂的IO操作,此时CPU只能等待A读写完后,再去执行B任务。因此这样会对CPU的资源造成极大的浪费,而一种高效的执行方式是,让A在进行IO操作时,将CPU切换给B执行,当A读取完数据后,再将CPU切换回给任务A。而这就涉及到任务的切换,任务状态的恢复,以及任务所需的系统资源等等。此时就需要一个去记录这些东西,因此进程就被设计出来,计算机通过进程去识别任务,分配调度任务系统资源。而进程的状态的记录、恢复、切换被称之为上下文切换。
线程:对于操作系统而言,线程是最小的执行单元。假设我们有一个文本程序,需要接受键盘输入,将输入内容显示到屏幕,还要把内容保存到硬盘中, ...
目标检测(三)
YOLO 物体检测主要分为两大流派,之前介绍了以R-CNN为基础的一系列,它们把物体检测当做是一个分类问题。今天要介绍的是YOLO系列,它们把物体检测当做是一个单一的回归问题。
YOLO相对于R-CNN系列不同的地方主要是如下几点:
YOLO无论是在训练还是检测过程,都是采用的一个单一的端到端的网络。它没有像R-CNN那样,去找一些region proposal。这样的好处是,网络输入的是一整个图像到卷积,卷积可以利用整个图像的上下文信息。而fast-CNN在预测的过程中会丢失一些上下文信息,这样会导致将一些背景误检;
YOLO将物体检测作为一个单一的回归问题来做,图像经过一次inference,就可以输出所有的物体的bounding box以及所属类别的概率。而R-CNN系列有两个部分,一个是物体分类(分类问题),物体位置(回归问题);
网络结构
YOLO将图片划分为s*s的网格,每个网格输出B个bounding box的坐标(x,y,w,h)、坐标的置信度以及该物体属于某一类的概率。网络输出的bounding box的中心落入到某个 ...