精华内容
下载资源
问答
  • 本文来自作者 秦子敬 在 GitChat 上分享 「Neo4j 数据库在社交网络领域的应用」,「阅读原文」查看交流实录。「文末高能」编辑 | 哈比一、前言Neo4j 是一种基于图论实现的新型 NoSQL 数据库。这种数据库,在...

    本文来自作者 秦子敬  GitChat 上分享 「Neo4j 图数据库在社交网络等领域的应用」,阅读原文查看交流实录。

    文末高能

    编辑 | 哈比

    一、前言

    Neo4j 是一种基于图论实现的新型 NoSQL 数据库。这种数据库,在处理社交网络,物流运输,推荐系统,欺诈检测等,关系分析等领域有着巨大优势。本场 Chat,我将为你介绍:

    1. Neo4j 与关系型、其他非关系型数据库的优势比较

    2. 哪些领域适合 Neo4j,哪些领域不适合

    3. Neo4j 的安装

    4. 介绍 Cypher 查询语言

    5. 案例实战:

    • 银行欺诈环分析

    • 文献索引

    • 寻找垃圾邮箱源头

    • 企业关系构建

    • 社交关系分析,实现一个简单的好友推荐功能

    二、正文

    我想,大家对 Mysql 这种关系型(SQL 型)的数据库肯定很熟悉。对 MongoDb 这种非关系型(NoSQL 型)数据库也不会陌生。今天我们要介绍一种新型数据库—图数据库。这种数据库是基于图论实现的。

    一提到图论,可能有的小伙伴就会倒吸一口冷气,如果你曾涉及过一些数据结构的知识,会发现图几乎是最难学的,涉及到许多晦涩难懂的算法。这里不用担心,今天介绍的 Neo4j 把很多算法已经封装好了。不需要你涉及底层,很方便。

    下面我们开始对比一下图数据库和其他关系型、非关系型的数据库的优劣。

    与传统数据库不同的是,图数据库存的是节点(对象)和边(对象与对象之间的关系)。当数据存在错综复杂的关系时,使用这类数据库是最好的选择。

    1. Neo4j 与关系型、其他非关系型数据库的优势比较

    (1)Neo4j 与关系型数据库的比较

    以 Mysql 为代表的关系型数据库已经诞生了很久了,一直是数据库领域的动力,他们将高度结构化的数据储存在一张张二维表格里,必须严格地按照相关约定对数据进行操作(比如外键约束)。你可以把它理解成一张张账本。

    但是,正是因为关系型数据库在建表之前就需要制定相关约定,常常会出现表与表之间有相互制约、相互引用的关系。随着数据库的不断增大,相互制约的关系会不断增多,执行搜索匹配的操作次数将呈现指数增加,进而消耗大量的资源。

    举一个例子,当你要查询 “小明的朋友” 这样的问题,关系层数据库会涉及到一些代价高昂的间接层,比如用索引表查询:

    从表里可以发现,小明(ID:2)的朋友是小华(ID:1),你也许会说这并不复杂呀,才一张表而已。

    但是要是我问 “小明的朋友的朋友的朋友…” 这样的深度不断增加,每增加一层就要加一张索引表,这样间接层不断增加。查询就越来越慢,而且所需的内存开销就越来越大。

    还有一点,如果我反向问,“谁的朋友是小明”,你可能会说,当然是小华呀。但是你仔细看看索引表,可小华的 FriendID 是 3 不是 1(小明)。也就是说,对于这种反向提问,关系型数据库也不能很好处理。

    这种反向提问有意义吗?当然有意义,而且很有用,打个比方,小明喜欢编程,那么反向问,谁还喜欢编程。找到喜欢编程里的大神(通过紧密度中心性等属性评判)推荐给小明关注。这样一个简单的推荐功能就出来了。

    对比起来,图数据库就有着得天独厚的优势,它储存节点,节点的属性,节点的关系。而这些关系是按类型和方向组织起来的。关系的访问是直接通过节点完成的。问 “小明的朋友的朋友的朋友…”,即使深度增加也只是增加节点而已。在复杂连接的查询上,能达到毫秒级别。

    怎么理解节点,关系,属性这些概念呢?

    这里举个例子,创建一个节点,标签是人,他的名字叫小明。小明就是一个节点。小明喜欢看电影(节点的属性),他和小华是朋友(关系)。这样一个简单的关系就建立了。

    (2)Neo4j 与其他非关系型数据库比较

    目前,大部分的 NoSQL 数据库都是基于集合和文档的,这些数据被储存在不连贯的集合里,那么这样使得数据间的相互联系,建立关系变得更加困难。也就是说数据是离散的,如果要建立关系,通常会将一个集合嵌到另一个集合里,再来实现关系。

    这样的开销也很大。但是,这种数据没有太多 “ 关系 “,使用这种数据库效率特别高,有很好的读写功能。

    这篇文章对比了 8 种不同的 NoSQL 数据库可以参考(http://blog.jobbole.com/1344/)

    2. 哪些场所适合 Neo4j, 哪些场所不适合?

    在这里,需要说明一下,图数据库不只有 Neo4j,但是 Neo4j 是一个非常优秀的图数据库,03 年就开始研发了,07 年发布。被许多公司使用,ebay, 阿迪达斯,沃尔玛等等。

    Neo4j 是基于图论实现的,自然在处理地图方面有天然优势,所以,他适用于物流管理,交通大数据。

    由于 Neo4j 的基本元素是节点和关系,它也特别适合处理有复杂关系的社交网络。另外在实现推荐系统上也很有优势,对于分析交易客户数据也很有帮助。它还能用于检测欺诈行为。下文会用一个例子说明。甚至在游戏方面也有运用。比如光荣公司的《三国志 13》。

    稍微总结适合的领域:

    • 社交网络

    • 交通大数据(物流)

    • 推荐系统

    • 欺诈分析

    • Web 安全(垃圾邮件等等)

    但是,也有不适合图数据库的领域。

    • 记录大量基于事件的数据

    • 需要大规模分布式数据处理

    • 二进制数据存储

    • 适合保存在关系型数据的结构化数据

    3. Neo4j 安装

    Windows 有 exe 安装文件,比较方便,一步一步按照可视化教程就行。Mac 安装应该也不难。这里也不做介绍了。这里为基于 Linux Ubuntu16.04,介绍安装教程。

    (1)安装 JAVA 环境

    Neo4j 是用 Java 实现的,所以你需要安装 Java Runtime Environment(JRE)。如果您已经启动并运行,请继续并跳过此步骤。打开指令框:

    sudo apt update
    sudp apt upgrade
    sudo apt install default-jre default-jre-headless

    如果指令不管用,先试试这两句,再使用。

    sudo update-alternatives —set java / usr / lib / jvm / java-8-openjdk-amd64 / bin / java
    sudo update-alternatives —set javac / usr / lib / jvm / java-8 -openjdk-amd64 / bin / javac

    看一下 java 版本:

    (2)安装 Neo4j

    首先,我们将存储库密钥添加到我们的钥匙串。

    wget --no-check-certificate -O -https://debian.neo4j.org/neotechnology.gpg.key| sudo apt-key add -

    然后将存储库添加到 apt 源列表中。

    echo 'deb http://debian.neo4j.org/repo stable/' | sudo tee /etc/apt/sources.list.d/neo4j.list

    更新一下:

    sudo apt update
    sudo apt install neo4j

    服务器应该已经自动启动,也应该在启动时重新启动。如有必要,服务器可以停止:

    sudo service neo4j stop

    并重新启动:

    sudo service neo4j start

    访问 Neo4j

    现在应该可以通过 http:// localhost:7474 / browser / 访问数据库。

    下面介绍一下打开后的面板。一开始有一个登录界面,让你输入帐号密码,第一次打开默认都是 neo4j, 进去后会自动弹出来让你改密码。登录后是这个样子的。

    这里有一些示例代码:

    你可以先尝试一下 Example Graphs 的教程 输入查询语句后得到这样的界面:

    table 是这样的,可以看到节点的属性:name、born 等等。

    Text 可以看到表格的数据:

    Code 可以看到输入的 code 和 json 格式的数据:

    4. 介绍 Cypher 查询语言

    正如 Mysql 有 SQL 语言一样,Neo4j 也有对应的查询语言 Cypher。Cypher 借鉴了 SQL 语言的结构,会有许多熟悉的关键字。对于数据库操作无非是增删改查,下面一一介绍:

    (1)增

    所谓增,就是创建数据。在图形数据库里基本元素是节点,关系,属性。Neo4j 有两个关键字实现增加。一个是 CREATE(小写也可以):

    <1> CREATE 创建节点

    create (n:User {name:"Dav"})

    这里 n 是变量名,User 是标签(在图数据库里,标签可以理解为关系型数据库里的表 table),花括号里面的是属性。

    <2> CREATE 创建关系:

    MATCH (n{name:"a"}),(m{name:"b"}) CREATE (n)-[r:KNOWS]->(m) return n,m

    这里做几点说明:

    • 小括号里是节点,节点也可以不带标签(不过不是好习惯),方括号里是关系,关系的两边是两个节点,
      类似这样 ()-[]→()

    • MATCH 是查询语句关键字

    • return n,m  把两个节点返回 才能得到图

    另一个是用 MERGE 创建节点 MERGE 和 CREATE 不同之处在于 MERGE 等于 MATCH + CREATE 会先创建前会在数据库里检查有没有这个节点。

    <3>MERGR 创建节点

    MERGE (n:Test{name:"c"}) ON CREATE SET n.created = timestamp() return n

    首先检查 Test 标签,属性为 name 的值的节点 c 是否存在,存在使用已有节点,否则创建一个新的节点。

    这里就用到了 MERGE 创建节点,还用了一个 SET 关键字,这个是改变节点的属性,属于 “改” 的范围

    <4>MERGR 创建关系

    用合并的方式创建关系,先检测关系存不存在,若存在则不修改任何数据,否则创造新的关系

    MATCH (a:Person{name:'Joel Silver'}),(b:Person{name:'J.T. Walsh'}) MERGE (a)-[r:LOVES]->(b)

    匹配出名字叫 Joel Silver 的人和名字叫 J.T. Walsh 的人建立关系 LOVES。出现这个话,代表已经建立成功了。

    Created 1 relationship, completed after 199 ms.

    (2) 删

    <1> DELETE 关键字可以删除数据:

    MATCH (n)DELETE n

    这个会报错,因为必须删除关系才能删除节点:

    MATCH ()-[r:朋友]->(m) DELETE r,m

    要这么操作,查找出朋友关系 r 以及朋友所指向的节点 m,并同时把 r 和 m 删除。出现这个就成功了:

    Deleted 1 node, deleted 1 relationship, completed after 8 ms.

    <2> REMOVE 也可以删除数据:

    MATCH (n) REMOVE n:Test

    用 REMOVE 来移除数据,移除带有 Test 标签的所有结点:

    Removed 3 labels, completed after 9 ms.

    用 REMOVE 来移除节点时要小心,REMOVE 不会像 DELETE,因为这个节点有其他关系而报错不删。

    那么这个节点被删除后,关系会指向空节点。

    (3)改

    使用 SET 去更改节点。刚刚前文已经有例子就不赘述了。

    (4)查

    使用 MATCH 去查询节点。Cypher 还有其他的缩小查找范围的办法。

    <1>MATCH p=()-[r:LOVES]->() RETURN p LIMIT 25

    用 LIMIT 关键字只拿指定数目的节点个数。

    <2> WHERE 实现条件过滤

    MATCH p=(n:Person)-[:LOVES]->() WHERE n.name <> "a" RETURN p

    查询节点 n 的属性 name 不等于 a 的所有节点 <> 表示不等于。

    <3> 使用 INDEX 索引

    使用关键字 INDEX ON 为节点的属性 name 创建一个普通的索引:

    CREATE INDEX ON :Person(name)

    输出:

    Added 1 index, completed after 46 ms.

    使用索引来查询:

    MATCH (n:Person) WHERE n.name IN ["a","b"] RETURN n as Person

    得到图:

    显式使用索引查询:

    MATCH(n:Person)
    USING INDEX n:Person(name)
    WHERE n.name = ‘a’
    RETURN n as Person

    用 DROP 关键字删除一个已经存在的索引:

    DROP INDEX ON :Person(name)

    输出:

    Removed 1 index, completed after 1 ms.

    Cypher 还能使用一些函数来辅助查询 比如 size()、any()等等。具体其他的可以查阅相关的 API 文档。这里只提两个重要的,查询最短路径和所有最短路径。

    <1> 最短路径 shortestpath()

    以这个图为例子,从部分的图里找出 Joel Silver 到 Jonathan Lipnicki 的最短路径:

    MATCH (p1:Person {name:”Jonathan Lipnicki”}),(p2:Person{name:”Joel
    Silver”}), p=shortestpath((p1)-[*..10]-(p2)) RETURN p

    这里 [*..10] 表示路径深度 10 以内查找所有存在的关系中的最短路径关系

    得到图:

    <2> 所有最短路径

    MATCH (p1:Person {name:”Jonathan Lipnicki”}),(p2:Person{name:”Joel
    Silver”}), p=allshortestpaths((p1)-[*..10]-(p2)) RETURN p

    以上理论部分已经讲完,下面进入实战部分。

    5. 案例实战

    (1)银行欺诈环分析

    这里引入一个概念,第一方银行欺诈,本质是使用他人真实身份编造和伪造身份进行欺诈。

    有如下几个特点:

    • <1> 两个或两个以上的人组成欺诈环;

    • <2> 欺诈环里的人共享合法联系人的部分信息,如电话号码。

    我们可以使用 Neo4j 来识别存在的欺诈环。

    首先,我们创建欺诈环(由于篇幅限制,就不把代码贴在这里,可以参考这个教程 http://blog.sina.com.cn/s/blog_735f29100102wobk.html)。

    查询可疑的欺诈环:

    从左到右,欺诈环的成员,涉嫌欺诈的联系方式,欺诈环的大小。计算出欺诈的风险值:

    2)文献索引

    先举个小例子,在学术界需要查一些论文,通常是用全文搜索,这样的搜索效率不高。可以用 Neo4j 获取匹配度高的论文。这里先举个小例子。打开 Neo4j, 先手动插入数据。

    create
    (论文 1:论文图谱{论文名:” 论文 1”}),(论文 2:论文图谱{论文名:” 论文 2”}),(论文 3:论文图谱{论文名:” 论文 3”}),(论文 4:论文图谱{论文名:” 论文 4”}),(论文 5:论文图谱{论文名:” 论文 5”}),(论文 6:论文图谱{论文名:” 论文 6”}),(论文 7:论文图谱{论文名:” 论文 7”}),(论文 1)-[:相似]->(论文 2),(论文 1)-[:相似]->(论文 3),(论文 2)-[:相似]->(论文 4),(论文 2)-[:相似]->(论文 5),(论文 3)-[:相似]->(论文 5),(论文 5)-[:相似]->(论文 6),(论文 7)-[:相似]->(论文 2),(论文 7)-[:相似]->(论文 6) return *


    查找论文 1 到论文 6 之间相似的传递路径,这样就可以找出,论文的主要参考了那些论文。

    MATCH n=allshortestPaths((论文 1:论文图谱{论文名:" 论文 1"})-[*..6]->(论文 6:论文图谱{论文名:" 论文 6"})) RETURN n


    接下来,我想通过一个完整的例子实现文献索引,从数据获取,导入,再到分析。我将使用 Scrapy 爬取 1000 本书的信息。保存到 csv,导入 neo4j,再进一步分析。

    首先是使用 Scrapy 爬取信息。数据爬下来后,是这样。

    从左到右依次是书的 upc 编码,名字,类型,储存量,价格,评分,评分数目,简介目标网站是 http://books.toscrape.com/。先使用 scrapy shell 来操作一个爬虫,先简单进行爬取实验,把网页分析好。

    scrapy shell http://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html

    设计思路:

    • <1> 根据刚刚分析出来的网页信息,设置 items

    • <2> 根据刚刚分析的网页,设计爬虫 spieder

      • 爬虫需要爬去单个页面需要信息

      • 爬完一个网页,爬虫需要去爬取下一个目标网页

    • <3> 在 setting 里设置相关信息

    • <4> 在 pipelines 处理特别的数据

    代码我已经上传到 git(https://coding.net/u/Qinxianshen/p/python-spider/git)。

    通过 csv 文件,把数据导入 Neo4j。首先把 book2.csv 放到这个目录下:

    /var/lib/neo4j/import

    首先读取一下文件,看看是否能获取到:

    LOAD CSV WITH HEADERS FROM "file:///books2.csv" AS line WITH line RETURN line

    LOAD CSV WITH HEADERS FROM "file:///books2.csv" AS line CREATE (:Books { Id: line.upc, Name: line.name, Price: line.price,Rate:line.review_rating,content:line.jianjie,kinds:line.Kinds,stock:line.stock})

    这样就把 1000 本书作为节点,存进去了。输出:

    Added 1000 labels, created 1000 nodes, set 5998 properties, completed after 228 ms.

    查询 25 个看看情况:

    并且可以查看到各种属性。但是还没有关系。在创建几个书类节点:

    create (n:书类名{n.Name=”Sequential Art”}) .. ..

    再建立关系:

    MATCH (n:Books2),(m:书类名) where n.kinds = m.Name create(n)-[r:属于]->(m) RETURN n,r,m LIMIT 25

    一个简单的书籍-门类图就建好了,现在我们可以通过书的评分,门类,价格进行索引。从而完成一个简单的书目推荐系统。在第五个案例我会合在一起做。

    (3)寻找垃圾邮箱源头

    如果你不想在本地下载 Neo4j,可以去可以登录微云数聚公司官网 在线尝试一下 Neo4j。这里我们就基于这个平台,来做一个垃圾邮件的案例。

    在命令框输入:

    MATCH m=(s:Person)-->(e:Email)-->(r:Person) WHERE e.title=~'.* 普通发票 .*' RETURN m LIMIT 15


    这里只返回了 15 个节点。如果我们要查到垃圾邮箱的源头,会怎么做?通常垃圾邮箱的标题或者内容会有关于促销,招聘等等字眼。

    这里我们就通过对所有邮件的标题遍历,查找关键字 “发票”。如果经常发这种邮件的人,邮件数量一定很多。这里我们设置当有这种信件的数量超过 105,就输出他。

    MATCH m=(s:Person)→(e:Email)→(r:Person)
    WHERE e.title=~’. 发票 .
    WITH s,COUNT(e) AS num,COLLECT(e) AS emails,COLLECT(r) AS recevies
    WHERE num > 105
    RETURN s,emails,recevies

    得到图:

    很明显就发现,几乎所有发票都是来自这个邮箱 yrdudthfffxddh@126.com, 主犯找到了。

    那么就可以发现这个主犯了。那么这样就结束了吗?不不,我在上文说过 “反向提问” 是很有价值的,既然找到了主犯,那么我们不妨多看看,

    他还会经常发什么邮件,这类邮件有什么特征。从中挖掘出这类人,发垃圾邮箱的 “套路”。

    MATCH m=(s:Person)→(e:Email)→(r:Person)

    WHERE s.account=~’yrdudthfffxddh@126.com’

    RETURN s,e,r

    得到图:

    仔细观察,你会发现,这个主犯的邮件除了含 “发票” 的字眼,还有 “来电恰谈”,“费用优惠” 等字眼。那么这样我们就可以记住这样的字眼,下次就可以过滤这类字眼的邮件。

    通过上面这个例子,应该能体会到,图数据库,在处理垃圾邮件,查找信息的优势了。特别是在处理 “反向提问” 的问题。并且查询效率都是在毫秒级别的。

    4)企业关系构建

    这里还是基于微云数聚公司的平台。

    MATCH (n:`公司`) RETURN n LIMIT 25


    投资图:

    MATCH a=(:公司 {名称:' 中航工业集团公司 '})-[r*]->() RETURN nodes(a)

    这样对于公司就有一个直观的把握。谁投资了谁,现金流的流向。对于公司的财务管理也有直观的展现。

    担保图:

    MATCH a=(:公司 {名称:' 中航工业集团公司 '})-[r:担保 *]->() RETURN nodes(a)

    (5)社交关系分析,实现一个简单的好友推荐功能

    这里我们会用到第二个案例的书籍库,首先创建好友圈。

    create (小北:朋友圈{姓名:” 小北 “, 喜欢的书类:”Poetry”}),
    (小菲:朋友圈{姓名:” 小菲 “, 喜欢的书类:”Science Fiction”}),
    (小鹏:朋友圈{姓名:” 小鹏 “, 喜欢的书类:”Music”}),
    (小颖:朋友圈{姓名:” 小颖 “, 喜欢的书类:”Politics”}),
    (小兰:朋友圈{姓名:” 小兰 “, 喜欢的书类:”Music”}),
    (小峰:朋友圈{姓名:” 小峰 “, 喜欢的书类:”Travel”}),
    (小讯:朋友圈{姓名:” 小讯 “, 喜欢的书类:”Poetry”}),
    (小东:朋友圈{姓名:” 小东 “, 喜欢的书类:”Sequential Art”}),
    (小唯:朋友圈{姓名:” 小唯 “, 喜欢的书类:”Young Adult”}),
    (小窦:朋友圈{姓名:” 小窦 “, 喜欢的书类:”Poetry”}),
    (小齐:朋友圈{姓名:” 小齐 “, 喜欢的书类:”Default”}),
    (小林:朋友圈{姓名:” 小林 “, 喜欢的书类:”Poetry”}),
    (小锐:朋友圈{姓名:” 小锐 “, 喜欢的书类:”Default”}),
    (小伟:朋友圈{姓名:” 小伟 “, 喜欢的书类:”Young Adult”}),
    (小玲:朋友圈{姓名:” 小玲 “, 喜欢的书类:”Business”}),
    (小讯)-[:认识]->(小窦),
    (小讯)-[:认识]->(小齐),
    (小讯)-[:认识]->(小林),
    (小讯)-[:认识]->(小鹏),
    (小讯)-[:认识]->(小伟),
    (小讯)-[:认识]->(小峰),
    (小菲)-[:认识]->(小鹏),
    (小菲)-[:认识]->(小峰),
    (小菲)-[:认识]->(小唯),
    (小峰)-[:认识]->(小北),
    (小峰)-[:认识]->(小兰),
    (小东)-[:认识]->(小林),
    (小东)-[:认识]->(小锐),
    (小东)-[:认识]->(小菲),
    (小鹏)-[:认识]->(小颖),
    (小北)-[:认识]->(小兰),
    (小颖)-[:认识]->(小东),
    (小唯)-[:认识]->(小鹏),
    (小唯)-[:认识]->(小锐),
    (小伟)-[:认识]→(小玲)

    展现小峰的朋友圈:

    MATCH n=(:朋友圈{姓名:" 小峰 "})-[*..6]-() return n


    这里要引入几个概念。

    <1> 一度关系(直接关系)

    MATCH n=(:朋友圈{姓名:" 小讯 "})-[:认识]-() return n


    <2> 二度关系

    MATCH n=(:朋友圈{姓名:" 小讯 "})-[*..2]-() return n


    我曾经看到一个问题,如果你住在一个村子,要认识奥巴马,要经过几个人呢?答案是 6 个。假设你在一个村里,那么村长,乡长,县长,市长,省长,国家主席,奥巴马,通过六个人就可以了。所以你会发现,我们通常在 6 度深度搜索。

    <3> 两个陌生人之间的最短认识路径

    我们可以用 Neo4j 来找到两个不认识的人,建立联系的最短路径。

    MATCH n=shortestPath((小讯:朋友圈{姓名:" 小讯 "})-[*..6]-(小锐:朋友圈{姓名:" 小锐 "})) return n


    <4> 两个陌生人之间的所有最短认识路径

    MATCH n = allshortestPaths((小讯:朋友圈{姓名:" 小讯 "})-[*..6]-(小菲:朋友圈{姓名:" 小菲 "})) return n


    <5> 根据节点的影响力或者及其它属性来制作推荐系统

    不知道,大家有没有思考过,B 站、淘宝,QQ 等等这些软件是怎么作推荐系统的。比如:B 站,每一个 Up 主在上传视频的时候都要选好投稿区,类型,关键字标签。这样就已经完成了数据的分类。

    你如果经常看官延区,那么你来官延区的频度一定很大,那么可以给你推荐这些视频,再根据 Up 主的影响力(节点的大小)来给你推荐。当然他们肯定还使用了许多机器学习的算法。在我看来,也可以使用 Neo4j 做一个简单的推荐功能。

    比如做一个小小的书籍推荐。在创建节点的时候,我顺便创建了他们喜欢的书的类型(你会发现,你用一些 app 时,你一件事就是让你确定喜好)

    结合第二个案例的数据:

    MATCH (n:朋友圈),(m:Books2) where n. 喜欢的书类 = m.kinds and toInt(m.Rate)>4  create (m)-[r:推荐]->(n) return m,r,n

    这里我们做了一件事,就是根据大家填上来的喜好书籍类型,我们挑选出评分大于 4 的书籍给他们。

    并且从图中可以很容易发现,越是推荐书籍密集的相近的人,他们就具有相同的爱好。比如小齐和小锐,从图中还能发现,两个人并不是直接认识的。根据这一点,我们就可以介绍小锐和小齐认识交流。

    由此,我们完成了两层推荐。一个是书籍的推荐,一个是朋友的推荐。但是,实际运用中肯定不会这么草率和简单,考虑的肯定会更加详细。这里只是做一个简单的抛砖引玉。

    三、推荐资料:

    在学习 Neo4j 的过程中,我也找了不少资料。这里也供大家参考。

    • 《Neo4j 权威指南》—清华大学出版社

    • 《Neo4j 全栈开发》—电子工业出版社

    • 《图数据库》—人民邮电出版社

    • 《精通 Scrapy 网络爬虫》—清华大学出版社

    • Neo4j 官方文档(http://neo4j.com/docs/stable/tutorials.html)

    四、写在最后的话

    Neo4j 确实是一个很好的数据库,虽然现在还没火起来,但是我相信,未来它的应用场景会越来越多的。毕竟画图是我们人类认识世界最直观的方式了。

    非常非常感谢大家能来参加这场 Chat。这是我做的第二场 Chat,虽然已经有第一次的经验了。但是说实在话,还是很紧张。毕竟我还是一名学生,做的东西肯定会有不少疏忽和错漏,还请大家谅解。

    有什么疑问都可以在评论区留言。这对我也是一次很好的历练与成长。最后感谢各位的支持。感激不尽。

    秦子敬  17 年 12 月 16 日

    近期热文

    从零开始,搭建 AI 音箱 Alexa 语音服务

    修改订单金额!?0.01 元购买 iPhoneX?| Web谈逻辑漏洞

    让你一场 Chat 学会 Git

    接口测试工具 Postman 使用实践

    如何基于 Redis 构建应用程序组件

    深度学习在摄影技术中的应用与发展


    「阅读原文」看交流实录,你想知道的都在这里

    展开全文
  • Python应用的五大热门领域

    千次阅读 2018-12-12 17:27:45
    借着人工智能的东风,Python在这两年逐渐火了起来,Python在编程语言排行中的不断攀升,不得不说有着人工智能的很功劳。凭借Python简洁易于上手的语法和丰富的扩展,Python在人工领域的应用越来越广泛。越来越多的...

    一、人工智能---- 为Python火热增长动力

    借着人工智能的东风,Python在这两年逐渐火了起来,Python在编程语言排行中的不断攀升,不得不说有着人工智能的很大功劳。凭借Python简洁易于上手的语法和丰富的扩展,Python在人工领域的应用越来越广泛。越来越多的培训机构也以“Python”和“人工智能”作为旗号和噱头,打着“21天精通Python,3个月掌握人工智能”的口号,收割了一波又一波迷茫的应届毕业生和在其他行业郁郁不得志的转行从业人员。仿佛学了Python就会人工智能,又仿佛要学习人工智能就必须学习Python。诚然,Python各种第三方机器学习、神经网络模块的诞生大大降低了对机器学习算法、模型的建构、训练和测试的难度。使得普通人通过简单地调用模块的API就能够实现可进行预测的某某神经网络。
    但是Python不只是为了人工智能而生,人工智能也不只是Python的专属。Python从上个世纪90年代诞生至今,从玩具语言,到万能语言。它所能带给我们的,不仅仅是人工智能的风口热点,作为一门胶水语言,其在其他领域的发展和应用也十分显著和高效,其中一些方面还能够与人工智能紧密地结合在一起。也值得我们去运用和了解。
    在这里插入图片描述

    二、网络爬虫——大数据时代,没有数据怎么行?

    都说现在是大数据时代了,大数据,大数据,没有海量的数据怎么能够称之为大数据。大数据的来源大概有这么几种:
    (1)企业内部原始积累数据。

    经过长年累月的业务沉淀,企业内部的数据库中积累的海量的数据可供应用;

    (2)外部采集数据

    外部采集数据,通过各种软件(八爪鱼、火车头等采集器)直接进行数据采集,或者使用各种编程语言编写网络爬虫进行数据采集。

    说到使用编程语言编写网络爬虫,就不得不提到Python的简便、高效和、强大了。在几年之前,大多数网络爬虫还是使用java进行编写的,但是随着Python生态的不断壮大,其简洁的语法搭配强大的功能,使得Python在编写网络爬虫有着得天独厚的优势。
    在这里插入图片描述

    三、web开发——让世界看到你的作品

    虽说在Web开发领域,PHP占了大头,世界上绝大多数的网站都是使用PHP开发的,但是这也丝毫掩盖不了Python在Web开发领域的光彩。
    在Python中进行Web开发,主要依赖于各个Web开发框架,流行的有:

    功能强大,采用MTV架构的Django框架;
    
    轻量简洁的Flask;
    
    性能超群的tornado;
    

    使用这些框架可以快速地根据自己的需求开发出一个合格的Web应用。小到个人博客,大到商品化的产品,Python中的Web框架都能够胜任。
    在这里插入图片描述

    四、数据分析——看到数据背后的真相

    数据分析也是随着大数据的概念再次兴起的一个领域。有了大量的数据,自然需要对其进行数据清理、数据提取和数据分析。

    在科学计算和数据分析领域,Python一直没有缺席。在这些方面都有非常成熟的第三方模块和活跃的社区,使python成为数据处理任务的一个重要解决方案。

    NumPy和Pandas等模块,为数据处理提供了非常大的便利。
    matplotlib、pyecharts等模块也是非常优秀的数据可视化模块。
    Jupyter Notebook模块则为数据分析人员提供了一种全新的数据分析流。
    

    在这里插入图片描述

    五、 GUI开发——向更多人分享你的编程成果

    如果代码永远都只是停留在代码层面,那么其能够实现的功能永远都不方便传播和供大多数人使用,所以将其通过桌面程序包装出来,就很有必要。

    比如我们使用Python写了一个自动签到小程序,写了一个特定网站的采集程序,嗯,觉得很好用,想分享给同事、同学或者其他小伙伴。如何包装这个程序,给他们都能使用呢,最好的做法还是编写打包出GUI的图形用户界面桌面程序,直接将打包好的程序文件发送过去。既方便编写者传播,也方便使用者使用。

    Python在编写GUI程序方面,有多种选择,都能够实现不错的功能。其中:

    Tkinter,是Python的内置模块,无需安装第三方的模块,就可以使用,实现编写一些简单,交互不复杂的GUI程序。
    
    PyQt5/PySide2:,Qt的Python封装包,功能强大,可编写复杂的GUI程序。
    
    WxPython,是wxWidgets的Python封装包,与PyQt5类似。
    
    Kivy,新兴的跨平台GUI开发模块,支持移动端的GUI开发。
    

    六、后面的话

    上面介绍了日常使用Python中经常会涉及到的一些领域的应用。其实除此之外,还有很多领域都有Python的身影,比如网络安全,渗透测试,自动化运维,等等。
    Python是一门胶水语言,这是它的劣势,同时也是它的优势,通过各种扩展,Python能够实现绝大多数领域的应用。其作为一门通用性的编程语言,适合衔接不同的领域,实现所谓的All in Python。

    这是Python的一个敲门砖,同时也是大家的敲门砖。或许你通过Python,认识了编程;那么通过Python在这些领域的应用,你可以认识和接触到其他领域;在使用Python应用在其他领域的过程中,发现Python或许并不是唯一解和最优解,那么,前路明明,走不走,看你了!

    展开全文
  • 项目管理九大知识领域五大过程组

    千次阅读 2011-11-23 20:26:51
    项目管理九大知识领域五大过程组 PMP人士与非PMP人士之间的区别是什么,一个最简单的区别就在于:PMP谈到项目管理,往往脱口而出的就是PMBOK、九大知识领域五大过程组、WBS、关键路径法、挣值管理等项目管理...
      
    

    项目管理九大知识领域五大过程组

    PMP人士与非PMP人士之间的区别是什么,一个最简单的区别就在于:PMP谈到项目管理,往往脱口而出的就是PMBOK、九大知识领域、五大过程组、WBS、关键路径法、挣值管理等项目管理相关术语。而非PMP往往说了半天项目管理,却往往只是些经验之谈,缺乏系统性,让人有种云里雾里的感觉。无论身处哪个行业,对于从事项目相关工作的人来说,过对项目管理知识体系的理解和掌握,对于提升管理水平,促进同行沟通与交流有着非同寻常的意义。这也是美国项目管理协会在全球推广项目管理知识体系与PMP认证考试初衷。

    现代项目管理的概念起源于美国的曼哈顿计划。上个世纪五十年代后期,美国的Booz-Allen Lockheed公司首次在北极星导弹计划中运用了PERT计划评审技术。几乎在同一时期,美国的Dupontand RamintonnRand公司创造了CPM关键路径法,用于研究和开发、生产控制和计划编排,结果大大缩短了完成预定任务的时间,之后它们分别被称为计划评审技术关键路径法。现代项目管理科学便是从这两项技术的基础上迅速发展起来的, 融合了后来发展起来的WBS工作分解技术、蒙特卡罗(Monte Carlo)模拟技术、EVM挣值管理技术、关键链技术等,并借鉴和融合了其他通用或专业管理领域的许多知识,形成了一门关于项目管理的专门管理学科。
      
    美国项目管理协会(PMI)成立于1969年,是一个拥有近40万名会员的国际性学术组织。它致力于向全球推行项目管理理念与方法,在教育、会议、标准、出版和认证等方面进行投入,以提高全球项目管理专业的水准,PMI正在成为一个全球性的项目管理知识与智囊中心。
      

    项目管理知识体系即PMBOKProject Management Body of Knowledge)是美国项目管理协会所提出的全球标准,该知识体系构成了PMP认证考试的基础。它的第一版在1996年正式推出,由200多名国际项目管理专家历经四年才完成的,集合了国际项目管理界精英的观点,避免了一家之言的片面性。而更为科学的是,每隔4年,来自于世界各地的项目管理精英会重新审查更新PMBOK的内容,使它始终保持项目管理学科的圣经地位。PMBOK指南每4年更新一次,目前已经是第四版。


    项目管理知识体系(PMBOK)的主要内容由项目管理五大过程组与九大知识领域构成:
      

    五大过程组或项目管理的五个阶段分别是:项目启动、项目规划、项目执行、项目监控与项目收尾,涵盖了项目管理工作的全过程。

    九大知识领域是针对项目经理必须掌握的基本知识而构成,具体包括:

      

    · 整合管理——侧重于阐述项目经理在整个项目管理生命周期内的重要整合工作,比如:制定项目章程、制定项目管理计划、项目执行、项目监控与整体变更控制、项目或阶段收尾工作。通过整合工作,能充分发挥项目经理的综合价值。
      

    · 范围管理——通过需求分析来制定项目范围,进而做工作分解结构(WBS),以制定项目的范围基准,并在项目工作中参照范围基准来核实范围并控制范围。
      

    · 时间管理——通过对WBS进一步分解到活动层次,明确活动的资源和时间估算,进而制定出项目进度计划网络图,使用关键路径法或关键链法最后确定进度基准,并在工作中根据进度基准来控制进度。
      

    · 成本管理——对整个项目工作的成本进行估算,制定成本基准,制定预算,并在工作中控制成本。
      

    · 质量管理——要求项目管理人员了解基本的质量管理思想与工具,对质量计划、质量保证、质量控制有明确的理解,对基本的质量控制工作如鱼骨图、控制图、直方图、帕累托图等能初步了解。
      

    · 人力资源管理——侧重于对项目团队成员的管理,包括规划团队职责、建设高绩效团队,冲突处理、以及人际关系技能。
      

    · 沟通管理——项目经理90%的时间花在沟通上,沟通管理要求项目管理人员能与项目干系人进行有效的沟通。

    ·
    风险管理——使得项目经理建立风险意识,掌握风险识别、风险分析与风险应对的基本策略。  


    · 采购管理——在项目的部分工作包需要外包的情况下,项目经理应掌握基本的采购与合同管理知识。
      

    PMBOK的基本内容之外,作为一个称职的项目经理,还必须具有相应的通用管理知识和经验、相关的业务知识背景以及具备良好的职业道德。也就是说,项目经理并不只是一位专才,而应当是一个具有相当丰富的项目管理知识并具有相应专业知识结构的复合型通才。

    展开全文
  • GNN—图网络入门

    千次阅读 多人点赞 2019-09-10 15:32:17
    文章目录一、GNN概述1.1 GNN特点1.2 类型与传播1.3 训练方法与GNN变体1.4 传播步骤与GNN变体二、GNN框架2.1 GNN的三通用框架三、GNN的应用场景 嵌入(graph embedding)、网络嵌入(network embedding)、网络...


    最近的图深度学习(Graph Deep Learning)关注的趋势增大。它主要包括以下五大类模型:
    半监督方法:包括图神经网络(GNN)和图卷积网络(GCN)
    无监督方法:图自动编码器(GAE)
    图递归神经网络(Graph RNN)和图强化学习(Graph RL)

    图嵌入(graph embedding)、网络嵌入(network embedding)、网络表示学习(network representation learning),这三个概念从原理上来说其实表达的是同一件事,核心思想就是“通过深度学习技术将图中的节点(或边)映射为向量空间中的点,进而可以对向量空间中的点进行聚类、分类等处理”。而接下来讲的图卷积神经网络就属于图嵌入技术的一种。

    一、GNN概述

    GNN 论文:https://github.com/thunlp/GNNPapers
    GNN是Graph Neural Network的简称,是用于学习包含大量连接的图的联结主义模型。当信息在图的节点之间传播时GNN会捕捉到图的独立性。与标准神经网络不同的是,GNN会保持一种状态,这个状态可以代表来源于人为指定的深度上的信息。

    图神经网络处理的数据就是图(Graph),而图是一种对节点和节点间关系建模的数据结构,是机器学习中唯一的非欧几里得数据,由顶点 (vertices)边 (edges) 两个部件组成的一种数据结构,图分析可用于节点分类、链接预测和聚类。一个图 G 可以用它包含的 顶点 V 和边 E(有向或无向) 的集合来描述。
    在这里插入图片描述
    GNN的目标是学习到每个节点的邻居的状态嵌入,这个状态嵌入是向量且可以用来产生输出。GNN就是一种在图域上操作的深度学习方法。

    图神经网络(Graph NNs)可能解决图灵奖得主Judea Pearl指出的深度学习无法做因果推理的核心问题。

    1.1 GNN特点

    基于CNN与graph embedding两种思想

    • CNN特征提取:CNN可以提取大量本地紧密特征并组合为高阶特征,但CNN只能够操作欧几里得数据。CNN的关键在于局部连接、权值共享、多层使用;
    • graph embedding降维操作:在低维向量上学习表示图节点、边或者子图。思想源于特征学习和单词嵌入,第一个图嵌入学习方法是DeepWalk,它把节点看做单词并在图上随机游走,并且在它们上面使用SkipGram模型;

    GNN会在图结构上聚合信息,因此可以对输入/输出的元素及元素间的独立性进行建模。GNN还可以同时使用RNN核对图上的扩散过程进行建模。GNN也需要防止过拟合和欠拟合,由于图数据通常过大,所以可以采用随机游走的方式,来获取图的特征。

    GNN的优势
    标准神经网络(CNN、RNN)无法解决图输入无序性,因为它们将点的特征看做是特定的输入;
    两点之间的边代表着独立信息,在标准神经网络中,这种信息被看做是点的信息,而GNN可以通过图结构来进行传播,而不是将其看做是特征;通常而言,GNN更新隐藏节点的状态,是通过近邻节点的权值和;
    高级人工只能需要更高的可解释性;标准神经网络可以生成合成图像或文档,但无法生成图;GNN可以生成无结构的数据(多种应用:文字分类、神经机器翻译、关系提取、图像分类);
    GNN不足
    更新节点的隐藏状态是低效的;
    在迭代中使用相同的参数,更新节点隐藏状态是时序的;
    在边上有一些信息化的特征无法在原始GNN中建模;如何学习边的隐藏状态也是问题;
    1.2 图类型与传播

    在这里插入图片描述
    原始GNN的输入图是带有标记信息的节点和无向边:

    1. 有向图(Directed Graphs ):信息更紧密;
      图形的第一个变体是有向图。无向边可以看作是两个有向边,表明两个节点之间存在着关系。然而,有向边比无向边能带来更多的信息。例如,在一个知识图中,边从head实体开始到tail实体结束,head实体是tail实体的父类,这表明我们应该区别对待父类和子类的信息传播过程。有向图的实例有ADGPM (M. Kampffmeyer et. al. 2018)。
    2. 异质图(Heterogeneous Graphs):包含几种不同的节点,最简单的处理方式是one-hot feature vector;
    3. 带边信息的图(Edge-informative Graph):每个边也有信息、权值和类型,我们可以将边也变成节点,或者当传播时在不同的边上使用不同的权重矩阵;例如G2S和R-GCN。

    在这里插入图片描述

    1.3 训练方法与GNN变体

    原始的图神经网络在训练和优化步骤有缺陷,它需要完整的图拉普拉斯,对大图而言计算力消耗大。更多的,层L上的节点嵌入是递归计算的,通过嵌入它的所有L-1层的邻居。因此,单层节点是成倍增长的,因此对节点的计算消耗巨大。且GCN是对每个固定图进行独立训练的,因此泛化能力不好。
    使用不同训练方法的图变体
    在这里插入图片描述
    以下是几种改善方式:

    1. GraphSAGE:将全图拉普拉斯替换为可学习聚合函数,是使用信息传递并生长到未见节点的关键,GraphSAGE还使用了邻居采样来避免接收域爆炸;
    2. FastGCN:对采样算法做了更深的改进,FastGCN为每层直接采样接受域,而非对每个节点进行邻居采样;
    3. control-variate based stochastic approximation:使用节点的历史激励作为控制随机数,此方法限制接受域为1跳邻居,但使用历史隐藏状态作为可接受最优化方法;
    4. Co-Training GCN and Self-Training GCN
      用于解决GCN需要许多额外的有标记数据及卷积过滤器的局部特征的限制,因此使用了此方法来扩大训练数据集,Co-Training方法为训练数据找到最近的邻居,Self-Training则采用了类似boosting的方法。
    1.4 传播步骤与GNN变体
    • 对GNN而言,传播步骤是非常重要的,它可以获得节点(边)的隐藏状态。传播步骤使用的方法通常是不同的聚合函数(在每个节点的邻居收集信息)和特定的更新函数(更新节点隐藏状态)。

    • 在传播步骤进行修改的GNN变体
      在这里插入图片描述

    卷积操作

    • 光谱方法:光谱方法在图的光谱表示上运行,学习的过滤器是基于拉普拉斯特征权重的,因此与图的结构紧密相关,难以泛化;
    • 非光谱方法:直接在图上定义卷积,对紧密相近的节点进行操作,主要的挑战就是非光谱方法在不同大小的邻居上的定义和保持CNN的局部变量,非光谱方法具有点分类和图分类两种;

    Gate闸门机制

    • 在GNN中使用门限机制是为了减少限制并改善长期的图结构上的信息传递。

    Attention注意力机制

    • 注意力机制已经成功的应用于基于时序的任务,例如机器翻译、机器阅读等。GAT在传播步骤使用了注意力机制,会通过节点的邻居来计算节点的隐藏状态,通过自注意策略。

    Skip connection

    • 许多机器学习的应用都会使用多层神经网络,然而多层神经网络不一定更好,因为误差会逐层累积,最直接定位问题的方法,残差网络,是来自于计算机视觉。即使使用了残差网络,多层GCN依旧无法像2层GCN一样表现良好。
    • 有一种方法是使用高速路GCN(Highway GCN),它像高速路网络一样使用逐层门限。

    二、GNN框架

    框架的目的是集合不同的模型。
    有论文提出message passing neural network(MPNN),可以同一化多种图神经网络和图卷积网络方法。
    non-local neural network(NLNN)则同一化了几个自注意方法。
    graph network(GN)统一了MPNN和NLNN
    还有其他的Interaction Networks,Neural Phsics Engine,CommNet, structure2vec,GGNN,Relation Network,Deep Sets和Point Net。

    2.1 GNN的三大通用框架

    MPNN
    J. Gilmer等人(J. Gilmer et. al. 2017)提出了消息传递神经网络(message passing neural network, MPNN),统一了各种图神经网络和图卷积网络方法。

    MPNN是监督学习的框架,它抽象了几个最流行的用于处理图结构数据的模型的相似性。模型包括两个阶段,信息传递阶段和读出阶段。

    • 信息传递阶段:
      就是传播阶段,会运行T次。是以信息传递函数和端点更新函数为定义的。
    • 读出阶段:
      读出阶段会使用读出函数来对整个图计算特征向量。

    NLNN
    X. Wang等人(X. Wang et. al. 2017)提出了非局部神经网络(non-local neural network, NLNN),它结合了几种“self-attention”风格的方法。

    NLNN是用来对深度神经网络的长范围的独立性。non-local操作来源于经典non-local mean操作在计算机视觉上的应用。non-local操作会在一个位置上计算响应,同时加权了的特征和在所有点上。这些位置可以是空间、时间或者空间时间。因此NLNN可以看做是不同的自注意方法的统一。

    一般的,non-local操作被如下定义:
    h i ′ = 1 C ( h ) ∑ ∀ j f ( h i , h j ) g ( h j ) \mathbf{h}_i&#x27; = \frac{1}{ \mathcal{C}(\mathbf{h})} \sum_{\forall_j}f(\mathbf{h}_i,\mathbf{h}_j)g(\mathbf{h}_j) hi=C(h)1jf(hi,hj)g(hj)

    其中,i是输出位置的索引,j是指出所有可能位置的索引,f函数计算i和j之间的缩放值,这可以代表他们之间的联系,g函数代表了输入的变换以及公式的系数用于正则化结果。当使用不同的f和g函数时,将得到不同的non-local操作实例,最简单的g函数就是线性变换了。以下是一些可能选择的f函数:

    • Gaussian;
    • Embedded Gaussian;
    • Dot product;
    • Concatenation;

    P. W. Battaglia等人(P. W. Battaglia et. al. 2018)提出了图网络(graph network, GN),它统一了统一了MPNN和NLNN方法以及许多其他变体,如交互网络(Interaction Networks),神经物理引擎(Neural Physics Engine),CommNet,structure2vec,GGNN,关系网络(Relation Network),Deep Sets和Point Net。

    GN
    首先是图的定义然后是GN块,核心GN计算单元,计算步骤,最后是GN的基本设计原则。

    • Graph definition:
      图被定义为三元组,(全局属性,节点集合,边集合);
    • GN block:
      GN块包括三个更新函数和三个聚合函数;
    • Computation steps;
    • Design Principles:
    GN的设计基于三个基本原则:
    flexible representation
    configurable within-block structure
    composable multi-block architectures

    三、GNN的应用场景

    GNN的应用场景非常多,因为GNN是应用于图信息的,而多种多样的数据都可以划分为图数据。以下是GNN的应用场景:
    社交网络;
    知识图谱;
    推荐系统;
    文字分类;
    神经网络翻译;
    关系提取;
    图分类;

    GNN 在对图形中节点间的依赖关系进行建模方面能力强大,使得图分析相关的研究领域取得了突破性进展。
    在这里我们对GNN的应用进行简单的介绍,首先我们将其划分为三种场景的应用:

    • 结构化场景:数据有明显的联系结构;
    • 非结构化场景:联系结构不明显,例如图像、文字等;
      GNN在非结构场景中的应用,但我们没有找到从原始数据中生成图的最佳方法。在图像域中,一些研究可以利用CNN获取特征图,然后对其进行上采样,形成超像素作为节点,还有的直接利用一些对象检测算法来获取对象节点。在文本域中,有些研究使用句法树作为句法图,还有的研究采用全连接图。因此,关键是找到图生成的最佳方法,使GNN在更广泛的领域发挥更大的作用。
    • 其他的应用场景:生成模型、组合最优化问题等;

    启发

    • GNN是对图数据进行处理的深度学习神经网络,它可以实现对异构数据的学习与表示,这里的图数据与我们通常所说的图是不一样的,这里的图指的是数据结构中的那种图以及离散数学中图论,其中不同的节点表示不同的信息。因此,图即代表实体及实体之间的联系。

    在我们的日常生活中,图是无处不在的。而图结构数据具有一定的复杂性,因为图结构的数据节点通常具有是具有不同的类型的,因此对普通的神经网络而言处理起来具有一定的难度。

    鸣谢:
    如何理解 Graph Convolutional Network(GCN):https://www.zhihu.com/question/54504471/answer/332657604
    https://blog.csdn.net/qq_34911465/article/details/88524599

    展开全文
  • 算法领域10经典算法

    万次阅读 2017-12-26 21:41:07
    1、本文囊括了算法领域中的全部20个重要算法,并从中甄选出了此十大算法。 2、此十大算法的评选是以我个人之见而选,其它虽未囊括于10之内,但都在本文中有所提到。 ------------------------------------------...
  • Project"网络图"介绍(转)

    万次阅读 2015-01-28 19:44:30
    与“甘特图”的区别是没有树状的任务分解结构,但是网络图对于明确任务之间的相关性有比较的优越性。而且可以通过节点表示很丰富的任务相关信息,而甘特图中必须是任务列表和条形图结合以后才能完整的表达任务详细...
  • 嵌入算法到神经网络

    千次阅读 多人点赞 2019-08-13 15:12:25
    近几年来,伴随着计算机算力的急剧提升,神经网络从历史的尘埃中走出,横扫各大领域,完成一次次颠覆性的创新。依托高度弹性的参数结构,线性与非线性的矩阵变换,神经网络能适用于各式各样的数学场景,在各个类别的...
  • 目前,计算机视觉是深度学习领域最热门的研究领域之一。计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形、算法、理论、系统、体系结构),数学(信息检索、机器学习),工程学(机器人、语音、自然...
  • 一、什么是神经网络? 在过去的几年中,神经网络的成功推动了模式识别和数据挖掘的研究。许多机器学习任务,如目标检测、机器翻译和语音识别,曾经严重依赖手工的特征工程来提取信息特征集,最近被各种端到端的...
  • 一张看懂产品经理五大必备技能

    万次阅读 多人点赞 2018-09-18 13:46:19
    产品经理需要具备的技能,我认为可以总结出以下个方面: 1、需求 在需求之下又细分为3个技能,分别是需求分析、竞品分析、需求分级。 1.1需求分析 所谓需求分析要求产品经理首先要了解所在的行业和市场的...
  • 近日,Shiyu Mou 在 Medium 上发表了一篇文章,对种用于图像分类的方法(KNN、SVM、BP 神经网络、CNN 和迁移学习)进行了实验比较,该研究的相关数据集和代码也已经被发布在了 GitHub 上。项目地址:...
  • 目前,计算机视觉是深度学习领域最热门的研究领域之一。计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形、算法、理论、系统、体系结构),数学(信息检索、机器学习)...
  • 神经网络综述

    千次阅读 2019-11-07 17:09:00
    文章目录 1 简介 1.1 GNN简史 1.2 GNN的相关研究 1.3 GNN vs 网络嵌入 ... 4 卷积网络 4.1 基于图谱的GCN 4.1.1 信号处理 4.1.2 基于谱的GCN方法 4.1.3 总结 4.2 基于空间...
  • 回顾2019年,网络新技术新应用继续在网络安全领域大施拳脚,其中人工智能、区块链、量子信息技术对网络安全的两面性影响随着技术的发展呈现出新的特点;第代移动通信技术(5G)、物联网、边缘计算与雾计算等技术...
  • 基于卷积神经网络的图像语义分割

    万次阅读 2018-02-14 20:37:03
    论文地址基于卷积神经网络的图像语义分割浙江大学硕士论文图像分割:就是把感兴趣的内容从图像上分割出来,但是一般会对这个目标加上一定的语义信息,即语义标签,把加上语义的图像分割称为图像语义分割。...
  • 【GNN】注意力网络GAT(含代码讲解)

    万次阅读 多人点赞 2020-03-06 17:57:02
    毫无疑问,神经网络(Graph Neural Networks)是泛计算机视觉领域内继CNN、GAN、NAS等之后的又一个研究热点,非常powerful。GAT是空域GNN的代表模型,Bengio大佬团队出品,发表在ICLR2018,目前谷歌引用已经1k了。它...
  • 低照度图像增强之卷积神经网络RetinexNet

    万次阅读 多人点赞 2019-03-07 11:14:57
    目录 一丶Retinex理论——图像分解 二丶RetinexNet卷积神经网络 1.训练数据说明 ...2.分解网络——Decom ... 低照度图像增强一直是计算机视觉领域的一个热门研究方向,之前传统的基于Retinex理论的研究方法已经...
  • FCN网络是深度学习图像分割领域的奠基之作,有着极的意义.今天就来简单介绍一下FCN全卷积网络. 这篇论文的标题为&quot;Fully Convolutional Networks for Semantic Segmentation&quot;,也就是全卷积...
  • GCN卷积神经网络综述

    千次阅读 多人点赞 2020-05-13 00:01:58
    文章目录一、GNN简史二、GCN的常用方法及分类2.1 基于频域的方法2.2 基于空间域的方法2.3频域是一种特殊的空间域方法三、 GCN常用的基准数据集四、GCN的主要应用、GCN的开源库六、对于GCN的未来发展方向 ...
  • 这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了Web渗透的第一步工作,涉及网站信息、域名信息、端口信息、敏感信息及指纹...
  • 网络安全领域内的资格认证相关

    万次阅读 2016-08-17 16:45:37
    随着全球性信息化的深入发展,信息网络技术已广泛应用到企业商务系统、金融业务系统、政府部门信息系统等,由于Internet具有开放性、国际性和自由性等特点,因此...天赋异禀、无师自通、能力出众的牛请绕过。 现在来
  • 延伸:Poster论文:基于模型神经网络的情景识别 来源: 【封面推荐】收藏慢慢看!“腾讯优图”这12篇论文,入选计算机视觉顶级会议ICCV 2017 (Situation Recognition with Graph Neural Networks) ...
  • 计算机视觉五大技术

    万次阅读 2019-07-07 16:36:56
    计算机视觉五大技术文章来源:企鹅号 - AI火箭营 计算机视觉五大技术 - 云+社区 - 腾讯云 当前计算机视觉是深度学习领域最热门的研究领域之一。计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形、算法...
  • 对于普通人来说,将自己的学位论文公布到...在深度学习领域神经网络早已成为热门话题。去年年底,有人统计了 2019 年到 2020 年各顶会提交论文关键词的数据。结果显示,「graph neural network”」的增长速度位
  • 图像领域深度学习的七个境界

    千次阅读 多人点赞 2018-09-16 11:26:46
    比如把你的爱猫输入到一个普通的CNN网络里, 看看它是喵咪还是狗狗。   一个最普通的CNN, 比如像这样几层的CNN鼻祖Lenet, 如果你有不错的数据集(比如kaggle猫狗大战)都可以给出一个还差强人意的分类结...
  • 章 卷积神经网络

    千次阅读 多人点赞 2020-01-13 07:49:37
    章 卷积神经网络章 卷积神经网络卷积一维卷积二维卷积互相关卷积的变种卷积的数学性质交换性导数卷积神经网络用卷积来代替全连接卷积层汇聚层(池化层)典型的卷积网络结构参数学习误差项的计算几种典型的卷积...
  • 文章目录Abstract and IntroductionRelated WorkProblems, Research directions, ChallengesProblems formulation and Graph constructionDeep Learning techniques perspective ...关键词:神经网络(GNNs),
  • 4.循环神经网络(GRN) 5.卷积神经网络 A.基于频谱的ConvGNNs B.基于空间的CGNN C.池化模型 D.理论方面的讨论 6.自动编码器 A.网络嵌入 B.生成 7.时空神经网络 8.应用 A.数据集 B.基准和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,641
精华内容 53,456
关键字:

五大领域网络图