📄 applicationinputspecification.java
字号:
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/**
* Title: XELOPES Data Mining Library
* Description: The XELOPES library is an open platform-independent and data-source-independent library for Embedded Data Mining.
* Copyright: Copyright (c) 2002 Prudential Systems Software GmbH
* Company: ZSoft (www.zsoft.ru), Prudsys (www.prudsys.com)
* @author Valentine Stepanenko (valentine.stepanenko@zsoft.ru)
* @version 1.0
*/
package com.prudsys.pdm.Core;
import java.util.Vector;
import com.prudsys.pdm.Adapters.PmmlVersion20.MiningField;
import com.prudsys.pdm.Adapters.PmmlVersion20.MiningSchema;
import com.prudsys.pdm.Models.AssociationRules.AssociationRulesSettings;
import com.prudsys.pdm.Models.Clustering.ClusteringSettings;
import com.prudsys.pdm.Models.CustomerSeq.CustomerSequentialSettings;
import com.prudsys.pdm.Models.Sequential.SequentialSettings;
import com.prudsys.pdm.Models.Supervised.SupervisedMiningSettings;
import com.prudsys.pdm.Transform.MiningTransformationActivity;
import com.prudsys.pdm.Transform.MiningTransformationFactory;
import com.prudsys.pdm.Transform.MiningTransformationStep;
import com.prudsys.pdm.Transform.MultipleToMultiple.RemoveAttributes;
import com.prudsys.pdm.Transform.OneToOne.ReplaceMissingAttributeValue;
import com.prudsys.pdm.Transform.OneToOne.TreatOutlierAttributeValue;
import com.prudsys.pdm.Transform.Special.ReplaceMissingValueStream;
import com.prudsys.pdm.Transform.Special.TreatOutlierValueStream;
/**
* ApplicationInputSpecification is a collection of ApplicationAttributes that
* drive the MiningModel. <p>
*
* From CWM Data Mining. <p>
*
* Superclasses:
* <ul>
* <li> Class
* </ul>
* Contained Elements:
* <ul>
* <li> ApplicationAttribute
* </ul>
* References:
* <ul>
* <li> <i>inputAttribute</i>: ApplicationAttributes owned by the
* ApplicationInputSpecification. <br>
* - class: ApplicationAttribute <br>
* - defined by: InputSpecOwnsAttributes::inputAttribute <br>
* - multiplicity: one or more <br>
* <li> <i>miningModel</i>: The MiningModel owning an ApplicationInputSpecification. <br>
* - class: MiningModel <br>
* - defined by: MiningModelOwnsInputSpecification::miningModel <br>
* - multiplicity: one or more <br>
* - inverse: MiningModel::inputSpec
* </ul>
*
* In addition, functionality from PMML was added.
* It corresponds to the PMML element MiningSchema.
*
* @see ApplicationAttribute
* @see com.prudsys.pdm.Adapters.PmmlVersion20.MiningSchema
*/
public class ApplicationInputSpecification extends com.prudsys.pdm.Cwm.Core.Class implements PmmlPresentable
{
// -----------------------------------------------------------------------
// Variables declarations
// -----------------------------------------------------------------------
/** Array of application attributes forming the input specification. */
private ApplicationAttribute inputAttribute[];
/** Reference to mining model. */
private MiningModel miningModel;
/** Target application attribute. Used for supervised models. */
private ApplicationAttribute targetApplicationAttribute = null;
// -----------------------------------------------------------------------
// Constructors
// -----------------------------------------------------------------------
/**
* Empty constructor.
*/
public ApplicationInputSpecification()
{
}
/**
* Constructs the application input specification from the
* meta data which contains the attribute information.
* Usage type of all attributes is set to SUPPLEMENTARY.
*
* @param metaData meta data containig the attribute info
*/
public ApplicationInputSpecification( MiningDataSpecification metaData )
{
int numberOfMiningAttributes = metaData.getAttributesNumber();
inputAttribute = new ApplicationAttribute[numberOfMiningAttributes];
for( int i = 0; i < numberOfMiningAttributes; i++ )
{
inputAttribute[i] = new ApplicationAttribute();
MiningAttribute attribute = metaData.getMiningAttribute( i );
inputAttribute[i].setName( attribute.getName() );
inputAttribute[i].setUsageType( new AttributeUsage( AttributeUsage.SUPPLEMENTARY ) );
if( attribute instanceof NumericAttribute )
{
inputAttribute[i].setAttributeType( new AttributeType( AttributeType.NUMERICAL ) );
}
else
{
inputAttribute[i].setAttributeType( new AttributeType( AttributeType.CATEGORICAL ) );
}
}
}
// -----------------------------------------------------------------------
// Getter and setter methods
// -----------------------------------------------------------------------
/**
* Get target application attribute required for supervised mining.
*
* @return target attribute
*/
public ApplicationAttribute getTargetApplicationAttribute()
{
return targetApplicationAttribute;
}
/**
* Sets new target attribute required for supervised mining.
*
* @param targetApplicationAttribute new target attribute
*/
public void setTargetApplicationAttribute(ApplicationAttribute targetApplicationAttribute)
{
this.targetApplicationAttribute = targetApplicationAttribute;
}
/**
* Returns array of all application attributes.
*
* @return all application attributes
*/
public ApplicationAttribute[] getInputAttribute()
{
return inputAttribute;
}
/**
* Sets array of all application attributes.
*
* @param inputAttribute array of all application attributes
*/
public void setInputAttribute(ApplicationAttribute[] inputAttribute)
{
this.inputAttribute = inputAttribute;
}
/**
* Returns application attribute of specified name.
*
* @param attName name of application attribute
* @return application attribute of specified name, null if not found
*/
public ApplicationAttribute getApplicationAttribute(String attName) {
if (inputAttribute == null) return null;
for (int i = 0; i < inputAttribute.length; i++)
if ( inputAttribute[i].getName().equals(attName) ) return inputAttribute[i];
return null;
}
/**
* Gets mining model that uses this application input specification.
*
* @return mining model
*/
public MiningModel getMiningModel()
{
return miningModel;
}
/**
* Sets mining model that uses this application input specification.
*
* @param miningModel mining model with this application input specification
*/
public void setMiningModel(MiningModel miningModel)
{
this.miningModel = miningModel;
}
// -----------------------------------------------------------------------
// Create AIS from mining settings
// -----------------------------------------------------------------------
/**
* Sets the parameter of application input specification
* with respect to the desired mining settings. <p>
*
* In particular, the following parameters are set for the
* following settings subclasses:
* <ul>
* <li> <i>SupervisedMiningSettings</i>: targetApplicationAttribute gets target attribute, target active
* <li> <i>ClusteringSettings</i>: clusterIdAttributeName gets ID attribute, ID supplementary
* <li> <i>AssociationRulesSettings</i>: itemId, transactionId active
* <li> <i>SequentialSettings</i>: itemId, transactionId, itemIndex active
* <li> <i>CustomerSequentialSettings</i>: itemId, customerId, transactionPosition activ
* </ul>
*
* For supervised mining settings and clustering settings, additionally the
* the attribute usage relation is checked for supplementary attributes.
*
* @param settings mining settings to be set
*/
public void initApplicationInputSpecification( MiningSettings settings )
{
// Supervised mining settings:
if( settings instanceof SupervisedMiningSettings )
{
int numberOfInputAttributes = inputAttribute.length;
for( int i = 0; i < numberOfInputAttributes; i++ )
{
if( ( inputAttribute[i].getName() ).equalsIgnoreCase( ((SupervisedMiningSettings)settings).getTarget().getName() ) )
{
targetApplicationAttribute = inputAttribute[i];
}
inputAttribute[i].setUsageType( new AttributeUsage( AttributeUsage.ACTIVE ) );
// New: Apply AttributeUsage for supplementary attributes:
AttributeUsageRelation attributeUsage = settings.getAttributeUsage( inputAttribute[i].getName() );
if (attributeUsage != null)
{
int usageType = attributeUsage.getUsageType().getType();
if ( usageType == AttributeUsage.SUPPLEMENTARY )
inputAttribute[i].getUsageType().setType(usageType);
}
}
}
else
{
// Clustering settings:
if( settings instanceof ClusteringSettings )
{
int numberOfInputAttributes = inputAttribute.length;
for( int i = 0; i < numberOfInputAttributes; i++ )
{
if( ( inputAttribute[i].getName() ).equalsIgnoreCase( ((ClusteringSettings)settings).getClusterIdAttributeName() ) )
{
inputAttribute[i].setUsageType( new AttributeUsage( AttributeUsage.SUPPLEMENTARY ) );
}
else {
inputAttribute[i].setUsageType( new AttributeUsage( AttributeUsage.ACTIVE ) );
}
// New: Apply AttributeUsage for supplementary attributes:
AttributeUsageRelation attributeUsage = settings.getAttributeUsage( inputAttribute[i].getName() );
if (attributeUsage != null)
{
int usageType = attributeUsage.getUsageType().getType();
if ( usageType == AttributeUsage.SUPPLEMENTARY )
inputAttribute[i].getUsageType().setType(usageType);
}
}
}
else
{
// Association rules settings:
if( settings instanceof AssociationRulesSettings )
{
int numberOfInputAttributes = inputAttribute.length;
for( int i = 0; i < numberOfInputAttributes; i++ )
{
if( ( inputAttribute[i].getName() ).equalsIgnoreCase( ((AssociationRulesSettings)settings).getItemId().getName() )
||
( inputAttribute[i].getName() ).equalsIgnoreCase( ((AssociationRulesSettings)settings).getTransactionId().getName() ) )
{
inputAttribute[i].setUsageType( new AttributeUsage( AttributeUsage.ACTIVE ) );
}
else
{
inputAttribute[i].setUsageType( new AttributeUsage( AttributeUsage.SUPPLEMENTARY ) );
}
}
targetApplicationAttribute = null;
}
else
{
// Sequential settings:
if( settings instanceof SequentialSettings )
{
int numberOfInputAttributes = inputAttribute.length;
for( int i = 0; i < numberOfInputAttributes; i++ )
{
if( ( inputAttribute[i].getName() ).equalsIgnoreCase( ((SequentialSettings)settings).getItemId().getName() )
||
( inputAttribute[i].getName() ).equalsIgnoreCase( ((SequentialSettings)settings).getItemIndex().getName() )
||
( inputAttribute[i].getName() ).equalsIgnoreCase( ((SequentialSettings)settings).getTransactionId().getName() ) )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -