{
    "componentChunkName": "component---src-templates-docs-js",
    "path": "/projects/p1",
    "result": {"data":{"site":{"siteMetadata":{"title":"Linnaeus University","language":"en"}},"mdx":{"fields":{"id":"966cd779-e0c4-531a-98ee-a5f89ab82d9d","title":"P1 – Recommendation System","slug":"/projects/p1"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"P1 – Recommendation System\",\n  \"metaTitle\": \"2DV515 | P1\",\n  \"metaDescription\": \"metaDescription\",\n  \"order\": 2\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Hint = makeShortcode(\"Hint\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This is one of the pre-defined project ideas you can choose for your project.\"), mdx(\"h2\", null, \"Recommendation system for MovieLens\"), mdx(\"p\", null, \"Modify your recommendation system from Assignment 1 to use the small MovieLens dataset with 100 000 ratings. You can read about the dataset \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://grouplens.org/datasets/movielens/\"\n  }, \"here\"), \".\"), mdx(\"p\", null, \"You are only required to use user-based collaborative filtering and not item-based (since pre-calculating matching movies will take a very long time).\"), mdx(\"p\", null, \"The dataset can be downloaded on the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"../assignments/datasets\"\n  }, \"Datasets\"), \" page.\"), mdx(Hint, {\n    type: \"warning\",\n    mdxType: \"Hint\"\n  }, mdx(\"b\", null, \"Note!\"), \" A problem with the calculations used in Assignment 1 is that if many users have rated many movies, as in the MovieLens dataset, many movies will get the max recommendation score of 5. To make better recommendations, you can do some modifications:\", mdx(\"ul\", null, mdx(\"li\", null, \"Only include users with the similarity of more than 0 in the calculations.\"), mdx(\"li\", null, \"Exclude all movies with very few ratings.\"))), mdx(\"h2\", null, \"Grading\"), mdx(\"table\", null, mdx(\"tr\", null, mdx(\"th\", null, \"Grade\"), mdx(\"th\", null, \"Requirements\")), mdx(\"tr\", null, mdx(\"td\", null, \"E\"), mdx(\"td\", null, mdx(\"ul\", null, mdx(\"li\", null, \"Use the same Recommendation System you developed for Assignment 1 with the MovieLens dataset.\"), mdx(\"li\", null, \"Add code for storing the number of ratings each movie has.\"), mdx(\"li\", null, \"Modify the score calculation to exclude movies with few ratings.\"), mdx(\"li\", null, \"It shall be possible to set the min number of ratings in the client GUI.\")))), mdx(\"tr\", null, mdx(\"td\", null, \"C-D\"), mdx(\"td\", null, mdx(\"ul\", null, mdx(\"li\", null, \"If you set min number of ratings to 1 you will get lots of results with max rating of 5.\"), mdx(\"li\", null, \"To improve the results you shall:\", mdx(\"ol\", null, mdx(\"li\", null, \"round the score to four decimals\"), mdx(\"li\", null, \"sort the result list by score (highest first)\"), mdx(\"li\", null, \"if two results have equal score, sort by number of ratings (highest first).\"))), mdx(\"li\", null, \"You must show number of ratings for each movie in the result list in your client GUI.\")))), mdx(\"tr\", null, mdx(\"td\", null, \"A-B\"), mdx(\"td\", null, mdx(\"ul\", null, mdx(\"li\", null, \"Measure the time it takes to find top five recommended movies for a user (try for example user 256).\"), mdx(\"li\", null, \"Build a cache for similarity calculations to avoid calculating similarity between two users more than once.\"), mdx(\"li\", null, \"How much does the cache improve execution times when finding top five recommended movies?\"))))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#recommendation-system-for-movielens","title":"Recommendation system for MovieLens"},{"url":"#grading","title":"Grading"}]},"parent":{"relativePath":"projects/p1.md"},"frontmatter":{"metaTitle":"2DV515 | P1","metaDescription":"metaDescription"}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/","title":"Web Intelligence (2DV515)"}}},{"node":{"fields":{"slug":"/_playground/_todo-examination","title":"TODO: Examination"}}},{"node":{"fields":{"slug":"/_playground","title":"Playground"}}},{"node":{"fields":{"slug":"/assignments/a1","title":"A1 - Recommendation System"}}},{"node":{"fields":{"slug":"/_playground/expectations","title":"Expectations"}}},{"node":{"fields":{"slug":"/assignments/a2","title":"A2 - Clustering"}}},{"node":{"fields":{"slug":"/assignments/a3","title":"A3 - Search Engine"}}},{"node":{"fields":{"slug":"/assignments/a4","title":"A4 - Machine Learning"}}},{"node":{"fields":{"slug":"/assignments","title":"Assignments"}}},{"node":{"fields":{"slug":"/assignments/datasets","title":"Datasets"}}},{"node":{"fields":{"slug":"/lectures","title":"Lectures"}}},{"node":{"fields":{"slug":"/lectures/lecture01","title":"L01 - Introduction"}}},{"node":{"fields":{"slug":"/lectures/lecture02","title":"L02 - Recommendation Systems"}}},{"node":{"fields":{"slug":"/lectures/lecture03","title":"L03 - Clustering"}}},{"node":{"fields":{"slug":"/lectures/lecture04","title":"L04 - Search Engines"}}},{"node":{"fields":{"slug":"/lectures/lecture05","title":"L05 - What is Machine Learning?"}}},{"node":{"fields":{"slug":"/lectures/lecture07","title":"L07 - Naïve Bayes"}}},{"node":{"fields":{"slug":"/projects","title":"Projects"}}},{"node":{"fields":{"slug":"/projects/p2","title":"P2 – Clustering"}}},{"node":{"fields":{"slug":"/projects/p1","title":"P1 – Recommendation System"}}},{"node":{"fields":{"slug":"/projects/p3","title":"P3 – Text Classification"}}},{"node":{"fields":{"slug":"/projects/p4","title":"P4 – Web scraping"}}},{"node":{"fields":{"slug":"/projects/project","title":"Project"}}},{"node":{"fields":{"slug":"/sandbox/code","title":"Code"}}},{"node":{"fields":{"slug":"/sandbox/basic-elements","title":"Basic elements"}}},{"node":{"fields":{"slug":"/sandbox/exercise","title":"Exercises"}}},{"node":{"fields":{"slug":"/sandbox/frontmatter","title":"Frontmatter"}}},{"node":{"fields":{"slug":"/sandbox/hint","title":"Hint"}}},{"node":{"fields":{"slug":"/sandbox","title":"Sandbox"}}},{"node":{"fields":{"slug":"/sandbox/markdown-import","title":"Imported markdown"}}},{"node":{"fields":{"slug":"/sandbox/mermaid","title":"Mermaid"}}},{"node":{"fields":{"slug":"/lectures/lecture06","title":"L06 - Data and Learning"}}},{"node":{"fields":{"slug":"/sandbox/tabs","title":"Tabs"}}},{"node":{"fields":{"slug":"/sandbox/youtube","title":"YouTube"}}},{"node":{"fields":{"slug":"/study-guide/communication","title":"Communication"}}},{"node":{"fields":{"slug":"/study-guide/deadlines-and-submissions","title":"Deadlines and Submissions"}}},{"node":{"fields":{"slug":"/study-guide/grading","title":"Grading"}}},{"node":{"fields":{"slug":"/study-guide/registration","title":"Registration"}}},{"node":{"fields":{"slug":"/study-guide/welcome","title":"🎉 Welcome"}}},{"node":{"fields":{"slug":"/projects/_DEPRECATED/project","title":"Project"}}},{"node":{"fields":{"slug":"/study-guide/guides/git-and-multiple-computers","title":"Git and multiple computers"}}},{"node":{"fields":{"slug":"/study-guide/guides/an-introduction-to-git","title":"An introduction to Git"}}},{"node":{"fields":{"slug":"/study-guide/guides/git-commit-best-practices","title":"Git commit best practices"}}},{"node":{"fields":{"slug":"/study-guide/guides","title":"Guides"}}},{"node":{"fields":{"slug":"/study-guide/guides/set-up-git","title":"Set up Git"}}},{"node":{"fields":{"slug":"/study-guide/guides/multiple-git-user-configs","title":"Multiple Git user configs"}}},{"node":{"fields":{"slug":"/study-guide/instructors","title":"Instructors"}}},{"node":{"fields":{"slug":"/study-guide/guides/submit-an-assignment-as-a-merge-request","title":"Submit an assignment as a merge request"}}},{"node":{"fields":{"slug":"/study-guide/guides/troubleshooting-ssh","title":"Troubleshooting SSH"}}},{"node":{"fields":{"slug":"/study-guide/guides/this-happens-with-git-commands","title":"This happens with Git commands"}}},{"node":{"fields":{"slug":"/study-guide/readings","title":"Readings"}}},{"node":{"fields":{"slug":"/study-guide","title":"Study Guide"}}}]}},"pageContext":{"id":"966cd779-e0c4-531a-98ee-a5f89ab82d9d"}},
    "staticQueryHashes": ["253607798","3706406642","710574383"]}