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

📄 linearregressionoperator.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
字号:
package eti.bi.alphaminer.patch.standard.operation.operator;


import java.util.Vector;
import com.prudsys.pdm.Core.MiningException;
import eti.bi.alphaminer.operation.operator.ModelOperator;
import eti.bi.alphaminer.vo.IOperatorNode;
import eti.bi.exception.AppException;
import eti.bi.exception.SysException;
import com.prudsys.pdm.Core.MiningAlgorithm;
import com.prudsys.pdm.Core.MiningAlgorithmSpecification;
import com.prudsys.pdm.Core.MiningAttribute;
import com.prudsys.pdm.Core.MiningModel;
import com.prudsys.pdm.Core.NumericAttribute;
import com.prudsys.pdm.Models.Supervised.SupervisedMiningSettings;
import com.prudsys.pdm.Utils.GeneralUtils;
import eti.bi.alphaminer.core.handler.ICaseHandler;
import eti.bi.alphaminer.operation.operator.INodeInfo;
import eti.bi.alphaminer.operation.operator.Operator;
import eti.bi.common.Locale.Resource;
import eti.bi.alphaminer.vo.BIData;
import eti.bi.alphaminer.vo.BIModel;
import eti.bi.alphaminer.vo.BIObject;
import eti.bi.alphaminer.vo.IBIData;
import eti.bi.alphaminer.vo.IBIModel;

public class LinearRegressionOperator extends ModelOperator{
	
	/* Parameter name for MiningSettingSpecification and MiningAlgorithm */
	public static final String ALGORITHM_NAME = "LinearRegression (Weka)";
	private static String MAP_WEKA_CLASS_PARAMETERS = "wekaClassParameters";
	
	/* Parameter name for LinearRegression Operator in BIML */
	
	
	public static String ATTRIBUTE_SELECTION_METHOD = "attribute selection method";
	public static String ELIMINATE_COLINEAR_ATTRIBUTES = "eliminate colinear attributes";
	public static String RIDGE = "ridge";
	public static String DEBUG = "debug";
	
	/* Default parameter value for LinearRegression Operator */

	public static String DEFAULT_ATTRIBUTE_SELECTION_METHOD = "0";
	public static String DEFAULT_ELIMINATE_COLINEAR_ATTRIBUTES= "";
	public static String DEFAULT_RIDGE = String.valueOf(0.00000001);
	public static String DEFAULT_DEBUG = "-D";
	
	public LinearRegressionOperator(String a_CaseID, INodeInfo aNodeInfo,
			ICaseHandler aCaseHandler) {
		super(a_CaseID, aNodeInfo, aCaseHandler);
		m_DefaultModelName = "LinearRegression model";
		//2006/07/29 Xiaojun Chen
		PredictionAssessmentOperator.registerParentsDefinitionID(aNodeInfo.getDefinitionID());
		ScoreOperator.registerParentsDefinitionID(aNodeInfo.getDefinitionID());
	}
	
	private static final long serialVersionUID = 965485384848913438L;

	
	@Override
	public void setNodeID(String a_NodeID) {
		setLabel(getDescription() + " [" + a_NodeID + "]");
		setDefaultModelName("LinearRegression_" + a_NodeID);
		super.setNodeID(a_NodeID);
	}

	public void setDescription(String a_Description) {
		m_Description = a_Description;
		setLabel(m_Description + " [" + m_NodeID + "]");
		setDefaultModelName("LinearRegression_" + m_NodeID);
	}

	@SuppressWarnings("unchecked")
	public void execute(IOperatorNode a_OperatorNode, Vector a_Parents)
			throws SysException, AppException, MiningException {
		/* Get parameter from user input */
		
		String ridge = (String) a_OperatorNode.getParameterValue(RIDGE);
		if (ridge == null) {
			ridge = DEFAULT_RIDGE;
		}
		
		String debug = (String) a_OperatorNode.getParameterValue(DEBUG);
		if (debug == null) {
			debug = DEFAULT_DEBUG;
		}
		
		
		String attributeSelection = (String) a_OperatorNode.getParameterValue(ATTRIBUTE_SELECTION_METHOD);
		if (attributeSelection == null) {
			attributeSelection = DEFAULT_ATTRIBUTE_SELECTION_METHOD;
		}
	
		String eliminateColinearAttribute = (String) a_OperatorNode.getParameterValue(ELIMINATE_COLINEAR_ATTRIBUTES);
		if (eliminateColinearAttribute == null) {
			eliminateColinearAttribute = DEFAULT_ELIMINATE_COLINEAR_ATTRIBUTES;
		}
		String linearRegressionParameters = debug+ " -S "+ attributeSelection + " "+ eliminateColinearAttribute + " -R " + ridge;
				 
		/* Get input bi object from parent node */
		Operator parentOp = (Operator) a_Parents.elementAt(0);
		setInputBIObject(parentOp.getOutputBIObject());
		IBIData aInputBIData = getInputBIObject().getBIData();
		aInputBIData.getMiningStoredData().reset();
		if (!aInputBIData.hasResult()) {
			throw new SysException("No data inputed.");
		}
		
		/* Prepare output data model */
		BIData aOutputBIData = new BIData(getCaseID(), getNodeID());
		aOutputBIData.setTargetAttribute(aInputBIData.getTargetAttribute());
		aOutputBIData.setTransformActionHistory(aInputBIData
				.getTransformActionHistory());
		aOutputBIData.setTargetAttribute(aInputBIData.getTargetAttribute());
		aOutputBIData.setMiningStoredData(aInputBIData.getMiningStoredData());
		BIModel aOutputBIModel = new BIModel(getCaseID(), getNodeID(),
				IBIModel.TYPE_CLASSIFIER);
		
		/* Check attributes */
		MiningAttribute targetAttribute = aInputBIData.getTargetAttribute();
		aOutputBIModel.setTargetAttribute(targetAttribute);
		if (targetAttribute==null)
		{
			m_SystemMessageHandler.appendMessage("Categorical Target attribute is missing. Please add target attribute by using Data Set Attribute Node.");
			throw new AppException("Categorical Target attribute is missing. Please add target attribute by using Data Set Attribute Node.");
		}else if (!(targetAttribute instanceof NumericAttribute))
		{
			m_SystemMessageHandler.appendMessage("Attribute \""+targetAttribute.getName() + "\" is not Numeric.");
			throw new AppException("Attribute \""+targetAttribute.getName() + "\" is not Numberic.");
		}
		
		
		/* Create MiningSettings object and assign metadata */
		SupervisedMiningSettings miningSettings = new SupervisedMiningSettings();
		miningSettings.setDataSpecification(aInputBIData.getMetaData());
		
		/* Assign settings */
		miningSettings.setTarget(targetAttribute);
		try {
			miningSettings.verifySettings();
		} catch (Exception e) {
			m_SystemMessageHandler.appendMessage(
					"Invalid parameters in building LinearRegression model.");
			throw new AppException(
					"Invalid parameters in building the LinearRegression model.");
		}
		
		/* Set MiningSettings */
		aOutputBIModel.setMiningSettings(miningSettings);
		
		/* Get default mining algorithm specification from 'algorithms.xml' */
		MiningAlgorithmSpecification miningAlgorithmSpecification = MiningAlgorithmSpecification
				.getMiningAlgorithmSpecification(ALGORITHM_NAME, getNodeInfo());
		if (miningAlgorithmSpecification == null)
			throw new MiningException("Can't find LinearRegression classification method.");
		
		/* Get class name from algorithms specification */
		String className = miningAlgorithmSpecification.getClassname();
		if (className == null)
			throw new MiningException("className attribute expected.");
		
		/* Set MiningAlgorithmSpecification */
		miningAlgorithmSpecification.setMAPValue(MAP_WEKA_CLASS_PARAMETERS,
				linearRegressionParameters);// 
		aOutputBIModel.setMiningAlgorithmSpecification(miningAlgorithmSpecification);
		displayMiningAlgSpecParameters(miningAlgorithmSpecification);
		
		/* Set and display mining parameters */
		GeneralUtils
				.displayMiningAlgSpecParameters(miningAlgorithmSpecification);
		/* Create algorithm object with default values */
		MiningAlgorithm algorithm = GeneralUtils
				.createMiningAlgorithmInstance(className, this.getClass().getClassLoader());
		algorithm.setMiningInputStream(aInputBIData.getMiningStoredData());
		algorithm.setMiningSettings(miningSettings);
		algorithm.setMiningAlgorithmSpecification(miningAlgorithmSpecification);
		try {
			algorithm.verify();
		} catch (IllegalArgumentException e) {
			throw new MiningException(e.getMessage());
		}
		MiningModel model = algorithm.buildModel();
		m_SystemMessageHandler.appendMessage( Resource
				.srcStr("calculationtime")
				+ " [s]: "
				+ algorithm.getTimeSpentToBuildModel()
				+ Resource.srcStr("ms"));
		m_SystemMessageHandler.nextLine();
		aOutputBIModel.setMiningModel(model);
		aOutputBIModel.setModelName(m_DefaultModelName);
		m_OutputBIObject.setBIData(aOutputBIData);
		m_OutputBIObject.setBIModel(aOutputBIModel);
		
		//a_OperatorNode.setParameterValue("Temporary model", aOutputBIModel.getTempBIModelPath());
		//aOutputBIModel.writeTempBIModel();
	}

	/**
	 * Test if the SMO Operator contains any results.
	 * 
	 * @return true if SMO Operator has result; false otherwise.
	 */
	/*
	 * public boolean hasResult() throws SysException { // TODO Auto-generated
	 * method stub return false; }
	 */
	public boolean hasResult() throws SysException {
		if (m_OutputBIObject != null) {
			return (m_OutputBIObject.hasResult(BIObject.DATA) && m_OutputBIObject
					.hasResult(BIObject.MODEL));
		} else {
			return false;
		}
	}

	
}

⌨️ 快捷键说明

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