📄 decisiontreeminingmodel.java
字号:
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 + -