COSC 288: Introduction to Machine Learning

Project 4
Spring 2016

Due: Fri, Apr 15 @ 11:59 P.M.
10 points

Building upon your implementations for p1, p2, and p3, implement Zurada's backpropagation training algorithm for multi-layer feed-forward neural networks. Your implementation should also include a routine to convert nominal attributes into a binary or linear encoding scheme.

The implementation must be general in the sense that it must work for all data sets with nominal attributes and nominal class labels. Our convention is that the last attribute of the attribute declarations is the class label. The overall logic of the implementation must be the same as that for the previous project.

Here are some new data sets:

Implement your neural network a single executable. No windows. No menus. No prompts. Just do it.

As we have discussed in class, training neural networks is computationally expensive. Develop your implementation by training and testing on the small data sets, such as bikes and xor, until you are confident that everything seems to be working. I would recommend using the hold-out method for larger data sets, such as votes and mushroom. I would not recommend using k-fold cross-validation, although if you're using your own laptop, and you want to convert electricity to heat, then go ahead.

If you're using cs-class, please be mindful of other users on the system. If you want to kick off a big training job in the background and go to the Tombs, please be nice and use nice. For example:

cs-class$ nice backprop -t cats-and-dogs.mff < /dev/null >| output &
This command runs backprop with a nice priority. The fancy redirects prevent ssh from hanging when you log out and write the output of backprop to the file named output. The final ampersand puts the job in to the background, where it will run for a long time. At this point, you can log out and head over the Tombs.

When you reconnect to cs-class, you can check to see if the job is still running by looking for the name of your executable —in this case, backprop—in the list of active processes:

cs-class$ ps -ef | grep backprop
maloofm  16205     1 98 15:37 ?        00:00:13 backprop -t cats-and-dogs.mff
maloofm  17920 16238  0 15:45 pts/5    00:00:00 grep backprop
You can examine the contents of the output file by typing:
cs-class$ more output
If for some reason your implementation of backprop seems like it will never terminate, please do not leave it running. To kill a job, look in the list of active processes for the job's ID:
cs-class$ ps -ef | grep backprop
maloofm  16205     1 98 15:37 ?        00:00:13 backprop -t cats-and-dogs.mff
maloofm  17920 16238  0 15:45 pts/5    00:00:00 grep backprop
In this case, it is 16205. Use the kill command to kill the process. It should no longer appear in the process list.
cs-class$ kill 16205
cs-class$ ps -ef | grep backprop
maloofm  19129 16238  0 15:55 pts/5    00:00:00 grep backprop

Instructions for Submission

In the header comments in at least the main file of your project, provide the following information:
//
// Name
// E-mail Address
// Platform: Windows, MacOS, Linux, Solaris, etc.
// Language/Environment: gcc, g++, java, g77, ruby, python.
//
// In accordance with the class policies and Georgetown's Honor Code,
// I certify that, with the exceptions of the class resources and those
// items noted below, I have neither given nor received any assistance
// on this project.
//

When you are ready to submit your program for grading, create a zip file of the directory containing only your project's source and build instructions, and upload it to Blackboard.

Copyright © 2019 Mark Maloof. All Rights Reserved. This material may not be published, broadcast, rewritten, or redistributed.