ModelApplier node: Missing input: Model, but model should be there
Hello again,
Thanks for the quick response to my previous question about intermediate results. I've now added a ModelWriter node to save the model after processing.
I've run into another issue that I can't quite figure out. I think it's because I don't quite grasp how RM handles the stream of output objects that are passed from node to node during a process.
What I'm trying to do is:
1. Read in training data (from a SQL Server database)
2. Convert one numerical attribute (age) to a nominal one
3. Create a multilayer perceptron neural net model
4. Read in some testing data (from SQL Server)
5. Convert age to nominal
6. Apply the model to the training data
7. Look at the performance
My operator tree looks like:
DatabaseExampleSource
AttributeSubsetProcessing
---- Numeric 2 Polynominal
W-MultiLayerPerceptron
DatabaseExampleSource(2)
AttributeSubsetPreProcessing(2)
----Numeric 2 Polynominal
ModelApplier
RegressionPerformance
The problem is that the I'm getting an error on the ModelApplier node saying "Missing input: model" However, I added a breakpoint before the ModelApplier ndoe, and the model appears to exist, but the data table coming out of the AttributeSubetPreProcessing(2) seems to "mask" it somehow.
Confusingly, I can run the process to completion, and the model will in fact get applied, so the error doesn't seem to be causing a failure, it just generates an error message.
I tried adding an IOSelector node before the ModelApplier, with io_object=Model, thinking that the model might need to be the first object in the input queue. That just moved the same error message from the ModelApplier to the IOSelector.
If I take the age attribute out of my model, which eliminates the need for the AttributeSubsetProcessing node, then everything works fine, without error. So it seems that something about what that node is doing is causing the error message.
My hunch is that it has to do with how RM manages the input and output queues between nodes, but I don't quite understand why, and I didn't find a good explanation in the documentation. Any explanation or pointers would be greatly apprecated.
Thanks,
Keith