language: cn
model_unique_abbr: mean_shift_clustering_sklearn
version: 1.0
identification:
  docker_image_name: mean_shift_clustering:2.0
  model_name: MeanShift聚类
  semantic: meanshift clustering
  description: 基于局部密度的聚类算法，假设不同簇的概率密度分布不同，根据密度增大的最快方向聚类
  category_application: 诊断型
  category_data:
  - 矢量点数据
  keywords:
  - 局部密度极值
parameter_info:
  parameters:
  - arg_name: input
    is_single_en_dash: false
    param_type: input_data
    name: 空间点数据
    description: 待聚类的空间点csv数据，数据中需包含X、Y坐标列
    data_type: csv
    data_semantic: cluster_data

  - arg_name: x_field
    is_single_en_dash: false
    param_type: param
    name: X坐标字段
    description: X坐标列在输入文件中的列名
    data_type: str
    data_semantic: x field
    param_switches:
    - switch_arg_name: input
      switch_arg_value_regex: csv$
      switch_arg_value_examples: [big_dataset.csv, small_dataset.csv]

  - arg_name: y_field
    is_single_en_dash: false
    param_type: param
    name: Y坐标字段
    description: Y坐标列在输入文件中的列名
    data_type: str
    data_semantic: y field
    param_switches:
    - switch_arg_name: input
      switch_arg_value_regex: csv$
      switch_arg_value_examples: [big_dataset.csv, small_dataset.csv]

  - arg_name: bandwidth
    is_single_en_dash: false
    param_type: param
    name: 带宽
    description: RBF核使用的带宽。如果为None，则使用自适应估计带宽。
    is_required: false
    data_type: float
    data_semantic: bandwidth
    specification:
      range:
      - "(0,)"
  - arg_name: cluster_all
    is_single_en_dash: false
    param_type: param
    name: 聚类所有要素
    description: 如果为true，则所有点都参与聚类，即使是不在任何内核中的离群点，离群点被分配到最近的簇。如果为false，则孤立点被赋予集群标签-1。
    is_required: false
    data_semantic: cluster all
    data_type: enum
    specification:
      default: true
      enum:
        - true
        - false

  - arg_name: n_jobs
    is_single_en_dash: false
    param_type: param
    visible: false
    name: 并行计算数
    description: 并行计算数。如果为 1，则不使用并行；如果为 -1，则使用所有 CPU；对于n_jobs低于 -1，使用 (n_cpus + 1 + n_jobs)。例如 n_jobs = -2，使用n_cpus -1个CPU。
    is_required: false
    data_type: int
    data_semantic: the number of parallel jobs
    specification:
      default: -1
  - arg_name: max_iter
    is_single_en_dash: false
    param_type: param
    name: 最大迭代次数
    description: 如果尚未收敛，则聚类操作终止之前的每个种子点的最大迭代次数(对于该种子点)。
    is_required: false
    data_type: int
    data_semantic: max iter
    specification:
      default: 300
      range:
      - "(0,)"
  - arg_name: output
    is_single_en_dash: false
    param_type: output_data
    name: 聚类结果
    description: 带有簇标签的聚类结果，结果保存为csv文件，聚类标签为0，1，2...。新增列名默认为label，若原数据中已有该列，则添加从序号1编号，如label1、label2...。如果聚类全部要素为False，噪声标签为-1。
    data_type: csv
    data_semantic: cluster_result
  groups:
  - group_id: ixy
    group_name: 输入数据XY列
    group_param_arg_names:
    - input
    - x_field
    - y_field
application:
  domain: 空间点聚类
  objective: 在分布均匀的点群中找到显著聚集的点簇
  dimension:
  - 二维
  mechanism: 搜索点沿着空间点密度增加的方向“漂移”到局部密度极大点，反复迭代搜索特征空间中样本点最密集的区域
operation:
  usage: 该算法需要三个参数，X坐标列(x field)，Y坐标列(y field)，带宽(bandwidth)。
  exec_example:
  - docker run -v $(pwd):/data mean_shift_clustering:1.0-sklearn0.24.0 --input /data/data.csv  --x_field x --y_field y --output /data/clustering_result.csv
  - docker run -v $(pwd):/data mean_shift_clustering:1.0-sklearn0.24.0 --input /data/data.csv --x_field x --y_field y  --bandwidth 2 --cluster_all False --output /data/clustering_result.csv
  output_display:
  - 针对聚类结果中label列，用不同颜色绘制不同标签的二维点数据。
  license:
  - sklearn-BSD
technique:
  language:
  - Python
  os:
  - Linux
  - Windows
  parallel:
  - multiprocessing
  dependencies:
  - name: scikit-learn
    version: 0.24.0
source:
  maintainer: Minghui Li
  organization: Central South University
  contact: 286381830@qq.com
  integrated_softwares:
  - name: scikit-learn
    version: 0.24.0
    license: BSD
  references:
  - "Comaniciu, D., Meer, P. 2002. Mean shift, A robust approach toward feature space analysis. IEEE Transactions on Pattern Analysis and Machine Intelligence, 24(5), 603–619."
  - https://scikit-learn.org/stable/modules/generated/sklearn.cluster.MeanShift.html#sklearn.cluster.MeanShift
