Classifier Recommender
ClassifierRecommender(item_field, classifier, threshold=None, embedding_combiner=Centroid())
Bases: PerUserCBAlgorithm
Class that implements recommendation through a specified Classifier
object.
It's a ranking algorithm, so it can't do score prediction.
Examples:
- Interested in only a field representation,
DecisionTree
classifier from sklearn,threshold
\(= 3\) (Every item with rating score \(>= 3\) will be considered as positive)
>>> from clayrs import recsys as rs
>>> alg = rs.ClassifierRecommender({"Plot": 0}, rs.SkDecisionTree(), 3)
- Interested in only a field representation,
KNN
classifier with custom parameters from sklearn,threshold
\(= 3\) (Every item with rating score \(>= 3\) will be considered as positive)
>>> alg = rs.ClassifierRecommender({"Plot": 0}, rs.SkKNN(n_neighbors=3), 0)
- Interested in multiple field representations of the items,
KNN
classifier with custom parameters from sklearn,threshold
\(= None\) (Every item with rating \(>=\) mean rating of the user will be considered as positive)
>>> alg = ClassifierRecommender(
>>> item_field={"Plot": [0, "tfidf"],
>>> "Genre": [0, 1],
>>> "Director": "doc2vec"},
>>> classifier=rs.SkKNN(n_neighbors=3),
>>> threshold=None)
Info
After instantiating the ClassifierRecommender` algorithm, pass it in the initialization of a CBRS and the use its method to calculate ranking for single user or multiple users:
Examples:
>>> cbrs = rs.ContentBasedRS(algorithm=alg, ...)
>>> cbrs.fit_rank(...)
>>> # ...
PARAMETER | DESCRIPTION |
---|---|
item_field |
dict where the key is the name of the field that contains the content to use, value is the representation(s) id(s) that will be used for the said item. The value of a field can be a string or a list, use a list if you want to use multiple representations for a particular field.
TYPE:
|
classifier |
classifier that will be used. Can be one object of the Classifier class.
TYPE:
|
threshold |
Threshold for the ratings. If the rating is greater than the threshold, it will be considered as positive. If the threshold is not specified, the average score of all items rated by the user is used.
TYPE:
|
embedding_combiner |
TYPE:
|
Source code in clayrs/recsys/content_based_algorithm/classifier/classifier_recommender.py
76 77 78 79 80 81 82 83 |
|
fit_single_user()
Fit the classifier specified in the constructor with the features and labels
extracted with the process_rated()
method.
It uses private attributes to fit the classifier, so process_rated()
must be called
before this method.
Source code in clayrs/recsys/content_based_algorithm/classifier/classifier_recommender.py
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
|
predict_single_user(user_idx, train_ratings, available_loaded_items, filter_list=None)
ClassifierRecommender is not a score prediction algorithm, calling this method will raise
the NotPredictionAlg
exception!
RAISES | DESCRIPTION |
---|---|
NotPredictionAlg
|
exception raised since the ClassifierRecommender algorithm is not a score prediction algorithm |
Source code in clayrs/recsys/content_based_algorithm/classifier/classifier_recommender.py
179 180 181 182 183 184 185 186 187 188 189 |
|
process_rated(user_idx, train_ratings, available_loaded_items)
Function that extracts features from rated item and labels them. The extracted features will be later used to fit the classifier.
Features and labels will be stored in private attributes of the class.
IF there are no rated items available locally or if there are only positive/negative items, an exception is thrown.
PARAMETER | DESCRIPTION |
---|---|
user_idx |
Mapped integer of the active user (the user for which we must fit the algorithm)
TYPE:
|
train_ratings |
TYPE:
|
available_loaded_items |
The LoadedContents interface which contains loaded contents
TYPE:
|
RAISES | DESCRIPTION |
---|---|
EmptyUserRatings
|
Exception raised when the user does not appear in the train set |
NoRatedItems
|
Exception raised when there isn't any item available locally rated by the user |
OnlyPositiveItems
|
Exception raised when there are only positive items available locally for the user (Items that the user liked) |
OnlyNegativeitems
|
Exception raised when there are only negative items available locally for the user (Items that the user disliked) |
Source code in clayrs/recsys/content_based_algorithm/classifier/classifier_recommender.py
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
|
rank_single_user(user_idx, train_ratings, available_loaded_items, recs_number, filter_list)
Rank the top-n recommended items for the active user, where the top-n items to rank are controlled by the
recs_number
and filter_list
parameter:
- the former one is self-explanatory, the second is a list of items represented with their string ids. Must be necessarily strings and not their mapped integer since items are serialized following their string representation!
If recs_number
is None
, all ranked items will be returned
The filter list parameter is usually the result of the filter_single()
method of a Methodology
object
PARAMETER | DESCRIPTION |
---|---|
user_idx |
Mapped integer of the active user
TYPE:
|
train_ratings |
TYPE:
|
available_loaded_items |
The LoadedContents interface which contains loaded contents
TYPE:
|
recs_number |
number of the top ranked items to return, if None all ranked items will be returned |
filter_list |
list of the items to rank. Should contain string item ids |
RETURNS | DESCRIPTION |
---|---|
np.ndarray
|
uir matrix for a single user containing user and item idxs (integer representation) with the ranked score as third dimension sorted in a decreasing order |
Source code in clayrs/recsys/content_based_algorithm/classifier/classifier_recommender.py
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
|
Classifiers Implemented
The following are the classifiers you can use in the classifier
parameter of the ClassifierRecommender
class
SkDecisionTree(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, class_weight=None, ccp_alpha=0.0)
Bases: Classifier
Class that implements the Decision Tree Classifier from sklearn. The parameters one could pass are the same ones you would pass instantiating the classifier directly from sklearn
Sklearn documentation: here
Source code in clayrs/recsys/content_based_algorithm/classifier/classifiers.py
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 |
|
SkGaussianProcess(kernel=None, *, optimizer='fmin_l_bfgs_b', n_restarts_optimizer=0, max_iter_predict=100, warm_start=False, copy_X_train=True, random_state=None, multi_class='one_vs_rest', n_jobs=None)
Bases: Classifier
Class that implements the Gaussian Process Classifier from sklearn. The parameters one could pass are the same ones you would pass instantiating the classifier directly from sklearn
Sklearn documentation: here
Source code in clayrs/recsys/content_based_algorithm/classifier/classifiers.py
279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 |
|
SkKNN(n_neighbors=5, *, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)
Bases: Classifier
Class that implements the KNN Classifier from sklearn. The parameters one could pass are the same ones you would pass instantiating the classifier KNN directly from sklearn.
Sklearn documentation: here
Since KNN implementation of sklearn has n_neighbors = 5
as default, it can throw an exception if less sample in
the training data are provided, so we change dynamically the n_neighbors parameter
according to the number of samples if the dataset is too small and if no manual n_neighbors
is set
Source code in clayrs/recsys/content_based_algorithm/classifier/classifiers.py
129 130 131 132 133 134 135 136 137 138 139 140 141 |
|
SkLogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
Bases: Classifier
Class that implements the Logistic Regression Classifier from sklearn. The parameters one could pass are the same ones you would pass instantiating the classifier directly from sklearn
Sklearn documentation: here
Source code in clayrs/recsys/content_based_algorithm/classifier/classifiers.py
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
|
SkRandomForest(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)
Bases: Classifier
Class that implements the Random Forest Classifier from sklearn. The parameters one could pass are the same ones you would pass instantiating the classifier directly from sklearn
Sklearn documentation: here
Source code in clayrs/recsys/content_based_algorithm/classifier/classifiers.py
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
|
SkSVC(*, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape='ovr', break_ties=False, random_state=None)
Bases: Classifier
Class that implements the SVC Classifier from sklearn. The parameters one could pass are the same ones you would pass instantiating the classifier SVC directly from sklearn.
Sklearn documentation: here
The only parameter from sklearn that cannot be passed is the 'probability' parameter: it is set to True and cannot be changed
Source code in clayrs/recsys/content_based_algorithm/classifier/classifiers.py
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
|