Use of nominal values as inputs to network
Hi I am a new user so apologies if this is a question that has been asked a number of times already or has an obvious answer but I was wondering if anyone could point me towards documentation for the creation of nominal inputs? I understand the use of the class library for nominal outputs but I haven't yet noticed an obvious way to use nominal inputs (eg one of n categories).
If anyone could point me in the right direction I'd be very grateful,
Paul




Labels as inputs perhaps is my question!
I have just realised that the question I am really trying to ask is can I use inputs/outputs which are labels like "young", not text strings parseable as numbers (eg 1.0). I think that is really what I am trying to ask since I can't load data from CSV files which is/includes labelled data (get a parse exception). I had wrongly thought that the nominal inputs/outputs would have handled that but as I realise now it doesn't appear so. Will it be a future feature perhaps? I guess for data in a format which includeds labeled items within sets I would have to pre-process first into a format parseable as a number?
Thanks, Paul
Additional Information
Thanks for the pointer! I am still a little unsure in regards to the input fields to the DataNormalization class. I have been trying to use the InputFieldCSV class. As I understand I would need to use the addInputField() method to add the input fields to my DataNormalization object. These need to be of InputField type, but there don't appear to be any classes in the org.encog.normalize.input package which could be used from a CSV file of nominal data? I get parse exceptions using the InputFieldCSV class for the input fields, when it can't parse a (nominal) text value into a double, so I may be approaching this from the wrong angle. From the OutputField side I get what needs to be done, but it is just the input side i seem to be struggling with! And there doesn't appear to be a way to use the OutputOneof or OutputEquilateral as input fields, if you get me. I am probably just going about this the wrong way!
For instance:
DataNormalization norm = new DataNormalization();
norm.addInputField(age = new InputFieldCSV(true,ContactLenses.BALANCE_FILE,0));
...
results in:
Exception in thread "main" org.encog.util.csv.CSVError: java.text.ParseException: Unparseable number: "young"
Paul
Additional information
As an example, say I had a dataset with the following nominal attributes (from the UCI repository car evaluation set -
buying: vhigh, high, med, low.
maint: vhigh, high, med, low.
doors: 2, 3, 4, 5more.
persons: 2, 4, more.
lug_boot: small, med, big.
safety: low, med, high.
And i wanted to train a network using these nominal values, how could I use the normalization features of encog to create these "one of n" style nominal inputs? I suppose it is something similar to the OutputOneOf class, but rather for inputs rather than the target classification output. Thanks for listening :)
A matter of perspective
Encog's built in normalization supports one-of and equilateral. You would most likely use the class OutputEquilateral. This is labeled as an "output" field. But that is from the perspective of the normalization classes. Normalization takes raw data as the input and outputs normalized numbers that become BOTH the input and output to the neural network. So you would normalize your inputs just as you normalized outputs. Its all a matter of do they end up as input or ideal output.
The "ideal" property on the output fields determine if they are "neural network input" or "neural network output" (both of which are output as far as normalization is concerned). If you set ideal to true, then the field is output. If you set it to false, then it is input.