首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实现、动态展示多种社区发现算法,这个Python库助你发现网络图的社区结构

最近,机器之心在 GitHub 上发现了一个可以发现图中社区结构的 Python 库 communities,该库由软件工程师 Jonathan Shobrook 创建。 ?...作为一种基于模块度(Modularity)的社区发现算法,Louvain 算法在效率和效果上都表现比较好,并且能够发现层次性的社区结构,其优化的目标是最大化整个图属性结构(社区网络)的模块度。...Louvain 算法对最大化图模块性的社区进行贪婪搜索。如果一个图具有高密度的群体内边缘和低密度的群体间边缘,则称之为模图。...图中的最大团是形成一个完整图的节点子集,如果向该子集中添加其他节点,则它将不再完整。将最大团视为社区是合理的,因为团是图中连接最紧密的节点群。...因为一个节点可以是多个社区的成员,所以该算法有时会识别重叠的社区。

4.2K10

主成分分析降维(MNIST数据集)

第一个坐标轴选择的是原始数据中方差最大的方向,第二个坐标轴选择的是和第一个坐标轴正交且具有最大方差的方向。...重复特征数目次,就是说找第一个特征(第一维)方差最大的方向(即覆盖数据点最多的一条直线),做第一个轴,正交且最大方差方向做第二个轴,在此基础上再看第二个特征(第二维),找方差最大方向做第一个轴,正交且最大方差方向做第二个轴...这样执行后会发现前几个坐标轴已经差不多囊括所有大差异了,剩下的就不要了,所以实现了降维。 上面从理论上讲了主成分分析和它是如何一步一步实现降维的,有一个感性认识。...主成分析的原理是什么 前面转坐标轴从理论上考虑,这里主要从数学的角度考虑。 第一个主成分是数据差异最大(方差最大)的方向,第二个主成分是数据差异次大且与第一个主成分正交的方向。...如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值。

1.8K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    主成分分析降维(MNIST数据集)

    该过程一直重复,重复次数为原始数据中特征的数目。我们会发现,大部分方差都包含在最前面的几个新坐标轴中。因此,我们可以忽略余下的坐标轴,即对数据进行了降维处理。 初看这段话感觉是抽象的。...重复特征数目次,就是说找第一个特征(第一维)方差最大的方向(即覆盖数据点最多的一条直线),做第一个轴,正交且最大方差方向做第二个轴,在此基础上再看第二个特征(第二维),找方差最大方向做第一个轴,正交且最大方差方向做第二个轴...这样执行后会发现前几个坐标轴已经差不多囊括所有大差异了,剩下的就不要了,所以实现了降维。 上面从理论上讲了主成分分析和它是如何一步一步实现降维的,有一个感性认识。...主成分分析的原理是什么 前面转坐标轴从理论上考虑,这里主要从数学的角度考虑。 第一个主成分是数据差异最大(方差最大)的方向,第二个主成分是数据差异次大且与第一个主成分正交的方向。...如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值。

    1.3K80

    快速上手Numpy模块

    我们说完了对于科学计算很重要的能直接对集合进行数学操作。那速度是如何体现出来的呢?...如果对NumPy中的元素进行操作的话,因为他里面都是相同类型的数据类型,速度一定比对list操作要快的很多。如果对list中的元素进行操作的话,使用loop结构,效率就不会很高的。 ?...这里的切片都是从0位置开始的。 我们从上面可以看出,无论是索引单个元素还是进行切片,我们都可以为其传入一个负值,从数组的后面进行索引。 ?...在一个二维数组中,各索引位置上的元素不再是标量而是一维数组。...当然如果不是的话就是说明我们在操作的时候又重新创建了一个新的数组,这个数组是对源数组的一个拷贝,这个时候去任何一个数组都不会对另一个数组产生影响。

    1.5K10

    理解决策树

    但如果特征向量的维数过高,可能会遇到维数灾难导致准确率下降。 下图是决策树进行空间划分的一个例子。在这里有红色和蓝色两类训练样本,用下面两条平行于坐标轴的直线可以将这两类样本分开: ?...对于类别型变量(不能比较大小,只是对类型的编号,如将红色编成1,蓝色为2)则需要为它确定一个子集划分,将特征的取值集合划分成两个不相交的子集,如果特征的值属于第一个子集则进入左子树,否则进入右子树。...4.如果不能再进行分裂,则把节点标记为叶子节点,同时为它赋值。 在确定这个递归流程之后,接下来要解决的核心问题是怎样对训练样本集进行分裂。...寻找最佳分裂时需要计算用每个阈值对样本集进行分裂后的这个值,寻找该值最大时对应的分裂,它就是最佳分裂。如果是数值型特征,对于每个特征将l个训练样本按照该特征的值从小到大排序,假设排序后的值为: ?...例如晚上我们无法观察到物体的颜色值,颜色属性就缺失了。在决策树的训练过程中,寻找最佳分裂时如果某一个属性上有些样本有属性缺失,可以把这些缺失该属性的样本剔除掉,然后照常训练,这是最简单的做法。

    47630

    【干货】NumPy入门深度好文 (上篇)

    回顾跨度 (stride) 的定义,即在某一维度下为了获取到下一个元素需要「跨过」的字节数。注:每一个 int32 元素是 4 个字节数。...对着上图: 第一维度 (轴 0):沿着它获取下一个元素需要跨过 3 个元素,即 12 = 3×4 个字节 第二维度 (轴 1):沿着它获取下一个元素需要跨过 1 个元素,即 4 = 1×4 个字节 因此该二维数组的跨度为...3.1 正规索引 虽然切片操作可以由多次索引操作替代,但两者最大的区别在于 切片得到的是原数组的一个视图 (view) ,修改切片中的内容会改变原数组 索引得到的是原数组的一个复制 (copy),修改索引中的内容不会改变原数组...「轴 0」上的第三个元素。...还有一个简易方法,用 arr2d[0, 2] 也可以索引第一行第三列 arr2d[0,2] 3 切片 情况一:用 arr2d[:2] 切片前两行,更严格的说法是索引「轴 0」上的前两个元素。

    2.3K20

    盘一盘 Python 系列 2 - NumPy (上)

    回顾跨度 (stride) 的定义,即在某一维度下为了获取到下一个元素需要「跨过」的字节数。注:每一个 int32 元素是 4 个字节数。...对着上图: 第一维度 (轴 0):沿着它获取下一个元素需要跨过 3 个元素,即 12 = 3×4 个字节 第二维度 (轴 1):沿着它获取下一个元素需要跨过 1 个元素,即 4 = 1×4 个字节 因此该二维数组的跨度为...3.1 正规索引 虽然切片操作可以由多次索引操作替代,但两者最大的区别在于 切片得到的是原数组的一个视图 (view) ,修改切片中的内容会改变原数组 索引得到的是原数组的一个复制 (copy),修改索引中的内容不会改变原数组...「轴 0」上的第三个元素。...还有一个简易方法,用 arr2d[0, 2] 也可以索引第一行第三列 arr2d[0,2] 3 切片 情况一:用 arr2d[:2] 切片前两行,更严格的说法是索引「轴 0」上的前两个元素。

    2.4K60

    特征工程(完)

    但这种做法并不实际,也不可行,因为会遭遇组合爆炸,特征数量稍多就无法进行。 一个可选的方案是: 产生一个候选子集,评价出它的好坏。 基于评价结果产生下一个候选子集,再评价其好坏。...这个过程持续进行下去,直至无法找到更好的后续子集为止。 这里有两个问题:如何根据评价结果获取下一个候选特征子集?如何评价候选特征子集的好坏?...当然,该方法的一个前提是,特征值都是离散型才使用该方法;如果是连续型,需要离散化后再使用,并且实际上一般不会出现 95% 以上都取某个值的特征的存在。...该统计量是一个向量,其中每个分量都对应于一个初始特征。特征子集的重要性则是由该子集中每个特征所对应的相关统计量分量之和来决定的。...比如,在三维空间中有一系列数据点,它们分布在过原点的平面上,如果采用自然坐标系的 x,y,z 三个轴表示数据,需要三个维度,但实际上这些数据点都在同一个二维平面上,如果我们可以通过坐标轴转换使得数据所在平面和

    93620

    KD-树

    在构造1维BST树类似,只不过对于Kd树,在当前节点的比较并不是通过对K维数据进行整体的比较,而是选择某一个维度d,然后比较两个K维数据在该维度 d上的大小关系,即每次选择一个维度d来对K维数据进行划分...也就是说,我们每选择一个维度进行如上的划分,就会将K维数据空间划分为两个部分,如果我 们继续分别对这两个子K维空间进行如上的划分,又会得到新的子空间,对新的子空间又继续划分,重复以上过程直到每个子空间都不能再划分为止...一种选取轴点的策略是 median of the most spread dimension pivoting strategy,统计样本在每个维度上的数据方差,挑选出对应方差最大值的那个维度。...同样,在维度d上进行划分时,划分点(pivot)就选择该维度d上所有数据的中值,这样得到的两个子集合数据个数就基本相同了。...构建 Kd-Tree 在K维数据集合中选择具有最大方差的维度k,然后在该维度上选择中值m为pivot对该数据集合进行划分,得到两个子集合;同时创建一个树结点node,用于存储; 对两个子集合重复(1)步骤的过程

    12210

    盘一盘 NumPy (上)

    回顾跨度 (stride) 的定义,即在某一维度下为了获取到下一个元素需要「跨过」的字节数。注:每一个 int32 元素是 4 个字节数。...对着上图: 第一维度 (轴 0):沿着它获取下一个元素需要跨过 3 个元素,即 12 = 3×4 个字节 第二维度 (轴 1):沿着它获取下一个元素需要跨过 1 个元素,即 4 = 1×4 个字节 因此该二维数组的跨度为...3.1 正规索引 虽然切片操作可以由多次索引操作替代,但两者最大的区别在于 切片得到的是原数组的一个视图 (view) ,修改切片中的内容会改变原数组 索引得到的是原数组的一个复制 (copy),修改索引中的内容不会改变原数组...「轴 0」上的第三个元素。...还有一个简易方法,用 arr2d[0, 2] 也可以索引第一行第三列 arr2d[0,2] 3 切片 情况一:用 arr2d[:2] 切片前两行,更严格的说法是索引「轴 0」上的前两个元素。

    2.9K40

    Python NumPy ndarray 入门指南

    这个轴有 3 个元素,即该轴的长度是 3。下面代码区中的数组有两个轴。第一个轴长度是 2,第二个长度是 3.  [[ 1., 0., 0.],  [ 0., 1., 2.]]...Equivalent to b[-1,:] array([ 9, 10, 11]) 迭代  对多维数组进行迭代是针对第一个轴完成的  >>> b array([[ 0,  1,  2],        ...默认 axis=None 会对输入数组的所有元素求和,指定负数的话是从最后一个轴开始往前统计(其实和数组负数索引是一个道理)。  对一个轴上的元素求和是一个减少操作,指定的轴会在运算完后消失。...比如对一个一维数组上的元素求和,最后我们会得到是一个数。7  想要理解这个东西,我们首先要对每个轴上有哪些元素有个清楚的认识。...比如下图: axis=0 轴的大小是 8,其上的元素是          [             1             0             0         ]        \begin

    84820

    3.算法设计与分析__分治法

    ); //递归地对右侧子序列进行快速排序 } } 在最好情况下,每次划分对一个记录定位后,该记录的左侧子序列与右侧子序列的长度相同。...4 组合问题中的分治法 4.1 最大子段和问题 给定由n个整数组成的序列(a1, a2, …, an),最大子段和问题要求该序列形如 的最大值(1≤i≤j≤n),当序列中所有整数均为负整数时,其最大子段和为...然后在每个子集中递归地求其最接近的点对,在求出每个子集的最接近点对后,在合并步中,如果集合 S 中最接近的两个点都在子集 S1或 S2中,则问题很容易解决,如果这两个点分别在 S1和 S2中,问题就比较复杂了...递归地在S1和S2上求出最接近点对 (p1, p2) 和(q1, q2),如果集合S中的最接近点对都在子集S1或S2中,则d=min{(p1, p2), (q1, q2)}即为所求,如果集合S中的最接近点对分别在...递归地继续构造集合S1,1的上包和集合S1,2的上包,然后将求解过程中得到的所有最远距离的点连接起来,就可以得到集合S1的上包。 接下来的问题是如何判断一个点是否在给定直线的左侧(或右侧)?

    78021

    生存分析:优化Cox模型的部分似然

    然后,我们定义了其对数部分似然和梯度,并通过一个实际的Python示例对其进行优化,以找到最佳的模型参数集。...由于h₀(.)的形式未指定,该模型是半参数化的。 让我们通过一个仅涉及一个协变量的简化场景来解释模型系数的含义。我们考虑一个风险因素xᵢ,例如吸烟,作为二进制变量(0:非吸烟者 vs. 1:吸烟者)。...直观地说,部分似然是在观察到的事件时间集合中,根据在这些时间点上处于风险中的患者集合和比例风险假设下,看到不良事件的条件概率的乘积。...为了拟合Cox模型,需要找到将负对数部分似然最小化的β系数。 我们回顾一下,负部分似然在大多数情况下是一个严格凸函数³。因此,它具有唯一的全局最小值。...实际上,3D图只能在每个轴上显示一个β系数。 从图中可以看出,负对数部分似然是一个凸损失函数。 5.结论 在生存分析的背景下,我们介绍了Cox比例风险模型,并在输入数据上拟合了它。

    35810

    盘一盘 Python 系列 2 - NumPy (上)

    回顾跨度 (stride) 的定义,即在某一维度下为了获取到下一个元素需要「跨过」的字节数。注:每一个 int32 元素是 4 个字节数。...对着上图: 第一维度 (轴 0):沿着它获取下一个元素需要跨过 3 个元素,即 12 =3×4 个字节 第二维度 (轴 1):沿着它获取下一个元素需要跨过 1 个元素,即 4 =1×4 个字节 因此该二维数组的跨度为...3.1 正规索引 虽然切片操作可以由多次索引操作替代,但两者最大的区别在于 切片得到的是原数组的一个视图 (view) ,修改切片中的内容会改变原数组 索引得到的是原数组的一个复制 (copy),修改索引中的内容不会改变原数组...「轴 0」上的第三个元素。...还有一个简易方法,用 arr2d[0, 2] 也可以索引第一行第三列 arr2d[0,2] 3 切片 情况一:用 arr2d[:2] 切片前两行,更严格的说法是索引「轴 0」上的前两个元素。

    1.5K30

    python 科学计算的基石 numpy(一)

    多维数组(numpy.ndarray: N-dimensional array) 如果熟悉 matlab (矩阵实验室),就知道 matlab 科学计算建立在“矩阵”之上。...在 numpy 中,维度这个概念也叫秩 ,英文叫Axes ,因此,这里创建的二维数组,我们也可以称之为秩为 2 的多维数组,它包含了 2 个轴(Axis)。...数组的 shape 属性是一个元组,对应多维数组每个 轴(Axis) 长度;size 属性是多维数组所有元素个数,它等于 shape 所有元素的乘积。...从上面打印的 dtype 属性可以看到,默认元素的数据类型是 float64 。当然,如果不想使用默认类型,可以通过 dtype 参数来设置。...对,从结构和使用方式上,的确 numpy 多维数组和列表有诸多相似的地方。在大数据分析,机器学习上尤其是深度学习,等需要对大量数据进行计算的场景,它的性能将远超普通列表。

    96510

    初探Numpy中的花式索引

    这句话对于理解花式索引非常关键,而核心就是"轴"以及"下标",既然是整数数组作为下标,这就要求如果设置多个整数数组来索引的话,这些整数数组的元素个数要相等,这样才能够将整数数组映射成下标。...分别是arr数组的下标,即arr[0]和arr[2],花式索引arr[[0, 2]]结果中的元素值和单独对arr[0]以及arr[2]进行索引的元素值是一致的。...一维数组还比较简单,下面来看一个二维数组要如何理解?...中的第一行和第三行; 一个整数数组能够索引一个轴,那么对于二维数组来说,如果有两个整数数组的话肯定能够索引两个轴。...这也从侧面证明了为什么花式索引会要求在给定轴上的整数数组元素个数要相等; 简单总结一下,一个整数数组作用在待索引数组中的一个轴上,因此整数数组的个数要小于等于待索引数组的维度个数,对于下标来说,花式索引本质上可以转换为基本索引

    2.3K20

    炒鸡简单,带你快速撸一遍Numpy代码!

    数组的元素如果也是数组(可以是 Python 的原生 array,也可以是 ndarray)的情况下,则构成了多维数组。 NumPy 数组便于对大量数据进行高级数学和其他类型的操作。...这里值得注意的是,不论是append还是insert,在往多维数组中插入元素时,一定要注意对应axis上的shape要一致。再一个就是,和delete一样,如果你想要更改原数据,需要重新赋值。...,这是如何实现的呢?...array([0, 1, 2]) 通过布尔运算筛选 这里在中括号中添加筛选条件,当该条件的结果为True时(即满足条件时),返回该值。...相同的是: 二者都可以使用参数axis来决定依照哪个轴进行排序,axis = 0时按照列排序,axis = 1时按照行排序; 不同的是: np.sort()不会更改原数组;ndarray.sort()会更改原数组

    1.6K40

    炒鸡简单,带你快速撸一遍Numpy代码!

    数组的元素如果也是数组(可以是 Python 的原生 array,也可以是 ndarray)的情况下,则构成了多维数组。 NumPy 数组便于对大量数据进行高级数学和其他类型的操作。...这里值得注意的是,不论是append还是insert,在往多维数组中插入元素时,一定要注意对应axis上的shape要一致。再一个就是,和delete一样,如果你想要更改原数据,需要重新赋值。...,这是如何实现的呢?...array([0, 1, 2]) 通过布尔运算筛选 这里在中括号中添加筛选条件,当该条件的结果为True时(即满足条件时),返回该值。...相同的是: 二者都可以使用参数axis来决定依照哪个轴进行排序,axis = 0时按照列排序,axis = 1时按照行排序; 不同的是: np.sort()不会更改原数组;ndarray.sort()会更改原数组

    1.5K30

    实用编程 | 气象上常见的评分函数及其Python实现

    1 简介 气象部门在发布预报时,发布的是一定区域范围的网格化(或站点化)的气象要素结果,以降水预报为例, 先将预报区域划分为60 * 60(视空间分辨率而定,空间分辨率越高,格点数值越大) 的网格,每个网格上都存在对应的降水预报值...事后需要对预测结果进行检验,如图1,左图为14时的预报结果y_pre,右图为真实观测结果y_obs,异同明显。那如何衡量预报好坏呢?...即如何衡量预报场(y_pre) 与 观测场(真值y_obs) 的异同程度呢? 主要采取二分类思想进行评价。但针对不同需求,气象上有许多预报准确度评价指标。 ?...ETS评分表示在预报区域内满足某降水阈值的降水预报结果相对于满足同样降水阈值的随机预报的预报技巧; ETS评分是对TS评分的改进,能对空报或漏报进行惩罚,使评分相对后者更加公平. 2 代码 def ETS...即该预报模式对强降水的预报能力较弱,对是否降水预测更准确。 在真实的检验中,y_obs并不是均匀网格的,而是站点分布的,依据相同思路,比较区域内的所有站点预测和站点观测值,也能得到对应评分。

    8.2K54
    领券