算法

【论文总结】LINE和DEEPWALK方法总结与比较

血红的双手。 提交于 2020-03-17 07:53:58
LINE(large-scale information network embedding) 研究问题: 大规模信息网络嵌入低维向量空间。 模型优点: 1、可适应任意类型的网络:有向、无向、有权、无权。 2、采用一阶相似度和二阶相似度结合 3、边采样优化方法解决了SGD的局限性(边的权值变换很大 时,学习率难以选择,并且权值和乘以梯度导致梯度爆炸) 模型描述: 1、一阶相似度的LINE模型(只用于无向图) 为了模拟一阶相似度,对于每个无向边(i,j),我们定义顶点vi和vj之间的联合概率如下: (sigmoid function,向量越接近,点积越大,联合概率越大。其中,ui表示节点vi对应的向量。) 经验概率可以定义为:(两点之间边的权值越大,经验概率越大) 为了保持一阶相似性,一个简单的办法是最小化下面的目标函数: 我们选择最小化两个概率分布的KL散度,用KL散度代替d(·,·)并省略一些常数,得到: KL散度公式: 只考虑一阶相似度的情况下,改变同一条边的方向对于最终结果没有什么影响。因此一阶相似度只能用于无向图,不能用于有向图。 2、二阶相似度的LINE模型 二阶相似度可以用于 有向图和无向图 。下面是针对有向图的算法(在无向图中,可以将每条边看成是两条方向相反且有相同权重的有向边)。   二阶相似度假设共享邻居的顶点彼此相似。每个顶点扮演两个角色

WarShall算法

倾然丶 夕夏残阳落幕 提交于 2020-03-17 05:46:58
1.引言 图的连通性问题是图论研究的重要问题之一,在实际中有着广泛的应用。例如在通信网络的联通问题中,运输路线的规划问题等等都涉及图的连通性。因此传递闭包的计算需要一个高效率的算法,一个著名的算法就是warshall在1962年提出的 WarShall算法 。 2.算法描述 使用n阶布尔矩阵 \(R^{(k)}(0\leq k\leq n)\) 来表示有向图中任意一对节点 是否含有路径的信息。因此,可将原问题划分为如下决策阶段: \[R^{(0)},R^{(1)},\cdots,R^{(k)},\cdots ,R^{(n)}\] 具体来说,当且仅当从节点i到节点j存在一条有向路径,且该路径上的每一个中间节点的编号都不大于k时,矩阵 \(R^{(k)}\) 的第i行,第j列的元素 \(r_{ij}^{(k)}=1\) 。 对于 \(R^{(k)}\) 的计算我们可以由它的前趋 \(R^{(k-1)}\) 计算得到(分级推进计算)。 \(R^{(0)}\) ——该矩阵不允许它的路径中包含任何中间顶点,即从该矩阵的任意顶点出发的路径不含有中间顶点,此即邻接矩阵。 \(R^{(1)}\) ——允许路径中包含第1个顶点(本例编号1)作为中间顶点。 \(R^{(2)}\) ——允许路径中包含前2个顶点(本例编号1、2)作为中间顶点。 \(R^{(k)}\) —

神经网络感知器算法调整原理是什么

爷,独闯天下 提交于 2020-03-17 01:48:05
算法调整原理 如果点分类正确,则什么也不做。 如果点分类为正,但是标签为负,则分别减去 αp,αq, 和 α 至 w_1, w_2,w1​,w2​, 和 bb 如果点分类为负,但是标签为正,则分别将αp,αq, 和 α 加到 w_1, w_2,w1​,w2​, 和 bb 上 感知器算法 掌握了感知器技巧后,我们就可以编写完整的感知器运算的算法了! 下面的视频将介绍感知器算法的伪代码,现在你还不需要担心什么是学习速率(learning rate),我们在之后的课程中会详细介绍为什么这里的伪代码中有学习率。 在视频下面的测验中,你将有机会用 Python 将其编成代码,并看看自己的感知器分类成果。加油! Replay Mute Loaded: 100.00% Remaining Time -0:00 Playback Rate 0.75x Subtitles Picture-in-PictureFullscreen 编写感知器算法 该编写代码了!在此练习中,你将实现感知器算法以分类下面的数据(位于文件 data.csv 中)。 感知器步骤如下所示。对于坐标轴为 (p,q)(p,q) 的点,标签 y,以及等式 \hat{y} = step(w_1x_1 + w_2x_2 + b)y^​=step(w1​x1​+w2​x2​+b) 给出的预测 如果点分类正确,则什么也不做。 如果点分类为正

会议安排算法

限于喜欢 提交于 2020-03-16 17:54:54
学习过程总结,希望各位多多指教,我加以改正 会议安排算法思路 根据贪心策略 1.每次选取开始时间最早的 2.每次选取开会时间最短的 由此得出选取结束时间最早的符合最优 因此安排程序流程 1.将需要安排的会议按照结束时间递增排序 2.选择最早结束的会议排在第一位,遍历数组,一次找到最接近上一场会议结束时间的会议添加到数组里面 代码 一,开始数据保存在数组里面 struct Meeting { int MeetId ; int StartTime ; int EndTime ; } ; int n ; printf ( "请输入需要安排会议场次:\n" ) ; scanf_s ( "%d" , & n ) ; Meeting * meet = new Meeting [ n ] ; for ( int i = 0 ; i < n ; i ++ ) { printf ( "第%d场:\n" , i + 1 ) ; meet [ i ] . MeetId = i + 1 ; printf ( "开始时间:" ) ; scanf_s ( "%d" , & meet [ i ] . StartTime ) ; printf ( "结束时间:" ) ; scanf_s ( "%d" , & meet [ i ] . EndTime ) ; } 二,将输入数据按照EndTime地递增排序 void

机器学习之初识KNN算法——针对泰坦尼克号生存记录建模的两种方法

我只是一个虾纸丫 提交于 2020-03-16 09:46:41
KNN算法原理 本篇博客基于《机器学习实战》实现 算法原理简要概括,重在代码实现 k-近邻算法(kNN)的工作原理是:存在一个样本数据集合,称训练样本集,并且样本集中每个数据都存在标签,即样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似的数据(距离最近)的分类标签。 如图,图中绿点的标签是未知的,但已知它属于蓝方块和红三角二者其一,怎么判断出它属于哪一方呢? kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。 在上图实线圆圈内,红三角有两个,而蓝方块只有一个,所以它是红三角的可能性大;但在虚线圈内,红三角有两个,蓝方块却有三个,那么它是蓝方块的可能性就越大;所以对于kNN算法, k的取值不同 ,得出的结果可能也会不同,k的取值很大程度上决定了这个模型的准确率。 KNN算法步骤 收集数据:爬虫、公开数据源 数据清洗:处理缺失值、无关特征 导入数据,转化为结构化的数据格式 数据归一化、标准化 计算距离(欧氏距离最通用) 对距离升序排列,取前K个 判断测试数据属于哪个类别 计算模型准确率 KNN算法实现 其中 Pclass,Sex,Age,SibSp,Parch

极大团(maximal clique)算法:Born_kerbosch算法

会有一股神秘感。 提交于 2020-03-16 09:06:18
不了解极大团(maximal clique)的,请看 极大团 这篇文章 参考资料: Bron_Kerbosch算法 团、极大团、最大团介绍 当给出一个图后,我们应该怎么去寻找其中的极大子团呢? 寻找极大子团的最简单的思想是: 1.生成原始图的所有子图(可能的子图有2*n个,n代表顶点个数) 2.判断这些子图是不是团 3.将不是极大团的团删除 Born_Kerbosch算法 这个算法主要构造三个集合: R集合:存储当前极大团中加入的顶点 P集合:存储可能还加入的点 X集合:存储的是已经假如过某个极大团的点(作用是判重,因为会从每个顶点开始,枚举所有团,如果不对已经加入到某个极大团的顶点进行标记,可能会有重复极大团的出现) 基础Born_kerbosch算法 : 1.对于任意一个在集合P中的顶点V,我们把V加入到R集合(集合P中的每一个顶点均与R集合中所有的点是连接的,所以加入顶点V后,依然能保证集合R是个团),然后对在P集合中且与V相连的这部分点中,寻找下一个可能加入到R集合的点。(意思就时加入点v至R集合后更新P集合,使P集合中的任意一个点依然能和R集合中每一个点都是连接的。因为这里新R集合中加入了V,所以只要是原p集合中且与v顶点相连的这些顶点就是与新R集合中所有顶点相连) 2.回溯时把顶点V从P中移除并加入到X集合,表示在当前状态下包含顶点V的极大团已经计算完毕。 3

第二次结对编程作业

五迷三道 提交于 2020-03-15 17:46:48
1、在文章开头给出结对同学的博客链接、本作业博客的链接、你所Fork的同名仓库的Github项目地址 队友的博客: 陈秋琴 队友的本次博客: 戳 Github地址: 在这里 2、给出具体分工 秋琴:交互,API,算法。 雅辉:界面,算法调试,博客。 3、给出PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 60 Estimate ·估计这个任务需要多少时间 30 60 Development 开发 2760 3570 Analysis 需求分析 (包括学习新技术) 120 180 Design Spec 生成设计文档 60 60 Design Review 设计复审 30 30 Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 30 Design 具体设计 90 120 Coding 具体编码 2100 2700 Code Review 代码复审 120 150 Test 测试(自我测试,修改代码,提交修改) 200 300 Reporting 报告 120 135 Test Repor 测试报告 45 60 Size Measurement 计算工作量 30 30 Postmortem & Process Improvement Plan

文本分类专题(ultimate 版)绝对是目前最全的C++版开源文本分类代码和最令人耳目一新的实验解释

為{幸葍}努か 提交于 2020-03-15 14:52:00
最终版本的文本分类代码、语料、以及中间文件都已经开源共享见: http://www.cnblogs.com/finallyliuyu/archive/2012/01/15/2322721.html 。由于数据和程序规模比较大,就不在博客园上传了。大家可以自己注册下载。 (注:转载请注明作者和出处 作者:f inallyliuyu 出处:博客园) 适用人群:文本分类初学者、新手、菜鸟、业余爱好者 目的:1.将书本上关于文本分类的相关内容,如分类器、特征词选择算法等,用程序实现,让入门者对文本分类有个感性的、具体的了解,毕竟数学公式还是蛮抽象的; 2.“尽信书不如无书”,“纸上得来终觉浅,绝知此事要躬行”,借助于此平台可以对书本上的一些关于分类器、特征词选择算法的结论进行验证; 3.写给我自己,体验 “the magic of mathematics” 。 1.获取语料库 方法一:搜狗 2008版语料库 ;处理程序见《 菜鸟学习C++练笔之整理搜狗2008版语料库--获取分类语料库 》 方法二:finallyliuyu在博客园空间提供的语料库参见 《 献给热衷于自然语言处理的业余爱好者的中文新闻分类语料库之二 》 2. 文本分类系统设计框架图 预处理过程流程图 分类模块流程图: 3. 各部分代码讲解 预处理模块 3.1 建立词典 3.2 全局DF特征词选择算法 3.3

图的基本算法

谁说胖子不能爱 提交于 2020-03-14 12:14:36
1.图的表示   要表示一个图G=(V,E),有两种标准方案,即零接表和零接矩阵。这两种表示法既可以用于有向图,也可以用于无向图。 2.广度优先搜索算法   在给定图G=(V,E),和一个特定的源定点s的情况下,广度优先搜索系统地搜索G中的边,以发现可以从s到达的顶点,并计算s到所有这些可以到达顶点之间的距离(即最少的边数)。该算法同时还能生成一棵根为s、且包括所有s的可以到达顶点的广度优先树。对从s可达的任意顶点v,广度优先树从s到v的路径对应于图G中从s到v的一条最短路径,及包含最少边的路径。   算法首先会发现和s距离为k的所有顶点,然后才会发现和s距离为K+1的其他顶点。广度优先算法将每个顶点着色为白色、灰色会黑色。    如下是BFS一个例子:    广度优先算法的运行时间是图G的邻接表大小的一个线程函数,BFS的总运行时间为O(V+E)。 广度优先树   BFS在搜索图的同时,也建立了一棵广度优先树,这棵树是由每个顶点中的π域所表示的。下面的过程将输出从s到v的最短路径上的所有顶点。 3.深度优先算法   深度优先算法的先辈子图形成了一个由数棵深度优先树所组成的深度优先森林。    下图说明了DFS的执行过程。    边的分类 根据在图G上进行深度优先搜索所产生的深度优先森林Gπ,可以把图的边分为四张类型: 树边。是深度优先森林中,连接顶点V是在探寻边(u,v

KMP算法(模板)

余生长醉 提交于 2020-03-14 11:11:50
KMP算法用于字符串匹配,有两个字符串s,p,一个是文本串s,另一个是模式串p,现在要查找模式串p在文本串s中首次出现的位置是多少。暴力匹配的算法很容易想到,但是时间复杂度太高,运用KMP算法可以很好地解决这个问题。 算法详解 从头到尾彻底理解KMP //得到模式串p的next数组 void getnext(char *p,int *next){ int lenp=strlen(p); next[0]=-1; int k=-1,j=0; while(j+1<lenp){ if(-1==k || p[k]==p[j]){ ++j; ++k; next[j]=k; } else k=next[k]; } } //返回模式串p在文本串s中第一次出现的位置(从0下标开始),匹配失败则返回-1 int kmp(char *s,char *p,int *next){ int lens=strlen(s); int lenp=strlen(p); int i=0,j=0; while(i<lens && j<lenp){ if(-1==j || s[i]==p[j]){ ++i; ++j; } else j=next[j]; } return j==lenp?i-j+1:-1; } 模板题 hdu 1711 稍有区别的是这道题不是字符串的匹配,而是整数序列的匹配,但思路和KMP算法是完全一样的