CSCI 335 - Programming Project #6

Fall 2011

Due: Tuesday, October 11, beginning of class


  • You may continue to work in teams of two for this assignment.
  • Download a modified drawing program. I recommend putting the files in a different project from the previous assignments, as they are similar but not the same.
  • Complete the implementation of handwriting.kohonen.SelfOrgMap.java. It should implement a Kohonen Self-Organizing Map.
  • Implement the static method SOMClassifier.inputsFor(). This method will encode Drawing objects as inputs to a SelfOrgMap object.
  • Implement a class that extends the abstract class SOMClassifier, overriding all of the abstract methods. To do this, you will need to develop an algorithm that generates a label from the output of a self-organizing map. The self-orgainizing map should be trained by your constructor.
  • Try out your implementation as follows:
  • Develop a second algorithm for determining a classification from the output of the self-organizing map. Ideally, this will incorporate lessons you have learned from your first set of experiments. Run all of your previous tests from the first set of experiments using this classifier.
  • Choose ONE of the following variations for an additional alternative. You may choose both for extra credit:
  • Helpful hints:
    1. Begin by determining an ideal number of iterations:
      • With your first classifier, run the 8-character set with five different numbers of iterations
      • Select one of these values for the remaining experiments
    2. Next, test randomization:
      • Again using your first classifier and the 8-character set, test the non-randomized vs. randomized sequencing of the examples
      • Select either randomized or non-randomized for your remaining experiments
    3. Next, test data set sizes and output map sizes:
      • For each of your data sets (2-8 characters):
        • Test your first classifier with at least three different output map sizes
      • Analyze the following in this context:
        • What impact does varying the character set size affect performance?
        • What impact does varying the output map size affect performance?
        • Is there any relationship between these effects? (For example, is the small output map adequate for a small character set but problematic for a large set?)
    4. Next, re-run the previous experiment set with your second classifier
      • That is, test data set sizes and output map sizes
      • Select one number of iterations
      • Select whether or not to randomize
    5. Finally, check the dilation or Gaussian:
      • Select one output map size
      • Try both classifiers
      • Try all data sets
  • Write a report in which you analyze the following:
  • Submit using Sauron