A music recommendation system using fuzzy logic and Last.fm tags
Running the programs
- Download & extract the dataset
- run
python preprocess/split_tsv_per_user.py <path-to-tsv-file>
- run
run_all.sh <path-to-split/-directory>
and follow the instructions - Evaluation scripts are in
eval/
, data used in the report can be found inpaper_data
FLS/
contains a basic implemenation of fuzzification, which we're not using. It's just a try-out, and can be disregarded
Dataset:
Useful links:
- Last.fm API in Python: pylast
- Last.fm API documentation: last.fm/api
- cmeans clustering(from scikit-fuzzy)
ishibuchi classification maybe?
Note that the Last.fm API is veeery slow, so be doing the preprocessing yourself would take a lot of time It'd probably be wise to work with configuration files in the future..also the code could be cleaned up a whole bunch
Defuzzification (and returning albums based on clusters of tags)
- Get an album from other user in the same cluster(collaborative) - but then why cluster and not just lookup the closest user?
- Use the most frequent tag(s) with tag.getTopAlbums. Will be very prone to music coming from the head of popularity
- Something with difference to closest cluster(weighted in case of fuzzy clusters)
The .api_key file should look like a json file:
{
"application_name": "Fuzzy Logic Music Recommendation",
"key": <GET FROM LAST.FM>,
"shared_secret": <GET FROM LAST.FM>,
"username": <INSERT USERNAME HERE>,
"password": <INSERT PASSWORD HERE>
}