From 3af63cb20b810480c34c66ca4102f02958e57c15 Mon Sep 17 00:00:00 2001 From: feger <marc.feger@hhu.de> Date: Thu, 30 Jan 2020 17:07:39 +0100 Subject: [PATCH] Refactor --- recommender.tex | 2 +- submission.pdf | Bin 454477 -> 454477 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/recommender.tex b/recommender.tex index 95c43ab..98106d8 100644 --- a/recommender.tex +++ b/recommender.tex @@ -11,7 +11,7 @@ In the following, the two main approaches of \textit{collaborative-filtering} an \textit{Content-based} \textit{recommender systems (CB)} work directly with \textit{feature vectors}. Such a \textit{feature vector} can, for example, represent a \textit{user profile}. In this case, this \textit{profile} contains informations about the \textit{user's preferences}, such as \textit{genres}, \textit{authors}, \textit{etc}. This is done by trying to create a \textit{model} of the \textit{user}, which best represents his preferences. The different \textit{learning algorithms} from the field of \textit{machine learning} are used to learn or create the \textit{models}. The most prominent \textit{algorithms} are: \textit{tf-idf}, \textit{bayesian learning}, \textit{Rocchio's algorithm} and \textit{neural networks} \citep{Lops11, Dacrema19, DeKa11}. Altogether the built and learned \textit{feature vectors} are compared with each other. Based on their closeness, similar \textit{features} can be used to generate \textit{missing ratings}. Figure \ref{fig:cb} shows a sketch of the general operation of \textit{content-based recommenders}. \subsection{Collaborative-Filtering} -Unlike the \textit{content-based recommender (CF)}, the \textit{collaborative-filtering recommender} not only considers individual \textit{users} and \textit{feature vectors}, but rather a \textit{like-minded neighborhood} of each \textit{user}. +Unlike the \textit{content-based recommender}, the \textit{collaborative-filtering recommender (CF)} not only considers individual \textit{users} and \textit{feature vectors}, but rather a \textit{like-minded neighborhood} of each \textit{user}. Missing \textit{user ratings} can be extracted by this \textit{neighbourhood} and \textit{networked} to form a whole. It is assumed that a \textit{missing rating} of the considered \textit{user} for an unknown \textit{item} $i$ will be similar to the \textit{rating} of a \textit{user} $v$ as soon as $u$ and $v$ have rated some \textit{items} similarly. The similarity of the \textit{users} is determined by the \textit{community ratings}. This type of \textit{recommender system} is also known by the term \textit{neighborhood-based recommender} \citep{DeKa11}. The main focus of \textit{neighbourhood-based methods} is on the application of iterative methods such as \textit{k-nearest-neighbours} or \textit{k-means}. A \textit{neighborhood-based recommender} can be viewed from two perspetives: The first and best known problem is the so-called \textit{user-based prediction}. Here, the \textit{missing ratings} of a considered \textit{user} $u$ are to be determined from his \textit{neighborhood} $\mathcal{N}_i(u)$. $\mathcal{N}_i(u)$ denotes the subset of the \textit{neighborhood} of all \textit{users} who have a similar manner of evaluation to $u$ via the \textit{item} $i$. The second problem is that of \textit{item-based prediction}. Analogously, the similarity of the \textit{items} are determined by their received \textit{ratings}. diff --git a/submission.pdf b/submission.pdf index 825e0e6e07c35d9f8810b4b33bf9533b57d25569..e3a9f7e83c782b37d3f6273c2f239b125407ab8d 100644 GIT binary patch delta 6790 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 delta 6787 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 U`=+bBXH(=b;8Im}^>^a}0I?Alng9R* -- GitLab