首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何可视化用户集群?

如何可视化用户集群?
EN

Stack Overflow用户
提问于 2008-09-18 15:41:26
回答 3查看 481关注 0票数 3

我有一个应用程序,用户可以在其中进行交互。我想要可视化这些交互,这样我就可以确定是否存在用户集群(其中交互更频繁)。

我已经为每个用户分配了一个二维点(其中每个坐标都在0和1之间)。我的想法是,当两个用户交互时,他们的点数会更接近,这是一种“吸引力”,而我只是一遍又一遍地查看我的交互日志。

当然,我需要一种“排斥力”,它也会将用户推开,否则他们都会崩溃成一个点。

首先,我尝试监控每个XY坐标的最低和最高位置,并对它们的位置进行归一化,但这不起作用,一些交互次数较少的用户留在了边缘,其余的都挤到了中间。

有没有人知道我应该用什么方程式来移动这些点,既有用户交互时的“吸引力”,也有阻止他们全部崩溃成一个点的“排斥力”?

编辑:在回答一个问题时,我应该指出,我正在处理大约100万用户,以及大约1000万用户之间的交互。如果有人能推荐一个可以为我做这件事的工具,我洗耳恭听:-)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-10-06 05:17:47

在过去,当我尝试这种事情时,我使用了一个弹簧模型来将链接的节点拉在一起,类似于:dx = -k*(x-l)dx是位置的变化,x是当前位置,l是所需的间隔,k是调整的弹簧系数,直到在弹簧强度和稳定性之间获得良好的平衡,它将小于0.1。拥有l > 0可以确保所有东西都不会落在中间。

除此之外,所有节点之间的一般“排斥力”会将它们分散开来,类似于:dx = k / x^2。两个节点越接近,这个值就越大,调整k以获得合理的效果。

票数 2
EN

Stack Overflow用户

发布于 2008-09-18 15:53:43

我可以推荐一些可能性:首先,尝试对交互进行对数缩放,或者通过sigmoidal函数运行它们来压缩范围。这将为您提供更平滑的可视间距分布。

独立于这个缩放问题:看看graphviz中的一些渲染策略,特别是程序"neato“和"fdp”。从手册页:

neato使用spring'' models (see Kamada and Kawai, Information Processing Letters 31:1, April 1989). Input files must be formatted in the dot attributed graph language. By default, the output of neato is the input graph with layout coordinates appended. fdp draws undirected graphs using aspring'‘模型绘制无向图。它依赖于Fruchterman和Reingold精神中的力导向方法(参见:软件-实践与经验21(11),1991,pp.1129-1164)。

最后,考虑其中一种缩放策略,即吸引力和某种阻力系数,而不是排斥力。实际上,将事物移动得更近,然后可能更远,可能只会让你产生循环行为。

考虑一个模型,在这个模型中,所有的东西最终都会崩溃,但速度很慢。然后运行,直到满足某些条件(节点穿过布局区域的中心或诸如此类的条件)。

阻力或动量可以仅仅编码为运动的基本阻力,并等同于限制运动;它可以不同地应用(根据物体移动的距离,它们在空间中的位置,以及有多少其他节点接近等,它们可以移动得更慢)。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2008-11-27 17:11:16

弹簧模型是实现这一点的传统方法:基于相互作用在每个节点之间产生吸引力,而在所有节点之间基于距离的平方反比产生排斥力。然后求解,使能量最小化。如果您有多个节点,您可能需要一些相当强大的编程来获得有效的解决方案。确保开始位置是随机的,并运行程序几次:像这样的情况几乎总是有几个局部能量最小值,你想确保你有一个好的。

此外,除非你只有几个节点,否则我会在3D中做这件事。额外的自由维度允许更好的解决方案,如果不是比2D更好,那么您也应该能够在3D中可视化集群。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/93705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档