Skip to content

Commit e740aca

Browse files
committed
updated
1 parent dac890a commit e740aca

File tree

60 files changed

+3833
-1851
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+3833
-1851
lines changed

content/Basic_CS/OS/文件与文件系统/文件系统.md

Lines changed: 170 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
---
2+
title: "图采样"
3+
layout: page
4+
date: 2099-06-02 00:00
5+
---
6+
[TOC]
7+
8+
# 1. 图采样
9+
10+
图采样是子图采样,不是随机采样
11+
12+
通过对现有 GNN 模型的调研,我们抽象出三种不同的采样器,即遍历、邻域、负采样。
13+
1. 遍历(TRAVERSE):用于从整个分区图中,采样一批顶点或边。
14+
2. 邻域(NEIGHBORHOOD):将生成顶点的上下文。该顶点的上下文可以是一个或多个 hop 邻居,用于对该顶点进行编码。
15+
3. 负采样(NEGATIV):用于生成负样本以加速训练过程的收敛。
16+
17+
## 1.1. 遍历
18+
19+
## 1.2. 邻域
20+
21+
22+
### 1.2.1. GraphSAGE
23+
SAGE(SAmple& aggreGatE)
24+
参考资料:http://snap.stanford.edu/graphsage/
25+
基本步骤:
26+
1. 邻居采样
27+
1阶采样、2阶采样、...
28+
由顶向外
29+
2. 邻居聚会
30+
由外向内,消息传递
31+
3. 节点预测
32+
33+
#### 1.2.1.1. 特点
34+
**优点**
35+
1. 减少计算量
36+
2. 允许泛化到其他关系
37+
38+
### 1.2.2. PingSAGE
39+
采样时只能选取真实的邻居节点吗
40+
通过多次随机游走,按游走经过的频率选取邻居
41+
42+
43+
## 1.3. 负采样
44+
负采样就是给定源节点,返回和它不相连的目标节点。负采样同时支持本地和全局负采样,对于一个batch的样本要采样其负样本时,可以按照一定的概率分布选择一个server,然后在该server上采样。如果选择本地负采样,则只在本机进行负采样。目前built-in的负采样算子包括以下几种:
45+
• random:随机采样和给定源节点不相连的目的节点。
46+
• in_degree:按照目的节点的入度分布,返回与源节点不相连的目的节点。
47+
48+
按照入度分布的in_degree负采样实现上采用AliasMethod[5],会在首次采样前提前构建好Alias Table,因此采样是常数时间复杂度。此外负采样我们默认是严格负采样,但是出于性能和极端情形的考虑,我们支持用户端设置一个阈值来控制严格程度。负采样可能对算法效果也会产生很大影响,因此负采样算子如何和图划分结合,如何高效负采样,以及按何种分布负采样都是值得探索和研究的地方。
49+
# 2. 邻居聚合
50+
## 2.1. 评估聚合表达能力的
51+
评估聚合表达能力的指标单射(一对一映射)
52+
## 2.2. 常见
53+
54+
### 2.2.1. Mean
55+
### 2.2.2. Max
56+
### 2.2.3. Sum
57+
58+
## 2.3. GIN
59+
基于单射的Graph Isomorphism Net (GIN)模型
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
---
2+
title: "01.图神经网络模型"
3+
layout: page
4+
date: 2019-06-17 00:00
5+
---
6+
[TOC]
7+
8+
# 1. GNN简介
9+
10+
图卷积神经网络(Graph Neural Networks)
11+
12+
图神经网络的概念第一次在[论文](https://persagen.com/files/misc/scarselli2009graph.pdf)中提出,该论文将现存的神经网络模型扩展到处理图领域的数据。在一个图结构中,**每一个节点由它自身的特征以及与其相连的节点特征来定义该节点**
13+
14+
![](https://pic4.zhimg.com/v2-95f73c5719cb222cc86eb1342640655f_r.jpg)
15+
依据**更新方式**分类
16+
17+
1. 图卷积网络(GCN)
18+
2. 基于注意力更新的图网络(GAT)
19+
3. 基于门控的更新的图网络
20+
4. 具有跳边的图网络
21+
22+
23+
论文对GNN模型分类如下:
24+
25+
1. 图卷积网络(Graph convolutional networks)和图注意力网络(graph attention networks),因为涉及到传播步骤(propagation step)。
26+
2. 图的空域网络(spatial-temporal networks),因为该模型通常用在动态图(dynamic graph)上。
27+
3. 图的自编码(auto-encoder),因为该模型通常使用无监督学习(unsupervised)的方式。
28+
4. 图生成网络(generative networks),因为是生成式网络。
29+
30+
31+
32+
## 1.1. GCNs 图卷积网络s
33+
34+
图卷积网络(Graph convolutional networks) GCN的边权重:
35+
1. 与节点的度相关
36+
2. 不可学习
37+
### 1.1.1. 基于谱的GCN
38+
传播(propagation)指的是汇集从邻居节点和连接的边的信息
39+
40+
#### GraphSage
41+
原始的GCN方法每个节点的表示依赖于图中所有的其他节点,计算复杂度过大,且由于依赖于拉普拉斯矩阵训练的网络不惧泛化性。
42+
43+
GraphSAGE对于每个节点的计算不涉及整张图,所以效率更加高,不过为了缓解深度加深感受野指数爆炸的现象,GraphSAGE每次信息计算通过采样只使用部分邻居。
44+
45+
FastGCN对GraphSAGE的随机采样加以改进,针对每个节点连接其他节点个数的不同给定不同的重要性。
46+
47+
[公式]
48+
49+
50+
51+
还有一些限制感受野的其他方法,咱也不懂.
52+
53+
54+
55+
采样函数实现
56+
57+
GraphSage的作者提出了采样算法来使得模型能够以Mini-batch的方式进行训练,算法伪代码见论文附录A。
58+
59+
假设我们要利用中心节点的k阶邻居信息,则在聚合的时候,需要从第k阶邻居传递信息到k-1阶邻居,并依次传递到中心节点。
60+
采样的过程刚好与此相反,在构造第t轮训练的Mini-batch时,我们从中心节点出发,在前序节点集合中采样NtN_tNt​个邻居节点加入采样集合。
61+
接着将邻居节点作为新的中心节点继续进行第t-1轮训练的节点采样,以此类推。
62+
最后将采样到的节点和边一起构造得到子图。
63+
64+
### 1.1.2. 非基于谱的方法
65+
66+
####
67+
68+
69+
## 1.2. GAT 图注意力网络
70+
71+
图注意力网络(Graph Attention Network)
72+
73+
### 1.2.1. Message Passing 消息传递机制
74+
75+
76+
### 1.2.2. Gate 门机制机制
77+
78+
门机制(Gate):目前在信息传播步骤中使用的门机制类似于GRU和LSTM模型,这种机制可以减小原始GNN模型的约束,并提升在图结构中的长期的信息传播
79+
80+
3.GAT 总结
81+
82+
GAT 的时间复杂度为 O(|V|FF'+|E|F'),其中 |V|FF' 是计算所有节点特征向量变换的时间复杂度 (即 Wh),|E|F' 是计算 Attention 的时间复杂度。GAT 不依赖于完整的图结构,只依赖于边,因此可以用于 inductive 任务。GAT 可用于有向图。采用 Attention 机制,可以为不同的邻居节点分配不同的权重。4.参考文献
83+
84+
85+
SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS
86+
87+
88+
89+
90+
相比于传统的网络,GNN的深度一般更浅,原因是GNN的感受野随着深度的增加指数增大在信息传递过程中会引入大量噪声。所以在GNN中也有人尝试加入skip connection来缓解这个问题。下面是一个用Highway的方法的例子:
91+
92+
[公式]
93+
94+
当前的输出还有一部分来自于上层的输出。
95+
96+
97+
为了方便读者更好地理解图神经网络的原理,我们花费了较长篇幅介绍图神经网络的思想和发展。总的来说,它由图信号理论和谱域图卷积发展而来,目前更多聚焦在空间域上的卷积方式,即将邻居节点的特征聚合给中心节点的方式来更新节点特征。
98+
99+
100+
101+
GCN、GraphSAGE和GAT是三种具有代表性的图神经网络。GCN仅适用于转导学习和无向图,即在未来有新节点加入时需要重新训练模型才能进行预测;GraphSAGE和GAT分别通过聚合器和注意力机制的方式将其扩展到归纳式学习,可用于新节点的预测,这对动态的股票市场来说是富有意义的。

content/Data_Science/Algorithm/图学习/03_图深度学习/图神经网络的任务.md renamed to content/Data_Science/Algorithm/04-图学习/03_图深度学习/图神经网络的任务.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ date: 2019-06-17 00:00
55
---
66
[TOC]
77

8-
# 节点分类
9-
# 图分类
8+
# 1. 节点分类
9+
# 2. 图分类
1010
图分类是指在给定一个**图数据集**的情况下,基于一些结构图属性对整个图(相对于节点)进行分类的问题。
1111
在这里,我们要嵌入整个图,并且我们要以这样一种方式嵌入这些图,使得它们在给定任务的情况下是线性可分的。
12+
# 3. 边分类

content/Data_Science/Algorithm/图学习/03_图深度学习/图神经网络.md

Lines changed: 0 additions & 82 deletions
This file was deleted.

content/Data_Science/Library_Platform/03-Gradient_boosting_framework/Xgboost/使用/xgboost_pure.md

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ print(evals_result)
9191
>>>
9292
{'watchlist中的name': {'eval_metric 中的类型': [0.151299, 0.150435, 0.150391, 0.150028, 0.149955, 0.150004, 0.149852, 0.149685, 0.149008, 0.148895], 'auc': [0.719014, 0.72576, 0.73082, 0.733395, 0.738091, 0.74203, 0.745483, 0.747434, 0.750762, 0.754281]}}
9393
```
94-
## 1.5. 模型保存
94+
## 1.5. 模型保存与加载
95+
### 1.5.1. 保存
9596
训练之后,您可以保存模型并将其转储出去。
9697
```python
9798
bst.save_model('0001.model')
@@ -104,13 +105,13 @@ bst.dump_model('dump.raw.txt')
104105
# 转储模型和特征映射
105106
bst.dump_model('dump.raw.txt','featmap.txt')
106107
```
107-
## 1.6. 加载模型
108+
### 1.5.2. 加载模型
108109
当您保存模型后, 您可以使用如下方式在任何时候加载模型文件
109110
```python
110111
bst = xgb.Booster({'nthread':4}) #init model
111112
bst.load_model("model.bin") # load data
112113
```
113-
## 1.7. 预测
114+
## 1.6. 预测
114115
```python
115116
ypred = bst.predict(dtest)
116117

@@ -119,9 +120,30 @@ type(ypred)
119120
numpy.array
120121

121122
```
123+
### 1.6.1. 获取叶子节点
124+
```python
125+
#(叶节点索引)
126+
train_leaf_preds = bst.predict(dtrain, pred_leaf = True)
127+
type(train_leaf_preds)
128+
>>>
129+
numpy.array
130+
train_leaf_preds.shape
131+
>>>
132+
n x m(sample x trees)
133+
134+
会输出每个样本在每个子树的哪个叶子上。它是一个的矩阵。每个子树的叶节点都是从1 开始编号的。
135+
```
136+
137+
## 1.7. 树结构
138+
### 1.7.1. 结构化描述
122139

123-
## 1.8. 绘图
124-
xgb 的 plotting(绘图)模块可以绘制出 importance(重要性)以及输出的 tree(树).
140+
```python
141+
142+
bst_df=bst.trees_to_dataframe()
143+
```
144+
145+
### 1.7.2. 树结构可视化
146+
xgb 的 plotting(绘图)模块可以绘制出importance(重要性)以及输出的 tree(树).
125147
前提:
126148
1. matplotlib
127149
2. graphviz
@@ -141,17 +163,18 @@ xgb.to_graphviz(bst, num_trees=2)
141163
```
142164

143165

144-
## 1.9. GPU 加速
166+
## 1.8. GPU 加速
145167
xgboost的GPU 加速只支持 英伟达 显卡的CUDA 上,且只有在 P100 之后的显卡才效率的有显著提高。对Pascal架构之前的显卡会使得计算变得更慢。
146168

147169
参考 :https://xgboost.readthedocs.io/en/latest/gpu/index.html
148170

149171
**NOTE**
150172
Pascal架构作为 Maxwell 架构的升级版,2016 发布第一款产品 Tesla P100 (GP100)
151173

152-
## 1.10. 特征重要性
153-
评价特征重要性的指标:
174+
## 1.9. 特征重要性
154175

176+
### 1.9.1. 量化指标
177+
评价特征重要性的指标:
155178
1. `weight`
156179
- 在这个树集合模型中,用该特征进行决策树分割的总次数
157180
- the number of times a feature is used to split the data across all trees.
@@ -184,3 +207,15 @@ score_dict=regr.get_booster().get_score(importance_type="gain")
184207
```
185208

186209

210+
211+
### 1.9.2. 可视化
212+
213+
214+
当您使用 IPython时, 你可以使用 to_graphviz 函数, 它可以将 target tree(目标树) 转换成 graphviz 实例. graphviz 实例会自动的在 IPython 上呈现.
215+
216+
```python
217+
import xgboost as xgb
218+
219+
xgb.plot_importance(bst)
220+
221+
```

content/Data_Science/Library_Platform/03-Gradient_boosting_framework/Xgboost/使用/xgboost_sklearn_API.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ xgboost 使用 Scikit-Learn API 需要提前安装sklearn
1515
1. eta –> learning_rate
1616
2. lambda –> reg_lambda
1717
3. alpha –> reg_alpha
18+
4. num_round ->n_estimators

0 commit comments

Comments
 (0)