类 FuzzyKMeansClusterer<T extends Clusterable>

java.lang.Object
org.hipparchus.clustering.Clusterer<T>
org.hipparchus.clustering.FuzzyKMeansClusterer<T>
类型参数:
T - 要进行聚类的点的类型

public class FuzzyKMeansClusterer<T extends Clusterable> extends Clusterer<T>
模糊K均值聚类算法。

模糊K均值算法是经典K均值算法的一种变体,其主要区别在于单个数据点不会被唯一分配到单个簇中。相反,每个点i都有一组权重uij,表示对簇j的归属度。

该算法试图最小化目标函数:\[ J = \sum_{i=1}^C\sum_{k=1]{N} u_{i,k}^m d_{i,k}^2 \] 其中\(d_{i,k}\)是数据点i和簇中心k之间的距离。

该算法需要两个参数:

  • k:簇的数量
  • fuzziness:确定簇模糊程度的参数,较大的值导致更模糊的簇

额外的可选参数:

  • maxIterations:最大迭代次数
  • epsilon:收敛标准,默认为1e-3

K均值算法的模糊变体对于选择初始簇中心更加稳健。

  • 构造器详细资料

    • FuzzyKMeansClusterer

      public FuzzyKMeansClusterer(int k, double fuzziness) throws MathIllegalArgumentException
      创建一个新的FuzzyKMeansClusterer实例。

      默认情况下将使用欧几里德距离作为距离度量。

      参数:
      k - 将数据分成的簇的数量
      fuzziness - 模糊因子,必须大于1.0
      抛出:
      MathIllegalArgumentException - 如果fuzziness <= 1.0
    • FuzzyKMeansClusterer

      public FuzzyKMeansClusterer(int k, double fuzziness, int maxIterations, DistanceMeasure measure) throws MathIllegalArgumentException
      创建一个新的FuzzyKMeansClusterer实例。
      参数:
      k - 将数据分成的簇的数量
      fuzziness - 模糊因子,必须大于1.0
      maxIterations - 运行算法的最大迭代次数。如果为负数,则不会设置最大值。
      measure - 要使用的距离度量
      抛出:
      MathIllegalArgumentException - 如果fuzziness <= 1.0
    • FuzzyKMeansClusterer

      public FuzzyKMeansClusterer(int k, double fuzziness, int maxIterations, DistanceMeasure measure, double epsilon, RandomGenerator random) throws MathIllegalArgumentException
      创建一个新的FuzzyKMeansClusterer实例。
      参数:
      k - 将数据分成的簇的数量
      fuzziness - 模糊因子,必须大于1.0
      maxIterations - 运行算法的最大迭代次数。如果为负数,则不会设置最大值。
      measure - 要使用的距离度量
      epsilon - 收敛标准(默认为1e-3)
      random - 用于选择初始中心的随机生成器
      抛出:
      MathIllegalArgumentException - 如果fuzziness <= 1.0
  • 方法详细资料

    • getK

      public int getK()
      返回此实例将使用的簇数。
      返回:
      簇的数量
    • getFuzziness

      public double getFuzziness()
      返回此实例使用的模糊因子。
      返回:
      模糊因子
    • getMaxIterations

      public int getMaxIterations()
      返回此实例将使用的最大迭代次数。
      返回:
      最大迭代次数,如果未设置最大值,则为-1
    • getEpsilon

      public double getEpsilon()
      返回此实例使用的收敛标准。
      返回:
      收敛标准
    • getRandomGenerator

      public RandomGenerator getRandomGenerator()
      返回此实例将使用的随机生成器。
      返回:
      随机生成器
    • getMembershipMatrix

      public RealMatrix getMembershipMatrix()
      返回nxk成员矩阵,其中n是数据点的数量,k是簇的数量。

      元素Ui,j表示数据点i到簇j的成员值。

      返回:
      成员矩阵
      抛出:
      MathIllegalStateException - 如果之前未调用cluster(Collection)
    • getDataPoints

      public List<T> getDataPoints()
      返回上一次调用cluster(Collection)时使用的数据点的不可修改列表。
      返回:
      数据点列表,如果之前未调用cluster(Collection)则为null
    • getClusters

      public List<CentroidCluster<T>> getClusters()
      返回上一次调用cluster(Collection)的结果中的簇列表。
      返回:
      簇列表,如果之前未调用cluster(Collection)则为null
    • getObjectiveFunctionValue

      public double getObjectiveFunctionValue()
      获取目标函数的值。
      返回:
      目标函数评估值作为双精度值
      抛出:
      MathIllegalStateException - 如果之前未调用cluster(Collection)
    • cluster

      public List<CentroidCluster<T>> cluster(Collection<T> dataPoints) throws MathIllegalArgumentException
      执行模糊K均值聚类分析。
      指定者:
      cluster 在类中 Clusterer<T extends Clusterable>
      参数:
      dataPoints - 要进行聚类的点
      返回:
      簇列表
      抛出:
      MathIllegalArgumentException - 如果数据点为null或簇的数量大于数据点的数量