• 大小: 36KB
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: Java
  • 标签: weka  聚类  

资源简介

仿照weka自带的简单K均值聚类算法,实现的一个简单的模糊C均值聚类算法。

资源截图

代码片段和文件信息

/*
 * SimpleFuzzyCMeans.java
 * 
 * 本算法是在weka自带的SimpleKMeans算法的基础上修改而成的
 * 在Eclipse平台下运行实现。
 * 
 * 本算法保留了SimpleKMeans算法的基本构架,
 * 对其算法的核心代码进行了修改,
 * 将核心代码换为模糊C均值聚类算法。
 * 
 * SimpleKMeans算法支持Euclidean和Manhattan距离,
 * 本算法出于简便,只支持Euclidean距离。
 * 
 * 算法关于数据的预处理以及程序结果的输出采用SimpleKMeans算法的代码,
 * 并进行了少量的修改(主要是参数项的设置)。
 * 
 * 程序运行前先修改weka.gui包中的文件GenericobjectEditor.pros,
 * 在其语句“# Lists the Clusterers I want to choose from“下
 * 加入语句“weka.clusterers.SimpleFuzzyCMeans\“,然后保存。
 * 
 * 运行weka.gui包中的文件GUIChooser.java,
 * 便可打开weka的图形界面,然后选择数据,
 * 在其聚类算法模块下选择SimpleFuzzyCMeans,
 * 对算法的参数进行适当的设置,
 * 即可运行模糊C均值聚类算法。
 *
 */

package weka.clusterers;

import weka.classifiers.rules.DecisionTableHashKey;
import weka.core.Attribute;
import weka.core.Capabilities;
import weka.core.DistanceFunction;
import weka.core.EuclideanDistance;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.Option;
import weka.core.Utils;
import weka.core.WeightedInstancesHandler;
import weka.core.Capabilities.Capability;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.ReplaceMissingValues;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Random;
import java.util.Vector;

public class SimpleFuzzyCMeans extends RandomizableClusterer implements
NumberOfClustersRequestable WeightedInstancesHandler {

/**
 * for serialization
 */
static final long serialVersionUID = 3235809600124455123L;

/**
 * replace missing values in training instances
 */
private ReplaceMissingValues m_ReplaceMissingFilter;

/**
 * number of clusters to generate
 */
private int m_NumClusters = 2;

/**
 * 实例数据
 */
private Instances instances;

/**
 * holds the cluster centroids
 */
private Instances m_ClusterCentroids;

/**
 * Holds the standard deviations of the numeric attributes in each cluster
 */
private Instances m_ClusterStdDevs;

/**
 * For each cluster holds the frequency counts for the values of each
 * nominal attribute
 */
private int[][][] m_ClusterNominalCounts;
private int[][] m_ClusterMissingCounts;

/**
 * Stats on the full data set for comparison purposes In case the attribute
 * is numeric the value is the mean if is being used the Euclidian distance
 * and if the attribute is nominal then it‘s mode is saved
 */
private double[] m_FullMeansOrModes;
private double[] m_FullStdDevs;
private int[][] m_FullNominalCounts;
private int[] m_FullMissingCounts;

/**
 * Display standard deviations for numeric atts
 */
private boolean m_displayStdDevs = true;

/**
 * Replace missing values globally?
 */
private boolean m_dontReplaceMissing = false;

/**
 * The number of instances in each cluster
 */
private int[] m_ClusterSizes;

/**
 * 隶属度矩阵
 */
private double[][] membershipMatrix;

/**
 * 模糊系数
 */
private double fuzzyCoefficient = (double) 2.0;

/**
 * 定义误差精度
 */

评论

共有 条评论