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

📄 applicationinputspecification.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 *    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 + -