task01图结构数据

图的表示

在这里插入图片描述
一个图被记为 G={V,E},其中 是数量为V={v1,v2,…vN}是数量为N的结点的集合,E= {e1,e2,…eM} 是数量M为 的边的集合。

图用节点表示实体,用边表示实体间的关系

节点和边的信息可以是类别型的,类别型的数据的取值只能是哪一类别。一般类别型的信息为标签。

节点和边的信息可以是数值型的。

大部分情况中,节点含有信息,边可能含有信息。

上图的邻接矩阵为:
在这里插入图片描述
Ai,j = 1 表示存在从结点vi 到 vj 的边,反之表示不存在结点vi 从结点 vj 到 的边。

图的属性

1:节点的度(degree)
2:邻接节点(neighbors)
3:路径(path)
4:行走(walk)
5:子图(subgraph)
6:连接分量(connected component)
7:连通图(connected graph)
8:最短路径(shortest path)
9:直径(diameter)
10:拉普拉斯矩阵(Laplacian Matrix)
11:对称归一化的拉普拉斯矩阵(symmetric normalized Laplacial)

图的种类

同质图:只有一种类型的节点和一种类型的边的图
异质图:存在多种类型的节点和多种类型的边的图
在这里插入图片描述

二部图:节点分为两类,只有不同类的节点之间存在边
在这里插入图片描述

图结构数据上的机器学习

在这里插入图片描述
1:节点预测:预测节点的类别或某类属性的取值
例子:对是否是潜在客户分类,对游戏玩家的消费能力做预测
2:边预测:预测两个节点间是否存在链接
例子:好友推荐,商品推荐
3:图的预测:对不同的图进行分类或预测图的属性
例子:分子属性预测
4:节点聚类:检测节点是否形成一个社区
例子:社交圈检测
5:其他任务
(1):图生成:例如药物发现
(2):图演变:例如物理模拟
(3):…

应用神经网络于图面临的挑战

过去的深度学习应用中,我们主要接触的数据形式主要有这四种:矩阵,张量,序列和时间序列,他们是规则的结构化数据
图数据是非规则的非结构化的,具有以下的特点:
(1):任意的大小和复杂的拓扑结构;
(2):没有固定的节点排序或参考点;
(3):通常是动态的,并具有多模态的特征
(4):图的信息并非只蕴含在节点信息和边的信息中,图的信息还包括了图的拓扑结构
在这里插入图片描述

Data类——PyG中图的表示及其使用

#Data类的构造函数
class Data(object):
    def __init__(self, x=None, edge_index=None,edge_attr=None, y=None, **kwargs):
	# x (Tensor, optional): 节点属性矩阵,大小为[num_nodes, num_node_features]`
	# edge_index (LongTensor, optional): 边索引矩阵,大小为`[2, num_edges]`,第0行为尾节点,第1行为头节点,头指向尾
	# edge_attr (Tensor, optional): 边属性矩阵,大小为[num_edges, num_edge_features]`
	# y (Tensor, optional): 节点或图的标签,任意大小(其实也可以是边的标签)
        self.x = x
        self.edge_index = edge_index
        self.edge_attr = edge_attr
        self.y = y
        for key, item in kwargs.items():
            if key == 'num_nodes':
                self.__num_nodes__ = item
            else:
                self[key] = item
    #from_dict 是一个类方法:转dict对象为Data对象
    @classmethod
    def from_dict(cls, dictionary):
        data = cls()
        for key, item in dictionary.items():
            data[key] = item
        return data
    #将Data对象转换为 dict对象
    def to_dict(self):
        return {key:item for key, item in self}
    #转换为namedtuple
    def to_namedtuple(self):
        keys = self.keys
        DataTuple = collections.namedtuple('DataTuple',keys)
        return DataTuple(*[self[key] for key in keys])
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值