罗兰谈MATLAB的艺术

将想法转化为MATLAB

请注意

罗兰谈MATLAB的艺术已存档,不会更新。

我们能预测分手吗?用MATLAB进行社会网络分析

R2015b释放这里有一个令人兴奋的新功能,可以让我们创建、探索和分析图形和网络。今天的客座博主Toshi Takeuchi将向你展示如何使用这个新功能开始社交网络分析。

内容

社会网络分析和机器学习

说到数据科学,你会想到机器学习和数据挖掘,但你应该考虑添加社会网络分析作为数据科学工具箱的一部分。社交网络分析通过使用图表和网络映射和测量关系,提供了从数据集中捕获特征的新方法,它是对传统机器学习技术的补充集群分析、

让我们用一个例子来说明它是如何工作的。本文解释了脸书怎么知道你什么时候离婚(甚至在你离婚之前).不幸的是,我们无法访问Facebook拥有的数据集,但我们可以使用一个公开的数据集来进行类似的分析。

Zachary的空手道俱乐部数据集

扎卡里空手道俱乐部数据集包含20世纪70年代美国一所大学空手道俱乐部的34名成员之间的友谊社交网络。我们不知道细节,但是这个俱乐部爆发了一场争论,最终导致它分裂成两个团体.我们能否通过观察它的社交关系结构(类似于Facebook)来准确预测俱乐部将如何分裂?

让我们加载数据集

您可以下载数据集在这里但它是一种不熟悉的非表格文本格式。我创建了一个脚本loaddata.m来解析这个文本文件,但是你可以加载MAT-file代替。

websave karate2.mathttps://blogs.mathworks.com/images/loren/2015/karate.mat;负载karate2.mat

创建图形对象

个体成员被表示为节点,连接两个节点的边表示他们的友谊。因此边就是一对节点。边缘将这些对表示为78 x 2矩阵中的行。节点只是一个表示节点的数字数组。友谊是相互的,因此没有方向。我们可以用一个无向图来表示这个社交网络。可以通过提供构成边的节点列表来创建图。

G = graph(edges(:,1), edges(:,2));%从边创建图形G.Nodes =表(name);%命名节点数字%可视化图形情节(G);标题(“扎卡里的空手道俱乐部”

谁是联系最紧密的人?

该图显示了一个典型的“轮辐”结构,其中有几个轮辐,这些轮辐是具有大量连接的节点。如果你有很多朋友,你就很受欢迎,所以这代表着受欢迎程度。量化受欢迎程度的一种方法是一个叫做度的指标,即连接到每个节点的边的数量。我们来求这个社交网络的度分布。

D =度(G);%获得每个节点的度mu = mean(D);平均学位百分比图直方图(D);%柱状图持有直线([mu, mu],[0,10],“颜色”,“r”%平均度线标题(“空手道俱乐部学位分配”)包含(度(连接数));ylabel (# of nodes);Text (mu + 0.1, 10, sprintf(的平均百分比。2 f度”, mu))文本(14.5,1.5,节点1的(1, 2, 2,“33节点”(2)“34节点”

你可以看到有两个人(节点1和34)的学位数远远高于平均水平。节点33有很多朋友,但没有这两个多。让我们给这两个人的边缘(连接)涂上颜色。

N1 =邻居(G, 1);得到1的朋友N1 = [N1;1);% add 1N34 =邻居(G, 34);得到34的朋友N34 = [N34;34);% add 34C1 = [1,0,1];% 1的组色C2 = [0,1,0.5];% 34的组色图P =图(G);绘制图形突出(P, N1,“NodeColor”c1,“EdgeColor”、c1);突出1的朋友突出(P N34“NodeColor”c2,“EdgeColor”c2);突出34的朋友标题(“节点之友1和34”

分手的

通过着色这两个的联系,你可以看到俱乐部已经有了两个基于社会关系的子群体。让我们根据上面链接的教科书中的信息,将之前的可视化与实际分手的可视化进行比较。

G1nodes = [1,2,3,4,5,6,7,8,9,...%节点1的组11, 12, 13, 14, 17, 18, 20, 22];图P =图(G);绘制图形突出(P G1nodes“NodeColor”c1,“EdgeColor”、c1);%高亮组标题(“俱乐部分成了两组”

预测分手

现在我们已经熟悉了这个数据集,让我们看看是否有一种方法来检测这个数据集中的两个组。这是这个网络的邻接矩阵。每一行和每一列都是节点id,如果两个节点有关系,则交集为1,否则为0。对角线元素表示自参照连接,因此在这个社交网络中它们为0。

A =邻接(G);创建邻接矩阵A =满(A);将稀疏矩阵转换为全矩阵图显示亮度图像(一)绘制矩阵的%广场标题(的邻接矩阵

层次聚类方法

在机器学习中,这可以作为集群问题来处理。让我们尝试使用共享连接的数量作为距离度量的分层聚类-共享的连接越多,距离越近。由于我们有二进制数据,我们将使用Jaccard距离。

* * * * * * * * * * *“jaccard”);%使用Jaccard距离得分连接Z =联动(区域);%创建树图系统树图(Z)% plot树状图标题(“系统树图的阴谋”)包含(“节点Id”);ylabel (“距离”

这看起来不对,因为它完全忽略了网络中连接的结构。这是一个很好的例子,仅靠传统的机器学习方法无法解决问题。

图划分方法

我们可以用图论中的什么来划分图?一种方法,由帕特Quillen,使用代数的连接来根据创建两个子集所需的最小切割次数对节点进行加权,而field Vector用于此目的。在典型的使用中,我们希望将节点划分为大小相等的两组。我们用中值来划分节点。值低于中值的节点与值较高的节点连接较差。

现在让我们使用Fielder Vector来标识图形分区,并将结果与实际分割进行比较。

L =拉普拉斯(G);%得到G的拉普拉斯矩阵[V, ~] = eig(完整的(L),“向量”);%从L中得到特征向量w = V(:,2);%的费德勒向量P1nodes = find(w < median(w));%选择低于中值的节点errors = setdiff(G1nodes, P1nodes)和实际的分割有区别吗?
errors =空矩阵:1乘0

你可以看到菲尔德向量很好地识别了这个图的划分。如果你按field Vector对邻接矩阵进行排序,你也可以看到这种分割。

[~, order] =排序(w);按值对权重排序sortedA = A(order, order);%对A应用排序顺序图imagesc(sortedA)“排序邻接矩阵”

总结——这与Facebook的例子有什么不同?

在这种情况下,菲尔德向量就是我们划分图所需要的。但在更复杂的情况下,您可以使用它作为聚类分析的距离度量,取代上面示例中的Jaccard距离。社交网络分析和机器学习应该是数据科学工具箱中的互补工具。

这如何应用到Facebook预测情侣分手的情况中呢?把节点1和节点34看作一对,图是它们的Facebook好友。它看起来与上面引用的文章中的图表惊人地相似,除了它有两个以上的集群。如果你仔细想想,你有老同学、同事、家庭成员和其他社会活动,他们通常形成不同的群体。

有趣的是,这篇文章说,情侣共同拥有的朋友的总数并不是恋爱关系的一个很好的指标。如果他们共同的朋友关系不那么好,那就更好了。显然,恋爱关系和空手道俱乐部并不具有相同的社交动态。

尝试R2015b版本,并检查这个新的图形功能,并让我们知道你的想法在这里




发布与MATLAB®R2015b


  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。

Baidu
map