rating更新系统

自己写的一个。

#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
int r[N] = {1000,2000,1500,5000,3000,4000,2000,2500,888,1680};
double p[N][N];
string username[N] = {"1","2","3","4","5","6","7","8","9","10"};
struct u{
	double seed;
	int id,name,idx;
	string user;
}x[N];
bool c(u x,u y){
	return x.seed < y.seed;
}
int main(){
	int all_rating = 0;
	for (int i = 0; i < 10; i ++ ){
		all_rating += r[i];
	}
	for (int i = 0; i < 10; i ++ ){
		for (int j = 0; j < 10; j ++ ){
			if (r[i] > r[j]){
				p[i][j] = 1.0 / (1 + pow(10,1.0 * (r[i] - r[j]) / 400.0));
			}
		}
	}
	for (int i = 0; i < 10; i ++ ){
		x[i].seed = 1;
		for (int j = 0; j < 10; j ++ ){
			if (i != j){
				x[i].seed += p[j][i];
			}
		}
		x[i].name = i + 1;
		x[i].user = username[i];
		x[i].idx = i;
	}
	sort(x,x + 10,c);
	for (int i = 0; i < 10; i ++ ){
		x[i].id = i + 1;
	}
	int max_rating = 1000,tt = all_rating;
	for (int i = 0; i < 10; i ++ ){
		if (x[i].id == x[i].name){
			int bh;
			if (x[i].name <= 10 / 2){
				bh = 100 * (5 - x[i].name) / 2;
			}
			else{
				bh = -100 * x[i].name / 2;
			}
			if (bh < -max_rating){
				bh = -max_rating;
			}
			if (bh > max_rating){
				bh = max_rating;
			}
			all_rating -= r[x[i].idx] + bh; 
			if (bh >= 0){
				cout << x[i].user << " rating + " << bh << "!" << "now rating:" << r[x[i].idx] + bh << "!\n";
			}
			else{
				cout << x[i].user << " rating - " << abs(bh) << "!" << "now rating:" << r[x[i].idx] + bh << "!\n";
			}
		}
		else{
			int t = x[i].id - x[i].name;
			int bh;
			if (t > 0){
				bh = 0.4 * max_rating * t;
				all_rating -= r[x[i].idx];
				if (bh < -max_rating){
					bh = -max_rating;
				}
				if (bh > max_rating){
					bh = max_rating;
				}
				all_rating -= bh;
				int ch = min(max_rating - bh,all_rating * all_rating / tt);
				all_rating -= ch;
				cout << x[i].user << " rating + " << bh + ch << "!" << "now rating:" << r[x[i].idx] + bh + ch << "!\n";
			}
			else{
				bh = 0.3 * max_rating * t;
				if (bh < -max_rating){
					bh = -max_rating;
				}
				if (bh > max_rating){
					bh = max_rating;
				}
				all_rating -= r[x[i].idx] + bh;
				cout << x[i].user << " rating - " << abs(bh) << "!"  << "now rating:" << r[x[i].idx] + bh << "!\n"; 
			}
		}
	}
	return 0;
}

Jupyter Notebook 通常用于数据分析、机器学习和科学计算等领域,而不是直接用于构建推荐系统。但是,你可以使用Python中的各种库,如Pandas、NumPy、Scikit-learn、LightFM或Surprise等,来实现推荐系统的部分功能。 推荐系统的基本流程可能包括以下几个步骤: 1. 数据预处理:清洗和整理用户行为数据(如浏览历史、购买记录)、用户信息以及物品信息。 ```python import pandas as pd df = pd.read_csv('ratings.csv') # 假设你有一个用户-物品评分数据 ``` 2. 特征工程:提取用户和物品的特征,如用户ID、物品ID、用户年龄、物品类别等。 ```python user_features = df[['user_id', 'age']] item_features = df[['item_id', 'category']] ``` 3. 创建用户-物品矩阵:通常使用协同过滤算法,计算相似度或基于内容的相似性。 ```python from surprise import Reader, Dataset, KNNBasic reader = Reader(rating_scale=(1, 5)) data = Dataset.load_from_df(df[['user_id', 'item_id', 'rating']], reader) algo = KNNBasic() ``` 4. 训练模型:根据数据集训练推荐算法。 ```python algo.fit(data.build_full_trainset()) ``` 5. 预测和生成推荐:为每个用户生成推荐列表。 ```python predictions = algo.test(data.build_testset()) top_items = [item for _, item in predictions[:10]] ``` 6. 可视化结果:使用Matplotlib或Seaborn展示用户的历史行为和推荐结果。 如果你想要在Jupyter Notebook中搭建完整的推荐系统,你可能还需要考虑使用专门的推荐库,比如LightFM、Surprise或者Spotify的Annoy等。 相关问题: 1. 在构建推荐系统时,如何选择合适的相似度计算方法? 2. Jupyter Notebook是否支持实时更新和反馈用户行为后的推荐结果? 3. 如何评估推荐系统的性能?常用的评估指标有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值