摘要:
Erdos-Renyi随机图以两位著名的匈牙利数学家P.Erdős和A. Rényi的名字命名的,是生成随机无向图最简单和常用的方法,包括以下两种紧密相关的变体:G(n,p): 拥有n个节点,且边(u, v)以独立同分布的概率p产生的无向图;G(n, m): 拥有n个节点,且其中m条边按照均匀分布采样生成的无向图。G(n, p)生成时按某个次序考虑所有可能边中的每一条,然后以概率p独立地往图上添加每条边。 阅读全文
Erdos-Renyi随机图以两位著名的匈牙利数学家P.Erdős和A. Rényi的名字命名的,是生成随机无向图最简单和常用的方法,包括以下两种紧密相关的变体:G(n,p): 拥有n个节点,且边(u, v)以独立同分布的概率p产生的无向图;G(n, m): 拥有n个节点,且其中m条边按照均匀分布采样生成的无向图。G(n, p)生成时按某个次序考虑所有可能边中的每一条,然后以概率p独立地往图上添加每条边。 阅读全文
posted @ 2022-05-10 19:20
orion-orion
阅读(4458)
评论(3)
推荐(3)

序对可以为我们提供用于构造复合数据的基本“粘接剂”,鉴于Python中tuple中元素不可变的性质,我们通过list来实现序对,如[1, 2]。Python的PyListObject对象中实际是存放的是PyObject*指针, 所以可以将PyListObject视为vecter
在上一篇博文中,我们介绍了用正则表达式来匹配对应的模式,以实现简单的分词器。然而,正则表达式不是万能的,它本质上是一种有限状态机(finite state machine,FSM), 无法处理含有递归语法的文本,比如算术运算表达式。要解析这类文本,需要另外一种特定的语法规则。我们这里介绍可以表示上下文无关文法(context free grammer)的语法规则巴科斯范式(BNF)和扩展巴科斯范式(EBNF)。实际上,小到一个算术运算表达式,大到几乎所有程序设计语言,都是通过上下文无关文法来定义的。对于简单的算术运算表达式,假定我们已经用分词技术将其转化为输入的tokens流。
分词(tokenization)任务是Python字符串处理中最为常见任务了。我们这里讲解用正则表达式构建简单的表达式分词器(tokenizer),它能够将表达式字符串从左到右解析为标记(tokens)流。要完成这样的分词操作,我们首先需要定义出所有可能的标记模式(所谓模式(pattern),为用来描述或者匹配/系列匹配某个句法规则的字符串,这里我们用正则表达式来做为模式),注意此处要包括空格whitespace,否则字符串中出现任何模式中没有的字符后,扫描就会停止。因为我们还需要给标记以NAME、EQ等名称,我们采用正则表达式中的命名捕获组来实现。
Burnside引理是群论中一个结果,在考虑对称的计数中经常很有用。该结论被冠以多个人的名字。 Polya定理也用来研究不同着色方案的计数问题,它是组合数学中的一个重要的计数公式,是Burnside引理的一般化。Polya计数定理中的群G是作用在n个对象上的置换群。Burnside引理中的群G是对这n个对象染色后的方案集合上的置换群。两个群之间存在一定的联系,群G的元素,相应的在染色方案上也诱导出一个属于G的置换。
Linux下进行文件的解压、复制、移动应该是最常见的操作了。尤其是我们在项目中使用大量的数据集文件(比如机器学习)时。然而使用这些命令时一不留神就会掉进坑里,这篇文章我们就来细数用Shell进行文件操作的这些坑。压缩传参顺序是压缩后的文件在前,压缩前的文件在后,很容易搞错。使用mv语句时也要格外小心,因为它既有移动到目录的作用,也有重命名的作用。
range是python内置的一个类,该类型表示一个不可改变(immutable)的数字序列,常常用于在for循环中迭代一组特殊的数;numpy.arange是NumPy包的一个函数,它的功能与Python内置的range类似,但该类与Python内置的range区别有两点:一是支持小数参数,二是返回ndarray类型而非像range那样常常做为(隐式转换为)list类型使用;numpy.linspace也是Numpy内置的一个函数,它和numpy.arange类似,但是它不再是简单的[start, stop)左闭右开,也没有使用步长step,而是使用样本个数num。
在计算密集型计算或一些Web应用中,我们常常需要对代码做性能分析。在Python中,最原始的方法即是使用time包中的time函数(该函数以秒为计时单位)。但是一旦函数多了起来,这种方式显然过于繁杂。类似C语言中的cProfile,在Python中,也有专门的性能分析工具pyinstrument(该库非内置,需要使用conda/pip安装),我们在复杂的项目中可以使用它来代替简陋的time.time()。
在计算密集型迭代计算中,我们常常需要知道当前的迭代轮次,最传统的方法就是打印当前迭代计数器的轮数。那有没有更好的方法呢?我们可以使用tqdm模块(非py内置,需要单独按照)来在控制台绘制进度条,这样更加直观。最简单的一种方法是直接做为迭代器使用,还有一种稍复杂的方法,就是自定义进度条计数器的更新。
在联邦学习领域,许多传统机器学习已经讨论过的问题(甚至一些90年代和00年代的论文)都可以被再次被发明一次。比如我们会发现聚类联邦学习和多任务学习之间就有千丝万缕的联系。聚类联邦学习基本上都基于这样一个假设:虽然联邦学习中各节点的数据是Non-IID的,但是我们可以假定某些节点的数据可以归为一个聚类簇(簇内节点的分布近似IID)。实际上,这个思想让我们联想到高斯混合分布。高斯混合分布就假设每个节点的数据采样自高斯混合分布中的一个成分(对应一个簇),而经典的高斯混合聚类就是要确定每个节点和簇的对应关系。
浙公网安备 33010602011771号