⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdbasedclusteringminingmodel.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        PMML pmml = PMML.unmarshal( reader );
        if (pmml.getClusteringModelCount()==0)
          throw new MiningException("no CD based clustering model found");

        DataDictionary dictionary = pmml.getDataDictionary();
        MiningDataSpecification newMetaData = new MiningDataSpecification();
        newMetaData.parsePmmlObject( dictionary );

        TransformationDictionary transDict = pmml.getTransformationDictionary();
        if (transDict != null) {
          MiningTransformationActivity mta = new MiningTransformationActivity();
          mta.parsePmmlObject(transDict);
          MiningDataSpecification tmds = mta.transform(newMetaData);
          tmds.setPretransformedMetaData(newMetaData);
          newMetaData = tmds;
          newMetaData.setMiningTransformationActivity( mta );
          newMetaData.setTransformed(true);
        };

        ClusteringSettings cls = new ClusteringSettings();
        cls.setDataSpecification( newMetaData );
        setMiningSettings( cls );

        ClusteringModel model = pmml.getClusteringModel(0);
        parsePmmlObject(model);
    }

    /**
     * Write clustering model to PMML document.
     *
     * @param writer writer for the PMML document
     * @exception MiningException
     */
    public void writePmml( Writer writer ) throws MiningException
    {
        PMML pmml = new PMML();
        pmml.setVersion( "2.0" );
        pmml.setHeader( (Header)PmmlUtils.getHeader() );
        MiningDataSpecification metaData = miningSettings.getDataSpecification();
        if ( metaData.isTransformed() )
        {
            pmml.setDataDictionary( (DataDictionary)metaData.getPretransformedMetaData().createPmmlObject() );
            pmml.setTransformationDictionary( (com.prudsys.pdm.Adapters.PmmlVersion20.TransformationDictionary)metaData.getMiningTransformationActivity().createPmmlObject() );
        }
        else
        {
            pmml.setDataDictionary( (DataDictionary)metaData.createPmmlObject() );
        };

        ClusteringModel[] clusteringModel = new ClusteringModel[1];
        clusteringModel[0] = (ClusteringModel) createPmmlObject();
        pmml.setClusteringModel( clusteringModel );

        // Add encoding and write to document:
        PmmlUtils.setEncoding();
        PmmlUtils.marshalPmml(writer, pmml);
    }

    /**
     * Write clustering model to PMML element.
     *
     * @return PMML element of clustering model
     * @exception MiningException
     */
    public Object createPmmlObject() throws MiningException
    {
       // Create clustering model:
       ClusteringModel clusteringModel = new ClusteringModel();

       // Set attributes:
       clusteringModel.setModelName( "clustering model" );
       clusteringModel.setFunctionName("clustering");
       clusteringModel.setAlgorithmName(algorithm);
       if (type == CENTER_BASED)
         clusteringModel.setModelClass( "centerBased" );
       if (type == DISTRIBUTION_BASED)
         clusteringModel.setModelClass( "distributionBased" );
       clusteringModel.setNumberOfClusters( String.valueOf( getNumberOfClusters()) );

       // Set MiningSchema:
       if( inputSpec != null )
       {
         clusteringModel.setMiningSchema( (MiningSchema)
           inputSpec.createPmmlObject() );
       };

       // Set ComparisonMeasure:
       clusteringModel.setComparisonMeasure( (ComparisonMeasure)
         distance.createPmmlObject() );

       // Set ClusteringFields:
       if (distance.getFieldWeights() != null) {
          double weights[] = distance.getFieldWeights();
          ClusteringField[] clustField = new ClusteringField[weights.length];
          for (int i = 0; i < weights.length; i++) {
            clustField[i] = new ClusteringField();
            clustField[i].setField(
              miningSettings.getDataSpecification().getMiningAttribute(i).getName() );
            clustField[i].setFieldWeight( String.valueOf( weights[i] ) );

            clusteringModel.setClusteringField(clustField);
          };
       };

       // Set clusters:
       com.prudsys.pdm.Adapters.PmmlVersion20.Cluster[] clust =
         new com.prudsys.pdm.Adapters.PmmlVersion20.Cluster[ getNumberOfClusters() ];
       for (int i = 0; i < getNumberOfClusters(); i++) {
         clust[i] = (com.prudsys.pdm.Adapters.PmmlVersion20.Cluster)
           clusters[i].createPmmlObject();
       };
       clusteringModel.setCluster( clust );

       return clusteringModel;
    }

    /**
     * Read clustering model from PMML element. Not supported, exception is
     * always thrown.
     *
     * @param pmmlObject PMML element to read in
     * @exception MiningException always thrown
     */
    public void parsePmmlObject( Object pmmlObject ) throws MiningException
    {
       // Get clustering model:
       ClusteringModel clusteringModel = (ClusteringModel) pmmlObject;

       // Get mining schema:
       MiningSchema schema = clusteringModel.getMiningSchema();

       // Create input specification, get inner trafo from schema:
       inputSpec = new ApplicationInputSpecification();
       inputSpec.parsePmmlObject( schema );
       inputSpec.initApplicationInputSpecification( miningSettings );
       miningTransform = inputSpec.createInnerTrafoFromInputSpec( miningSettings.getDataSpecification() );

       // Get mining settings:
       ClusteringSettings cls = (ClusteringSettings) miningSettings;

       // Get ComparisonMeasure:
       distance = new Distance();
       distance.parsePmmlObject( clusteringModel.getComparisonMeasure() );

       // Set ClusteringFields:
/*
       if (distanceType.getFieldWeights() != null) {
          double weights[] = distanceType.getFieldWeights();
          ClusteringField[] clustField = new ClusteringField[weights.length];
          for (int i = 0; i < weights.length; i++) {
            clustField[i] = new ClusteringField();
            clustField[i].setField(
              miningSettings.getDataSpecification().getMiningAttribute(i).getName() );
            clustField[i].setFieldWeight( String.valueOf( weights[i] ) );

            clusteringModel.setClusteringField(clustField);
          };
       };
*/
       // Get clusters:
       com.prudsys.pdm.Adapters.PmmlVersion20.Cluster[] clust =
         clusteringModel.getCluster();
       clusters = new com.prudsys.pdm.Models.Clustering.Cluster[ clust.length ];
       for (int i = 0; i < clust.length; i++) {
         clusters[i] = new com.prudsys.pdm.Models.Clustering.Cluster();
         clusters[i].parsePmmlObject( clust[i] );
         clusters[i].getCenterVec().setMetaData(
           miningSettings.getDataSpecification() );
       };
    }

    // -----------------------------------------------------------------------
    //  Other export methods
    // -----------------------------------------------------------------------
    /**
     * Returns string representation (just few words).
     *
     * @return string representation
     */
    public String toString()
    {
        return "Center / Distribution based mining model";
    }

    // -----------------------------------------------------------------------
    //  Test
    // -----------------------------------------------------------------------
    /**
     * Test.
     *
     * @param args arguments (ignored)
     */
    public static void main(String[] args)
    {
      try {
        CDBasedClusteringMiningModel cmm = new CDBasedClusteringMiningModel();

        MiningInputStream inputData = new MiningArffStream( "data/arff/transact.arff" );
        MiningDataSpecification metaData = inputData.getMetaData();

        ClusteringSettings clustSet = new ClusteringSettings();
        clustSet.setDataSpecification( metaData );

        cmm.setMiningSettings( clustSet );

        cmm.inputSpec = new ApplicationInputSpecification( metaData );
        cmm.inputSpec.initApplicationInputSpecification( clustSet );

        Distance dist = new Distance( metaData.getAttributesNumber() );
        cmm.setDistance( dist );

        double values[] = new double[4];
        values[2] = 2;
        MiningVector mv = new MiningVector(values);
        mv.setMetaData(metaData);
        com.prudsys.pdm.Models.Clustering.Cluster[] clust = new com.prudsys.pdm.Models.Clustering.Cluster[1];
        clust[0] = new com.prudsys.pdm.Models.Clustering.Cluster();
        clust[0].setName( "Erstes Cluster!");
        clust[0].setCenterVec( mv );
        cmm.setClusters( clust );

        // Write to PMML:
        FileWriter writer = new FileWriter("data/pmml/clustermodel.xml");
        cmm.writePmml(writer);

        // Show in explorer:
        String explorer = "notepad";
        String path ="";
        String file = "data\\pmml\\clustermodel.xml";
        Runtime.getRuntime().exec(explorer + " " + path + file);
      }
      catch (Exception ex) {
        ex.printStackTrace();
      };
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -