span8
span4
的想法通过helmoet··k-means聚类分析fmepythonpythoncaller点聚类
本文是使用FME 2017.1生成的
为了评估供应商质量的项目,接触了五家供应商,对航空图像进行了比较。他们被要求从航空照片中选择可能由于人类活动而产生潜在危险情况的地区。在一个测试区域内的供应商第一次交付报告之后,该项目的障碍之一似乎是确定报告的集合。一组这样的报告代表了一个潜在危险情况已经发生的地区。选择从图像中检测情况的最佳供应商的标准如下:最佳供应商是使用生成的报告“接触”最大数量集群、通知尽可能少的供应商。由于FME在这个项目中扮演了重要的角色,但是在FME中似乎没有可用的转换器,所以我们研究了在FME转换器中实现所谓的K-Means聚类算法。
K-Means聚类的结果是聚类中所有点的集合,其中所有点到聚类质心的距离之和最小,小于到其他质心的距离。除了一列点外,聚类分析的起点是要生成的簇数。一篇关于这个主题的好文章可以在这里找到:
https://datasciencelab.wordpress.com/2013/12/12/clustering-with-k-means-in-python/
本文还包含一个可以在FME中实现的详细Python脚本。因此,下面将对该实现进行描述。有关Python算法或K-means集群主题的更多信息,请参阅上面的文章。
FME的解决方案如下步骤说明:
1.导入和控制源数据集
2.收集输入坐标并调用python脚本
3.收集产生的集群
为该解决方案构建了一个所谓的FME自定义转换器,即PointClusterer。下面是对所采取的步骤的解释。
自定义转换器只有一个参数,即要生成的集群数量。在实验过程中,算法在输入一个负数来表示要生成的簇数,或者输入一个大于源数据中总点数的值时出现了错误。因此,为生成的集群数量引入一个用户参数(类型为number、正数和0小数),输入参数将被强制为整数。这样,用户就不允许输入无效值。内置了一个单独的检查(使用测试器),以确保生成的集群的数量不超过输入的点数。
输入点后,会检查几何图形:只有点几何图形是允许的。从点信息中提取坐标,并使用聚合器将其放置在X、Y列表中。输入中的点数被计算并使用属性值传递给PythonCaller,在PythonCaller中对集群算法的实际调用发生。同样,PythonCaller也会从user参数读取要生成的集群的数量。在此之后,一个numpy数组被列表X、Y中的坐标填充(使用feature.getAttribute)。
python脚本中对find_centers函数的调用提供了收敛标准和生成的集群列表(numpy数组格式)。为了获得clusternumber和坐标,将迭代列表,并将所有具有指定集群号的坐标放在FME特性(feature. setattribute)上的新列表属性中。在PythonCaller之外,创建的列表被分割成它们的原始部分,得到带有分配的集群号的原始坐标。坐标值用于再次构建点几何图形(使用VertexCreator),坐标通过其集群号(使用聚合器)被放在一个聚合中。
已经创建的自定义转换器可以从FME中心下载,https://hub.亚搏在线safe.com/transformers/pointclusterer。在两个小数据集上进行了应用,得到了如下结果:
- 10x10点和7簇的规则网格[图]1],翻译总持续时间为1秒。
-一系列约。荷兰300个城市被分成7个集群[图]。2]处理时间为4秒(其中从PostGIS阅读器读取数据,用内点替换多边形特征约3秒)。
为了清晰起见,这里的点被缓冲并提供了颜色。
当使用较大的数字(大约3000个点,60个集群)时,算法大约需要30秒才能得到结果。
图1:来自一个规则的10x10网格的7个集群图2:来自大约。300年荷兰城市
最后一个例子可能是荷兰地区重新分类的想法?
事实证明,在FME中合并Python功能是相当容易的。创建的transformer可以通过FME Hub平台轻松地与其他相关方共享。创建的转换器可以使用其他聚类方法进行扩展,或者进行调整,使其他对象(而不仅仅是点)可以聚类在一起。在介绍中提到的项目中没有使用变压器,它只是一个灵感的来源。当在项目中使用transformer时,可以通过选择从数据本身获得最优集群数量的算法来调整transformer。看到例如https://beta.vu.nl/nl/Images/werkstuk-hendrikson_tcm235-91358.pdf
©2019安全亚搏在线软件公司法律