Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
think-comp-2e-zh
提交
55b678be
T
think-comp-2e-zh
项目概览
OpenDocCN
/
think-comp-2e-zh
9 个月 前同步成功
通知
0
Star
16
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
think-comp-2e-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
55b678be
编写于
11月 03, 2017
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
4.2~3
上级
c8f9978b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
115 addition
and
0 deletion
+115
-0
4.md
4.md
+115
-0
img/4-1.png
img/4-1.png
+0
-0
未找到文件。
4.md
浏览文件 @
55b678be
...
...
@@ -102,3 +102,118 @@ L = estimate_path_lengths(fb)
平均路径为
`3.7`
,在 4000 多个用户的网络中相当短。毕竟这是一个小世界。
现在让我们看看是否可以构建一个 WS 图,与此网络具有相同特征。
## 4.2 WS 模型
在 Facebook 数据集中,每个节点的平均边数约为 22。由于每条边都连接到两个节点,平均度是每个节点边数的两倍:
```
py
>>>
k
=
int
(
round
(
2
*
m
/
n
))
>>>
k
44
```
我们可以用
`n=4039`
和
`k=44`
创建一个 WS 图。
`p=0`
时,我们会得到一个环格。
```
py
lattice
=
nx
.
watts_strogatz_graph
(
n
,
k
,
0
)
```
在这个图中,群聚较高:
`C`
是 0.73,而在数据集中是 0.61。但是
`L`
为 46,远远高于数据集!
使用
`p=1`
我们得到一个随机图:
```
py
random_graph
=
nx
.
watts_strogatz_graph
(
n
,
k
,
1
)
```
在随机图中,
`L`
是 2.6,甚至比数据集(3.7)短,但
`C`
只有 0.011,所以这是不好的。
通过反复试验,我们发现,当
`p=0.05`
时,我们得到一个高群聚和短路径长度的 WS 图:
```
py
ws
=
nx
.
watts_strogatz_graph
(
n
,
k
,
0.05
,
seed
=
15
)
```
在这个图中
`C`
是
`0.63`
,比数据集高一点,
`L`
是 3.2,比数据集低一点。所以这个图很好地模拟了数据集的小世界特征。
到现在为止还不错。
## 4.3 度
![](
img/4-1.png
)
> 图 4.1:Facebook 数据集和 WS 模型中的度的 PMF。
回想一下,节点的度是它连接到的邻居的数量。如果 WS 图是 Facebook 网络的一个很好的模型,它应该具有相同的总(或平均)度,理想情况下不同节点的度数相同。
这个函数返回图中的度的列表,每个节点对应一项:
```
py
def
degrees
(
G
):
return
[
G
.
degree
(
u
)
for
u
in
G
]
```
数据集的平均度是 43.7;WS 模型的平均度是 44.到目前为止还不错。
但是,WS 模型的度的标准差为 1.5;数据的标准差是 52.4。有点糟。
这里发生了什么?为了更好地查看,我们必须看看度的 分布,而不仅仅是均值和标准差。
我将用一个 Pmf 对象来表示度数的分布,它在
`thinkstats2`
模块中定义。Pmf 代表“概率质量函数”;如果你不熟悉这个概念,你可以阅读 Think Stats 第二版的第三章,网址是
<http://greenteapress.com/thinkstats2/html/thinkstats2004.html>
。
简而言之,Pmf 是值到概率的映射。Pmf度是每个可能的度
`d`
,到度为
`d`
的节点比例的映射。
作为一个例子,我将构建一个图,拥有节点
`1, 2, 3`
,连接到中心节点
`0`
:
```
py
G
=
nx
.
Graph
()
G
.
add_edge
(
1
,
0
)
G
.
add_edge
(
2
,
0
)
G
.
add_edge
(
3
,
0
)
nx
.
draw
(
G
)
```
这里是图的度列表:
```
py
>>>
degrees
(
G
)
[
3
,
1
,
1
,
1
]
```
节点
`0`
度为 3,其它度为 1。现在我可以生成一个 Pmf,它表示这个度的分布:
```
py
>>>
from
thinkstats2
import
Pmf
>>>
Pmf
(
degrees
(
G
))
Pmf
({
1
:
0.75
,
3
:
0.25
})
```
产生的
`Pmf`
是一个对象,将每个度映射到一个比例或概率。在这个例子中,75%的节点度为 1,25%度为 3。
现在我们生成一个
`Pmf`
,包含来自数据集的节点的度,并计算均值和标准差:
```
py
>>>
pmf_ws
=
Pmf
(
degrees
(
ws
))
>>>
pmf_ws
.
mean
(),
pmf_ws
.
std
()
(
44.000
,
1.465
)
```
我们可以使用
`thinkplot`
模块来绘制结果:
```
py
thinkplot
.
Pdf
(
pmf_fb
,
label
=
'Facebook'
)
thinkplot
.
Pdf
(
pmf_ws
,
label
=
'WS graph'
)
```
图(?)显示了这两个分布。他们是非常不同的。
在 WS 模型中,大多数用户有大约 44 个朋友;最小值是 38,最大值是 50。这个变化不大。在数据集中,有很多用户只有 1 或 2 个朋友,但有一个人有 1000 多个!
像这样的分布,有许多小的值和一些非常大的值,被称为重尾。
img/4-1.png
0 → 100644
浏览文件 @
55b678be
6.5 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录