Description
In this project you will implement a Hopfield network and use it to recommend movies.
The project may be completed individually, or in a group of no more than three students.
Platforms
The platform requirements for this project are the same as for Project 1. Unlike Project 5, this project will not require a GPU (and will not benefit from a GPU unless you use a library that can make use of a GPU).
Libraries and Code
You may use any available Python libraries, as long as the network implementation is your own.
Code from A Whirlwind Tour of Python and from the library documentation may be reused. All other code and the results of experiments must be your own original work or the original work of other members of your team.
Dataset
Download the latest small MovieLens Dataset. This data is provided in CSV format, and will need to be converted into a format that can be used with your code.
Experiments
Run the following experiments in a Jupyter notebook, performing each action in a code cell and answering each question in a Markdown cell.
- Use the contents of ratings.csv to create a dataset for your network. There should be a feature vector for each user, with each feature corresponding to a movie. Encode movies that the user has rated 3.0 or above as +1, and other movies as -1.
- Set aside 10% of your dataset for testing. How many users are there in the training set? What is the storage capacity of the network? Is the network likely to be able to store the dataset?
- Construct a Hopfield network for your dataset and train it on your training set.
Hint: You may want to take a look at the pseudocode on pp. 66-67 of Artificial Intelligence Engines.
What accuracy does your trained network achieve?
- Determine your network’s accuracy on the test set. How well is the network performing?
- Choose a few higher-performing examples from the test set, then use movies.csv to determine which movies those users liked.
Which other movies did the network predict that those users might like? Do the recommendations seem reasonable?
- Construct a feature vector for yourself, choosing several movies that you’ve seen and liked. (Do not choose all movies that you have seen — leave room for recommendations.) What other movies does the network recommend for you? How many of the recommended movies have you actually seen? Were the recommendations accurate?
Submission
A Markdown cell at the top of the notebook should include project summary information as described in the Syllabus for README files.
Since you may be actively editing and making changes to the code cells in your notebook, be certain that each of your code cells still runs correctly before submission. You may wish to do this by selecting Run All from the drop-down menu bar.
Submit your Jupyter .ipynb notebook file through Canvas before class on the due date.
If the assignment is completed by a team, only one submission is required. Be certain to identify the names of all students on your team at the top of the notebook. See the following sections of the Canvas documentation for instructions on group submission: