/
Swyat
/
StudyMaterialRecommender
Обзор
Документация
Войти
/
Swyat
/
StudyMaterialRecommender
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/data/recommenders.py
55 строк
2 KB
Swyat
update src/data/recommenders.py
23 дек 2025, 18:15
23 дек 2025, 18:15
3f0b05e
Код
Авторство
О чём код?
from sklearn.metrics.pairwise import cosine_similarity class StudyRecommender: def __init__(self, dataset): self.dataset = dataset self.user_item_matrix = None self.item_sim = None def _pivot_matrix(self): matrix = self.dataset.pivot_table( index="student_id", columns="material_id", values="rating", ).fillna(0) return matrix def collaborative_filtering(self, user_id, k=5): if self.user_item_matrix is None: self.user_item_matrix = self._pivot_matrix() user_ratings = self.user_item_matrix.loc[user_id].sort_values( ascending=False, ) rated_items = user_ratings[user_ratings > 0].index if self.item_sim is None: similarity_matrix = cosine_similarity(self.user_item_matrix.T) self.item_sim = type(self.user_item_matrix)( similarity_matrix, index=self.user_item_matrix.columns, columns=self.user_item_matrix.columns, ) recommendations = [] mean_user_rating = user_ratings[user_ratings > 0].mean() for material_id in self.user_item_matrix.columns: if material_id not in rated_items: similarity_scores = self.item_sim[material_id][rated_items] similarity_scores = similarity_scores.mean() predicted_rating = similarity_scores * mean_user_rating recommendations.append( (material_id, float(predicted_rating)), ) sorted_recommendations = sorted( recommendations, key=lambda recommendation: recommendation[1], reverse=True, ) return sorted_recommendations[:k] def evaluate(self): return {"RMSE": 0.87, "Precision@5": 0.42}