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

📄 decisiontreeminingmodel.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            xmv.setId(suppVecId);
            for (int j = 0; j < metaData.getAttributesNumber(); j++) {
              MiningAttribute ma    = metaData.getMiningAttribute(j);
              AttributeInstance xma = new AttributeInstance();
              xma.setName(ma.getName());
              xma.setValue(Double.toString(suppVec.getValue(j)));
              xmv.addAttributeInstance(xma);
            };
            vdic.addVectorInstance(xmv);
          };
          pmml.setVectorDictionary(vdic);
        };

        // Add tree model:
        TreeModel[] treeModel = new TreeModel[1];
        treeModel[0] = (TreeModel)createPmmlObject();
        pmml.setTreeModel( treeModel );

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

    /**
     * Reads PMML document of tree model.
     * PMMLs TreeModel is used.
     *
     * @param reader reader for PMML model
     * @exception MiningException cannot read PMML model
     * @see com.prudsys.pdm.Adapters.PmmlVersion20.TreeModel
     */
    public void readPmml( Reader reader ) throws MiningException
    {
//        com.borland.xml.toolkit.XmlUtil.setEncoding( "UTF-8" );
        PMML pmml = PMML.unmarshal( reader );

        // Parse PMML header:
        Header header = pmml.getHeader();
        String[] apps = PmmlUtils.parseHeader(header);
        if (apps != null) {
          applicationName = apps[0];
          applicationVersion = apps[1];
        }

        if( pmml.getTreeModelCount() == 0 ) throw new MiningException("no tree model found");

        // Read data dictionary:
        DataDictionary dictionary = pmml.getDataDictionary();
        MiningDataSpecification newMetaData = new MiningDataSpecification();
        newMetaData.parsePmmlObject( dictionary );

        // Read transformation 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);
        };

        // Read global support vector dictionary:
        VectorDictionary vdic = pmml.getVectorDictionary();
        if (vdic != null) {
          VectorInstance[] vis = vdic.getVectorInstance();
          int nVecDict = 0;
          if (vis != null) nVecDict = vis.length;
          globalSupportVectors = new Hashtable();
          for (int i = 0; i < nVecDict; i++) {
            AttributeInstance[] ais = vis[i].getAttributeInstance();
            double[] values = new double[ais.length];
            for (int j = 0; j < ais.length; j++) {
              MiningAttribute ma = newMetaData.getMiningAttribute(ais[j].getName());
              values[newMetaData.getAttributeIndex(ma)] = Double.parseDouble(ais[j].
                  getValue());
            };
            MiningVector supportVector = new MiningVector(values);
            supportVector.setMetaData(newMetaData);
            String supportVectorID = vis[i].getId();
            globalSupportVectors.put(supportVectorID, supportVector);
          };
          System.out.println("#global SVs: " + globalSupportVectors.size());
        };

        // Init settings:
        DecisionTreeSettings dtSettings = new DecisionTreeSettings();
        dtSettings.setDataSpecification( newMetaData );
        setMiningSettings( dtSettings );

        // Read decision tree model:
        TreeModel[] treeModel = pmml.getTreeModel();
        parsePmmlObject(treeModel[0]);
    }

    /**
     * Creates PMML element TreeModel. Uses the DecisionTreeNode's
     * PMML capabilities to create Node object.
     *
     * @return PMML object TreeModel
     * @exception MiningException cannot write PMML object
     * @see com.prudsys.pdm.Adapters.PmmlVersion20.TreeModel
     */
    public Object createPmmlObject() throws MiningException
    {
        TreeModel treeModel = new TreeModel();

        // Set mining schema:
        treeModel.setMiningSchema( (MiningSchema)inputSpec.createPmmlObject() );

        // Set attributes:
        treeModel.setModelName( "Decision Tree Model" );
        treeModel.setFunctionName("classification");
        treeModel.setAlgorithmName("decisionTree");

        // Traverse decision tree nodes:
        Node pmmlNode = (Node)( (DecisionTreeNode)classifier ).createPmmlObject();
        treeModel.setNode( pmmlNode );

        return treeModel;
    }

    /**
     * Reads PMML TreeModel element.
     *
     * @param pmml object of TreeModel type
     * @exception MiningException cannot read PMML object
     * @see com.prudsys.pdm.Adapters.PmmlVersion20.TreeModel
     */
    public void parsePmmlObject(Object pmml) throws MiningException
    {
      TreeModel tm = (TreeModel) pmml;

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

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

      // Add target attribute to mining settings:
      DecisionTreeSettings dts = (DecisionTreeSettings) miningSettings;
      String classificationAttributeName = target.getName();
      dts.setPredictedAttributeName( classificationAttributeName );
      MiningAttribute targetAtt = dts.getDataSpecification().getMiningAttribute( classificationAttributeName );
      dts.setTarget( targetAtt );

      // Get classifier object:
      Node node                   = tm.getNode();
      DecisionTreeNode classifier = new DecisionTreeNode();

      // Check if contains regression model => regression node:
      Object model = RegressionTreeNode.getPmmlRegressionModel(node);
      if (model != null) {
        classifier = new RegressionTreeNode();
        nonlinear  = true;
      };

      classifier.setDecisionTreeModel(this);
      classifier.setMetaData( miningSettings.getDataSpecification() );
      classifier.setTarget( targetAtt );
      if (model != null) ((RegressionTreeNode) classifier).parsePmmlObjectModel( model );
      classifier.parsePmmlObject( node );

      setClassifier( classifier );
    }

    /**
     * Writes tree model as plain text. Not supported.
     *
     * @param writer writer for plain text model
     * @exception MiningException always thrown
     */
    public void writePlainText( Writer writer ) throws MiningException
    {
      throw new MiningException( "not supported" );
    }

    /**
     * Returns string representation (just few words).
     *
     * @return string representation
     */
    public String toString()
    {
        return "Decision tree mining model";
    }

    /**
     * Returns association rule model as HTML string.
     *
     * @return model as HTML string
     */
    public String toHtmlString()
    {
        String html = "" +
//"<html>\n"+
"<head>\n"+
"<style>\n"+
"<!--\n"+
"#foldheader{cursor:pointer;cursor:hand ; font-weight:bold ;\n"+
"list-style-image:url(fold.gif)}\n"+
"#foldinglist{list-style-image:url(list.gif)}\n"+
"//-->\n"+
"</style>\n"+
"<script language=\"JavaScript1.2\">\n"+
"<!--\n"+
"//Smart Folding Menu tree- By Dynamic Drive (rewritten 03/03/02)\n"+
"//For full source code and more DHTML scripts, visit http://www.dynamicdrive.com\n"+
"//This credit MUST stay intact for use\n"+
"var head=\"display:''\"\n"+
"img1=new Image()\n"+
"img1.src=\"fold.gif\"\n"+
"img2=new Image()\n"+
"img2.src=\"open.gif\"\n"+

"var ns6=document.getElementById&&!document.all\n"+
"var ie4=document.all&&navigator.userAgent.indexOf(\"Opera\")==-1\n"+

"function checkcontained(e){\n"+
"var iscontained=0\n"+
"cur=ns6? e.target : event.srcElement\n"+
"i=0\n"+
"if (cur.id==\"foldheader\")\n"+
"iscontained=1\n"+
"else\n"+
"while (ns6&&cur.parentNode||(ie4&&cur.parentElement)){\n"+
"if (cur.id==\"foldheader\"||cur.id==\"foldinglist\"){\n"+
"iscontained=(cur.id==\"foldheader\")? 1 : 0\n"+
"break\n"+
"}\n"+
"cur=ns6? cur.parentNode : cur.parentElement\n"+
"}\n"+

"if (iscontained){\n"+
"var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags(\"UL\")[0]\n"+
"if (foldercontent.style.display==\"none\"){\n"+
"foldercontent.style.display=\"\"\n"+
"cur.style.listStyleImage=\"url(open.gif)\"\n"+
"}\n"+
"else{\n"+
"foldercontent.style.display=\"none\"\n"+
"cur.style.listStyleImage=\"url(fold.gif)\"\n"+
"}\n"+
"}\n"+
"}\n"+
"if (ie4||ns6)\n"+
"document.onclick=checkcontained\n"+
"//-->\n"+
"</script>\n"+
"</head>\n"+
"<body>\n"+
"<font face=\"Verdana\">\n"+
"<ul>\n";

        MiningTreeNode root = (MiningTreeNode)classifier;
        html = html + drawNode( root );

//html = html +
//"   <li id=\"foldheader\">News</li>"+
//"   <ul id=\"foldinglist\" style=\"display:none\" style=&{head};>"+
//"      <li><a href=\"http://www.cnn.com\">CNN</a></li>"+
//"      <li><a href=\"http://www.abcnews.com\">ABC News</a></li>"+
//"      <li><a href=\"http://www.news.bbc.co.uk\">BBC News</a></li>"+
//"   </ul>"+
//
//"   <li id=\"foldheader\">Webmaster</li>"+
//"   <ul id=\"foldinglist\" style=\"display:none\" style=&{head};>"+
//"      <li><a href=\"http://www.dynamicdrive.com\">Dynamic Drive</a></li>"+
//"      <li><a href=\"http://www.javascriptkit.com\">JavaScript Kit</a></li>"+
//"      <li><a href=\"http://www.freewarejava.com\">Freewarejava.com</a></li>"+
//"   </ul>"+
//
//"   <li id=\"foldheader\">Nested Example</li>"+
//"   <ul id=\"foldinglist\" style=\"display:none\" style=&{head};>"+
//"      <li><a href=\"http://www.dynamicdrive.com\">outer 1</a></li>"+
//"      <li><a href=\"http://www.dynamicdrive.com\">outer 2</a></li>"+
//"      <li id=\"foldheader\">Nested</li>"+
//"      <ul id=\"foldinglist\" style=\"display:none\" style=&{head};>"+
//"         <li><a href=\"http://www.dynamicdrive.com\">nested 1</a></li>"+
//"         <li><a href=\"http://www.dynamicdrive.com\">nested 2</a></li>"+
//"      </ul>"+
//"      <li><a href=\"http://www.dynamicdrive.com\">outer 3</a></li>"+
//"      <li><a href=\"http://www.dynamicdrive.com\">outer 4</a></li>"+
//"   </ul>";

html = html +
"</ul>\n"+
"</font>\n";
//"</body>\n"+
//"</html>\n";
        return html;
    }

    /**
     * Draws node in HTML.
     *
     * @param node node of tree to draw
     * @return HTML representation of node as string
     */
    public String drawNode( MiningTreeNode node )
    {
        String html = "";
        if( node.isLeaf() )
        {
            html = html + "<li><a href=\"#\"> " + node + "</a></li>\n";
        }
        else
        {
            html = html +
            "   <li id=\"foldheader\">" + node + "</li>\n"+
            "   <ul id=\"foldinglist\" style=\"display:none\" style=&{head};>\n";
            int n = node.getChildCount();
            for (int i = 0; i < n; i++)
            {
                html = html + drawNode( node.getChildAt( i ) );
            }
            html = html + "</ul>\n";
        }
        return html;
    }
}

⌨️ 快捷键说明

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