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