赞
踩
你好。 我在过去的文章中提到我正在为企业数据集进行认知计算。 就是这样。
本文将需要深入学习的一些理解,但您应该能够遵循对数据科学的最小理解。
我一直致力于在GPU上深入学习的图形中检测模式。 Thomas Kipf 编写了一个用 Keras对图形节点进行分类的好库 。 本文基于他的作品“ 图形卷积网络的半监督分类 ”。 我们来看一下。
首先,图表是什么?
那么,我关心我工作中的知识图。 这些图表代表像“白宫”和“唐纳德特朗普”这样的实体作为节点,像“作品”这样的关系是边缘。 我们如何构建这些图表是另一回事。 在本文中,我正在研究交易数据以训练分类器来识别欺诈交易。 如果你更喜欢顶点和圆弧而不是节点和边缘,那么阅读这篇文章 。
我在这个奇怪的图表世界中感到宾至如归。 我在图表上的工作可以追溯到我的硕士论文。 在那项工作中,我有兴趣在有向无环图内找到共同元素(凸子图)。 我正在确定基于它运行的软件添加到处理器的定制指令。 我用整数线性规划来解决这个问题。 在大图上,求解器可能需要数小时甚至数天。
这一系列研究的链接:
以下是OrientDB中知识图本体的一个例子:
其次,我们可以发现什么样的模式?
我们想要标记节点。 图中的每个实体都有一些我们想要分类的特征,而我们只有一些节点的标签。 我们可以预测出简单的布尔标签,比如“人物”或“不是人物”,还有更有趣的标签,比如节点分类到几个类别之一。 然后我们可以做更复杂的回归,比如根据图表中的实体数据预测实体所带来的风险。 这包括节点到其他节点的连接。 让我们坚持本文中的布尔节点标签/分类问题,以保持简单。 我们希望通过大约4,000个银行帐户标记594,643笔交易,要么是可疑的,要么是不可疑。 我们希望在不到一分钟的时间内完成 。 不是几小时或几天。
第三,我们如何定义kegra理解的图形?
我们需要指定两个文件。 第一个节点具有节点描述,第二个节点说明节点如何连接。 在kegra提供的cora示例中,有2,708个节点的描述和标签,其中有5,429个边(节点对),用于定义节点彼此的连接。
以下是每个文件几行的视图:
让我们试试看
首先,你需要Keras 2,所以这样做:
点安装keras - 升级
假设你安装了Keras和TensorFlow,keras-gcn依赖于gcn,所以让我们克隆并逐个安装它们。
#install gcn git clone https://github.com/tkipf/gcn.git cd gcn / python setup.py安装 cd ..
#install keras-gcn git clone https://github.com/tkipf/keras-gcn.git cd keras-gcn / python setup.py安装
首先,让我们使用kegra称为cora的现成示例运行代码。 我们在输出中看到cora从原始数据中检测并打印了预期的节点数和边数。
我们现在对kegra理解输入文件的方式做一些小改动,只是为了让这些名字更好。 在github的当前版本中,输入文件是描述节点之间的弧的“* .cites”,描述节点的“* .content”。 相反,我改变了kegra以读取“* .link”和“* .node”文件。 你的数据文件夹现在应该是这样的:
〜/ kegra / keras-gcn / kegra $ ls -l data / cora / 总计7720 -rwxrwxr-x 1 ubuntu ubuntu 69928 Dec 3 02:52 cora.link(was cora.cites) -rwxrwxr-x 1 ubuntu ubuntu 7823427 Dec 3 02:52 cora.node(was cora.content) -rwxrwxr-x 1 ubuntu ubuntu 1560 Dec 3 02:52自述文件 〜/ kegra / keras-gcn / kegra $ ls -l data / customerTx / 总计7720 -rwxrwxr-x 1 ubuntu ubuntu 7823427 Dec 3 05:20 customerTx.node -rwxrwxr-x 1 ubuntu ubuntu 1560 Dec 3 05:20自述文件 -rwxrwxr-x 1 ubuntu ubuntu 69928 Dec 3 05:20 customerTx.link
现在让我们用交易数据填写customerTx.node和customerTx.link 。 第一个文件是银行客户及其功能的列表。 格式是:
我们现在可以使用kegra来分析各种分析精度的图表。
如果系统是由完美的分析师对数据进行培训的,那么应该完全学会如何分析图表。 但是,如果人类分析师在20%的时间内出错,那么kegra模型的预测能力应该同样被限制在80%。 为了试验这个,我给图形标签添加了不同数量的随机噪声,看看kegra会如何做,因为训练数据的质量越来越差。
以表格和图表形式显示的结果如下:
这里有很多东西需要消化。 首先,我们看到,随着数据(蓝色)中的噪声增加,早期停止(x轴上的标签)会在训练中更早和更早地进行踢球。 这告诉我们,特征数量太少(少数列)导致训练数据过度拟合。 其次,我们看到测试精度通常低于训练精度。 这是预期的,因为训练数据对于分类器而言是熟悉的,而测试数据则不是。 第三,测试精度不为零。 好! 这意味着分类器可以仅使用图形和每个节点的特征(txCount,amountMean和fraudMean)重新生成OK / FRAUD标签。 第四,随着注入的噪声(蓝色)上升,分类器(橙色)的准确度下降。 这意味着结果不是随机的。 第五,我们看到,训练准确度(红色)加上附加噪声(蓝色)增加了大约100%,这意味着分类器与标注数据集的分析师一样好/坏,但不会更糟。
总之,kegra在知识图谱分类上表现得非常好。 与他们的论文中的结果相比,这些结果可能太好了。 我将检查交易文件中的欺诈标签列是否太具有说明性,并将其替换为难以用来从诸如原籍国,城市,邮政编码等更广泛的数据集中预测的功能。
我的下一个动作是从源文件中重新生成具有更多列的交易数据集,并查看kegra是否仍然表现如此出色。 在cora数据集上没有提前停止,所以我怀疑交易数据对kegra来说并不具有挑战性,这是我之前提到的原因之一。 也许如果我将更多语义特征嵌入到生成的图中......我可以做很多有趣的事情作为下一步。
特别感谢Thomas Kipf在出版前观察这篇文章。 与我平常的高级文章相比,这是一篇非常复杂的文章,可以准备(和阅读)。 如果你喜欢这篇关于图表的深度学习文章,那么请让我知道写出更多这样的研究内容。 我也很高兴在评论中听到您的意见。 你怎么看?
https://towardsdatascience.com/kegra-deep-learning-on-knowledge-graphs-with-keras-98e340488b93
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。