社区探测 (Community Detection)

一. 社区探测 (Community Detection) [无向图]
   输入: 顶点值[Long] 和 边值[Double]; 即 Graph[K, Long, Double], K 为label标签.
   返回: 和输入同类型的Graph, 其中顶点值与社区标签 (community labels) 对应. 
   如果两个顶点有相同的顶点值, 则这两个顶点属于同一个社区.

   文档翻译: 
   The Vertex values of the input Graph provide the initial label assignments.
   输入图的顶点值提供初始标签分配

   Initially, each vertex is assigned a tuple formed of its own initial value along with a score equal to 1.0.
   最初, 每个顶点被分配一个 Tuple2[Long, Double] 它包含了其初始值和一个分数, 分数值等于1.0
   The vertices propagate their labels and max scores in iterations, 
   在每一次迭代中, 所有顶点将自身的标签和最高分数发送给它们的邻居.
   each time adopting the label with the highest score from the list of received messages. 
   当接收到来自邻居的信息时, 顶点每次采用接收消息列表中得分最高的标签.
   The chosen label is afterwards re-scored using the fraction delta/the superstep number. 
   通过 (跳衰减 / 超步) 算法 对标签重新算分
   Delta is passed as a parameter and has 0.5 as a default value.
   跳衰减参数默认值为 0.5

   [ScatterGatherIteration]
   org.apache.flink.graph.library.CommunityDetection

   源码解读: 
   1. 从输入图[K, Long, Double] 转换为新的顶点[K, Tuple2[Long, Double(default 1.0)]], 边保持不变. 新图[K, Tuple2[Long, Double], Double]
   2. runScatterGatherIteration(LabelMessenger, VertexLabelUpdater(delta), maxIterations)
   2.1 LabelMessenger: 发消息. 顶点值不变, 新顶点分数 = 顶点分数 * 边值; 消息体: Tuple2[顶点值, 新顶点分数]
   2.2 VertexLabelUpdater: 更新顶点. 记录 标签的最高分数|收到的标签分数 [顶点值, 顶点分数]. 若有收到标签分数, 设置新顶点 Tuple2[最高顶点值, 最高顶点分数].
   3. 将计算的结果清理分数并返回图: mapVertices(RemoveScoreFromVertexValuesMapper). 

   2.2 备注: 
   收到的标签分数: 相同的顶点值时, 分数是累加的.
   标签的最高分数: 只保留最高分数.
   最高顶点值: 取最高分数的顶点值.
   最高顶点分数: 根据最高分数的顶点值取分数. 最高顶点值不等于当前顶点的顶点值时, 重计算新分数 highestScore -= (delta / SuperstepNumber)

   [分数]示例: 1~3是顶点值, 同时是顶点标签.
   1    4    1.0
   2    4    1.0
   3    4    1.0
   2    4    1.0
   highestScore
   2    4重复输入2次即分数为2.0, 最大值是1.0(1超步), 
   从 收到的标签分数 遍历出 分数值为2.0对应的顶点2, 
   从 标签的最高分数 获取顶点2的最高分数1.0, 
   若 最高分数1.0不等于当前顶点值4, 则 重新计算分数 最高分数 = 最高分数 - (delta / SuperstepNumber). 即 最高分数 = 1.0 - (0.5 / 1) = 0.5
   设置新顶点值 Tuple2(2.0, 0.5)

   个人总结: 
   一个社区由一组连接紧密的结点组成, 同时这些结点与社区外部的结点连接稀疏. 
   该算法用于哪些是在一个社区内的. 即联系的紧密程度高属于一个社区.

   论文: https://arxiv.org/pdf/0808.2633.pdf

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAR是合成孔径雷达,其通过发射一系列连续波信号并接收反射回来的信号来实现舰船的探测和识别。下面简要介绍一下SAR舰船探测的代码。 SAR舰船探测的代码主要分为数据预处理和目标检测两个步骤。 首先是数据预处理。对于SAR数据,常见的预处理步骤包括辐射校正、信噪比增强、多视角合成等。辐射校正是为了消除仪器系统的非线性因素和相位误差,使数据质量更加准确。信噪比增强可以使用滤波算法,并结合特征提取方法,来减少噪声对目标检测的影响。多视角合成则是通过融合不同的SAR图像,获得更全面的信息。 接下来是目标检测。目标检测的主要任务是从预处理后的SAR图像中提取舰船目标。常见的目标检测算法包括基于阈值分割的方法、基于特征提取的方法和基于深度学习的方法等。基于阈值分割的方法通常需要使用图像的灰度值进行二值化处理,将目标和背景分离出来。基于特征提取的方法则是通过提取图像的纹理、形状等特征,来区分目标和背景。而基于深度学习的方法则是利用卷积神经网络等深度学习结构,从大量的数据中学习目标的特征,并进行目标检测。 需要注意的是,SAR舰船探测的结果可能会受到多种因素的影响,比如天气条件、目标表面结构等。因此,代码实现中应该考虑并处理一些噪声和伪目标的情况,以提高探测的准确性和稳定性。 总之,SAR舰船探测的代码实现涉及到数据预处理和目标检测两个步骤。数据预处理包括辐射校正、信噪比增强和多视角合成等,目标检测可以采用阈值分割、特征提取或深度学习等方法。但需要注意的是,应该考虑并处理一些可能影响探测结果的因素。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值