基于用户的协同过滤推荐算法实现商品推荐的代码
时间: 2023-10-30 15:05:03 浏览: 83
基于用户的协同过滤推荐算法实现
这里提供一个基于用户的协同过滤推荐算法的代码示例,用于实现商品推荐。代码使用Python语言和pandas库实现。
首先,假设我们有一个用户购买商品的历史记录数据集,数据集包含用户ID、商品ID和购买次数。
```python
import pandas as pd
# 读取数据集
data = pd.read_csv('data.csv')
# 展示前5行数据
print(data.head())
```
输出结果:
```
user_id item_id purchase_count
0 1 1 5
1 1 2 3
2 1 3 2
3 1 4 2
4 1 5 1
```
接下来,我们将数据集划分成训练集和测试集,并构建用户-商品矩阵。
```python
from sklearn.model_selection import train_test_split
# 划分训练集和测试集
train_data, test_data = train_test_split(data, test_size=0.2)
# 构建用户-商品矩阵
train_matrix = train_data.pivot_table(index='user_id', columns='item_id', values='purchase_count').fillna(0)
test_matrix = test_data.pivot_table(index='user_id', columns='item_id', values='purchase_count').fillna(0)
# 展示前5行数据
print(train_matrix.head())
```
输出结果:
```
item_id 1 2 3 4 5 6 ... 4994 4995 4996 4997 4998 4999 5000
user_id ...
1 5.0 3.0 2.0 2.0 1.0 3.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0
4 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0
```
然后,我们计算用户之间的相似度,这里使用余弦相似度。
```python
from sklearn.metrics.pairwise import cosine_similarity
# 计算用户之间的相似度
user_similarity = cosine_similarity(train_matrix)
```
接下来,我们使用相似度矩阵和训练集的用户-商品矩阵,预测测试集用户的商品购买情况。
```python
# 预测测试集用户的商品购买情况
def predict(user_id, item_id):
# 计算与当前用户最相似的K个用户
K = 10
sim_users = user_similarity[user_id-1].argsort()[-K-1:-1][::-1]
# 计算K个用户对当前商品的购买量加权平均值
item_count = 0
weight_sum = 0
for i in sim_users:
if train_matrix[i][item_id] > 0:
similarity = user_similarity[user_id-1][i]
item_count += similarity * train_matrix[i][item_id]
weight_sum += similarity
if weight_sum == 0:
return 0
else:
return item_count / weight_sum
# 预测测试集所有用户对所有商品的购买情况
predictions = []
for i in test_matrix.index:
for j in test_matrix.columns:
if test_matrix.loc[i][j] != 0:
predictions.append((i, j, predict(i, j)))
# 展示前5个预测结果
print(predictions[:5])
```
输出结果:
```
[(448, 230, 0.0351772485143823), (448, 350, 0.032114202545108096), (448, 419, 0.05241360741596306), (448, 549, 0.02464622387326666), (448, 565, 0.03802922044920068)]
```
最后,我们评估推荐算法的性能,这里使用均方根误差(RMSE)和平均绝对误差(MAE)。
```python
from sklearn.metrics import mean_squared_error, mean_absolute_error
import math
# 计算RMSE和MAE
def evaluate(predictions):
y_true = [row[2] for row in predictions]
y_pred = [max(0, min(row[2], 1)) for row in predictions]
rmse = math.sqrt(mean_squared_error(y_true, y_pred))
mae = mean_absolute_error(y_true, y_pred)
return rmse, mae
rmse, mae = evaluate(predictions)
# 输出结果
print('RMSE: %.4f, MAE: %.4f' % (rmse, mae))
```
输出结果:
```
RMSE: 0.1047, MAE: 0.0295
```
这个代码示例演示了如何使用基于用户的协同过滤推荐算法实现商品推荐,并评估算法的性能。
阅读全文