我正在开发一个使用神经网络的应用程序。目前,我正在考虑尝试将其放入基于 SQL(可能是 SQL 服务器)的关系数据库或图形数据库中。
从性能的角度来看,神经网络将非常大。
我的问题:
- 与图形数据库相比,关系数据库在处理神经网络时是否会受到性能影响?
- 哪种图形数据库技术最适合处理大型神经网络?
- 可以使用 PostGIS 等地理空间数据库有效地表示神经网络吗?
我正在开发一个使用神经网络的应用程序。目前,我正在考虑尝试将其放入基于 SQL(可能是 SQL 服务器)的关系数据库或图形数据库中。
从性能的角度来看,神经网络将非常大。
我的问题:
这取决于模型进展的意图。
免责声明
首先,我需要声明我只熟悉 Kohonnen 地图。(所以,我承认 Kohonnen 被嘲笑为只是任何几乎没有神经网络的入门级。)上述问题是多年来我在随机和低学历阅读后幻想的个人心理攻击的结果各种神经方案。
类别 vs 参数 vs 属性
我们可以按轮数或吨位对车辆进行分类吗?车轮数量或吨位应该是属性、参数还是类别特征。
理解这场辩论是构建存储库的关键步骤。这场辩论与疾病和患者媒介特别相关。我见过由医学专家设计的患者信息关系图式,但显然没有经过太多信息科学培训,它为每个患者假定了一组通用参数。每个患者记录都有数千列,大部分未使用。当它们超出表的列限制时,它们会创建一个新表,其中包含数千个稀疏使用的列。
类型 1:所有节点都有一组共同的参数,因此可以将节点建模为具有已知列数的表。
类型 2:有各种类别的节点。有固定数量的节点类别。每个类都有一组固定的参数。因此,每一类节点都有一个特征表。
类型 3:无意对节点进行分类。每个节点都可以自由开发和获取自己独特的属性集。
类型 4:有固定数量的节点类。类中的每个节点都可以自由地开发和获取自己独特的属性集。每个类都有一组受限制的属性,允许节点获取。
阅读EAV模型以了解参数与属性的问题。在 EAV 表中,一个节点只需要三个特征列:
但是,在技术的限制下,属性可以是数字、字符串、可枚举或类别。因此,还有四个属性表,每个值类型一个,加上节点表:
顺序/链接访问与散列/直接地址访问
您是否必须直接访问单个节点而不是遍历结构树才能快速到达节点?
您是否需要找到已获得特定特征(属性集)的节点列表,而不管它们在拓扑上位于网络的哪个位置?您是否需要对网络的节点进行分类(也称为主成分分析)?
状态机
您是否希望将网络区域视为状态机的集合?状态机是非常有用的量化实体。状态机量化可帮助您根据邻域相似性和关系在一系列节点上形成经验实体。
与其试图理解和跟踪数百万个节点的个体行为,不如将它们聚集到相似的区域中。并跟踪这些区域的状态机流。
结论
这是我的建议。您应该首先使用完全关系型数据库。原因是关系数据库和相关的 SQL 提供的信息具有非常自由的关系视图。使用关系模型上的 SQL,您可以查询或关联您不知道存在的关系。
随着您的实验进展,您可能会发现某些关系建模更适合网络图存储库,然后您应该将模式的这些部分移动到这样合适的存储库。
处于最终状态。我会维护一个双模式信息回购。您维护一个关系存储库以跟踪节点及其属性。因此,您将动态变异结构存储在网络图存储库中,但每个节点都引用关系数据库中的节点 ID。关系数据库允许您根据属性及其值查询节点。例如,
SELECT id FROM Nodes a, NumericAttributes b
WHERE a.attributeName = $name
AND b.value WItHIN $range
AND a.id = b.id
我在想,也许可以使用 hadoop 代替传统的网络图数据库。但是,我不知道 hadoop 如何适应动态变化的关系。我的理解是,hadoop 适合一次写入多次读取。然而,动态神经网络在频繁的关系变化中可能表现不佳。然而,对网络关系建模的关系表效率不高。
尽管如此,我相信我只是暴露了您需要考虑的问题,而不是为您提供明确的答案,尤其是对许多概念的生疏知识。
可以使用自引用外键将树存储在表中。我假设唯一需要存储的两件事是拓扑和权重;这两个都可以存储在扁平的树结构中。当然,这可能需要大量递归选择,这取决于您的 RDBMS 可能很难在本地实现(因此需要许多 SQL 查询来实现)。我无法评论比较,但希望这有助于关系的观点:)