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

📄 scoreoperator.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		// set run time parameter value to the node object (It needs to be
		// stored in the BIML)
		//a_OperatorNode.setParameterValue("Temporary data", aOutputBIData.getTempBIDataPath());

		// write temp data
		//aOutputBIData.writeTempBIData();
	}

	private Operator findDataSetRecursively(Operator operator) {
		if(operator instanceof InputOperator) {
			return operator;
		}
		
		try {
			Vector parentOperators = m_CaseHandler.getParentOperators(m_CaseID, operator.getNodeID());
			if (parentOperators == null)
				return null;
			int size = parentOperators.size();
			for(int i=0;i<size;i++) {
				Operator parentOp = (Operator)parentOperators.elementAt(i);
				if(parentOp!=null) {
					if (parentOp instanceof InputOperator) {
						return parentOp;
					} else {
						Operator superOp = findDataSetRecursively(parentOp);
						if(superOp!=null) {
							return superOp;
						}
					}
				}
			}
			return null;
		} catch (SysException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}

	public Vector<String> getPredicted() {
		return m_Predicted;
	}

	public void clearPredicted() {
		m_Predicted = null;
	}

	@SuppressWarnings("unchecked")
	public void addPredicted(String predict) {
		if (m_Predicted == null)
			m_Predicted = new Vector<String>();

		if (predict == null)
			predict = "";
		m_Predicted.addElement(predict);
	}

	/**
	 * Return true if accept, otherwise, return false;
	 * @see eti.bi.alphaminer.ui.operator.Operator#acceptParent(Operator a_Operator) throws SysException
	 * */
	public boolean acceptParent(Operator a_Operator) throws SysException {
		if(a_Operator==null){
			return false;
		}
		
		if(!acceptAsParent(a_Operator)){
			if(!acceptParentDefinitionID(a_Operator.getOperatorDefinitionID())){
				return false;
			}
		}
		else if(a_Operator instanceof ModelOperator){
			if(!acceptParentDefinitionID(a_Operator.getOperatorDefinitionID())){
				return false;
			}
		}
		
		Vector parentOperators = getParentOperators();

		if (parentOperators == null) {
			throw new SysException("Invalid Parnet Operators.");
		}
		
		//TODO Only accept Decision Tree ,Logistic Regression ,NaiveBayes for modeling
		// Return true, if there is no parent
		if (parentOperators.size() == 0) {
			return true;
		} else {
			for (int i = 0; i < parentOperators.size(); i++) {
				Operator parentOperator = (Operator) parentOperators
						.elementAt(i);
				if ((parentOperator instanceof ModelOperator)
						&& (a_Operator instanceof ModelOperator)) {
					return false;
				} else if (((parentOperator instanceof InputOperator) || (parentOperator instanceof TransformOperator))
						&& ((a_Operator instanceof InputOperator) || (a_Operator instanceof TransformOperator))) {
					return false;
				}
			}
			return true;
		}
		
	}
	
	//2006/07/29 Xiaojun Chen add for
	//register a definitionID so as to make the ScoreOperator can accept this type of operator
	/**
	 * register a type of operator for ScoreOperator's parent
	 * @param aParentDefinitionID
	 * */
	public static void registerParentsDefinitionID(String aParentDefinitionID){
		if(acceptParentsDefinitionID.indexOf(aParentDefinitionID)<0){
			acceptParentsDefinitionID.add(aParentDefinitionID);
		}
	}
	
	//2006/07/29 Xiaojun Chen add for
	//decide if a type of operator can be accepted as ScoreOperator's parent
	/**
	 * return rtue if ScoreOperator can accept this type of operator as it's parent
	 * @param aParentDefinitionID
	 * */
	public static boolean acceptParentDefinitionID(String aParentDefinitionID){
		if(acceptParentsDefinitionID.indexOf(aParentDefinitionID)>-1){
			return true;
		}
		else{
			return false;
		}
	}
	
	public MiningStoredData score(MiningStoredData a_MiningStoredData,
			IBIModel a_BIModel) throws SysException, MiningException {
		// Built decision tree model
		// DecisionTreeMiningModel treeModel =
		// (DecisionTreeMiningModel)a_BIModel.getMiningModel();
		WekaSupervisedMiningModel wekaSupervisedModel = (WekaSupervisedMiningModel) a_BIModel
				.getMiningModel();

		// Settings of the built decision tree model
		// DecisionTreeSettings treeSettings =
		// (DecisionTreeSettings)a_BIModel.getMiningSettings();
		SupervisedMiningSettings miningSettings = (SupervisedMiningSettings) a_BIModel
				.getMiningSettings();

		// Target attribute of the deicsion tree model
		MiningAttribute targetAttribute = miningSettings.getTarget();

		// Prepare output mining stored data object
		MiningStoredData outputMiningStoredData = new MiningStoredData();

		// Prepare predicted attribute
		MiningAttribute predictedAttribute = null;
		try {
			predictedAttribute = (MiningAttribute) targetAttribute.clone();
			predictedAttribute
					.setName("Predicted_" + targetAttribute.getName());
		} catch (CloneNotSupportedException e) {
			throw new SysException(
					"System Error: Cannot clone MiningAttribute object.");
		}
		try {
			// reset the data to make point to the first row
			a_MiningStoredData.reset();
		} catch (MiningException e) {
			throw new SysException("Fail in reseting the scoring data", e);
		}

		// outputMiningStoredData.setMetaData(a_MiningStoredData.getMetaData());
		// outputMiningStoredData.getMetaData().addMiningAttribute(predictAttribute);

		// Create add transformation:
		AddAttribute addAttribute = new AddAttribute();
		addAttribute.setNewAttribute(predictedAttribute);
		MiningTransformationFactory mtf = new MiningTransformationFactory();
		mtf.addMultipleToMultipleMapping(addAttribute);
		MiningTransformationStep mts = mtf.createMiningTransformationStep();
		MiningDataSpecification outputMetaData = outputMiningStoredData
				.getMetaData();
		try {
			outputMetaData = mts.transform(a_MiningStoredData.getMetaData());
			outputMiningStoredData.setMetaData(outputMetaData);

			int predictedIndex = outputMetaData
					.getAttributeIndex(predictedAttribute);

			// <<Frank J. Xu, 17/03/2005
			// Construct wekaInsances to score data.
			Object wekaInstances = null;
			int nModelTargetAttrIndex = -1;
			try {
				wekaInstances = WekaCoreAdapter
						.PDMMiningInputStream2WekaInstances_Simple(a_MiningStoredData);
				WekaClassifier wekaClassifier = (WekaClassifier) wekaSupervisedModel
						.getClassifier();
				Instances instances = (Instances) wekaClassifier
						.getWekaInstancesofClassifier();
				nModelTargetAttrIndex = instances.classIndex();
				((Instances) wekaInstances).setScoringDataClassIndex(instances
						.classIndex());
			} catch (Exception e) {
				e.printStackTrace();
				throw new SysException("Fail in transforming the scoring data.");
			}
			;
			// Frank J. Xu, 17/03/2005>>

			while (a_MiningStoredData.next()) {
				MiningVector vector = a_MiningStoredData.read();
				MiningVector outputVector = mts.transform(vector);
				// <<17/03/2005, Frank. J. Xu
				// double predictedValue =
				// wekaSupervisedModel.deployModelFunction(vector);
				MiningDataSpecification metaData = vector.getMetaData();
				MiningVector scoreVector;
				if (null == metaData.getMiningAttribute(targetAttribute
						.getName())) {
					double[] oldVals = vector.getValues();
					double[] newVals = new double[oldVals.length + 1];
					MiningAttribute[] oldAttrs = metaData.getAttributesArray();
					MiningAttribute[] newAttrs = new MiningAttribute[oldAttrs.length + 1];

					System.arraycopy(oldVals, 0, newVals, 0,
							nModelTargetAttrIndex);
					System.arraycopy(oldAttrs, 0, newAttrs, 0,
							nModelTargetAttrIndex);
					newAttrs[nModelTargetAttrIndex] = targetAttribute;

					for (int i = nModelTargetAttrIndex; i < oldVals.length; i++) {
						newVals[i + 1] = oldVals[i];
						newAttrs[i + 1] = oldAttrs[i];
					}

					scoreVector = new MiningVector(newVals);
				} else {
					scoreVector = vector;
				}
				double predictedValue = wekaSupervisedModel
						.deployModelFunction(scoreVector, wekaInstances);
				// 17/03/2005, Frank. J. Xu>>
				outputVector.setValue(predictedIndex, predictedValue);
				outputMiningStoredData.add(outputVector);
			}
		} catch (MiningException me) {
			// throw new SysException("Fail in transforming the scoring
			// data",me);
			throw new SysException("Fail in transforming the scoring data");
		}

		return outputMiningStoredData;
	}
}

⌨️ 快捷键说明

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