如何在python中使用遗传算法实现聚类过程?

时间:2018-06-18 08:29:20

标签: python cluster-analysis genetic-algorithm

我是python编码的新手。 我有一个关于在python中使用遗传算法进行聚类的问题。

我想不仅基于距离而且基于群集的其他索引来对站进行聚类。我想最大化所有集群的总指数 我有900个自行车站的GPS坐标数据。

900 number of bike stations in Seoul

我已经创建了[所有电台] x [所有电台]的距离矩阵。单位是[km]。

基本思路 - 绘制随机的群集圈。

如果我想在50个集群中进行集群,那么代码应该生成50个不同的集群圈。圈子 n 内的工作站,将在群集 n 中标记 。示例如下图所示

basic idea to generate circle

生成圈子有一些限制,

  1. 簇圆不应重叠。
    - 为了满足这个条件,两个圆心之间的距离应大于半径之和。 (但我不知道如何使用python进行编码)
  2. 圆的半径限制大小。 (应该在超参数中找到,但最小值为1 km,最大值为4 km是第一个候选者)
  3. 在群集时,将发生无法进入圆群集的工作站。对于这种情况,我们应该根据距离将这些站分配到最近的圆。
  4. 在我们成功生成随机不重叠的50个群集圈之后,我想找到可以最大化我自己的索引的圈子的最佳组合。

    遗传算法

    gene { x1, y1, r1, x2, y2, r2, x3, y3, r3, ... x50, y50, r50 }
    [ xn, yn ] 是圆圈的中心, rn 是圆的半径。

    群集的中心应该是一个站而不是地图中的一个点。这意味着每个50个聚类中心点应该是一个站点。

    rn 在边界内随机生成。

    例如,如果我想制作群集1km < rn < 4km,则可以在100 [m]的间隔内随机生成 r

    因此, r 可以获得{ 1.1km, 1.2km, ... 3.9km, 4km }

    中的值

    分工点将是:

    { x1, y1, r1,/ x2, y2, r2,/ x3, y3, r3,/ ... / x50, y50, r50 } 
    

    Fitness函数是我自己提到的集群索引。

    我已经有了一个计算索引的代码。如果站点由簇号标记,那么我可以使用预先构建的代码进行计算。

    标签表格应该像下面的csv文件:

    cluster labeling form

    很抱歉很长的解释,谢谢!!!!

0 个答案:

没有答案