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