推荐系统系列---基于movielens数据集的KNN算法与矩阵分解算法比较

                                                         理论部分

1. 隐因子模型的推荐算法:使用奇异值分解或者随机梯度下降等方法将用户的评分矩阵分解为用户和产品的特征矩阵 ;

2. 提出一种对推荐效果新的评估方法:

3.Movielens 数据集:

(1)100k,包括1000个用户对1700部电影的点评信息。94.88%的评分都没有 。要给用户给予推荐,其实就是对评分矩阵中未知的项进行预测,也就是对一个稀疏的打分矩阵空白处进行“填空"。
(2)1m,包括6000个用户对4000部电影100万的评分记录。
(3)10m,包括72000个用户对10000部电影的的1000万个评分记录以及100000个标签。

4. 奇异值分解SVD:


      

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
DPC-KNN算法是一种基于密度峰值聚类(Density Peak Clustering)的K近邻(K-Nearest Neighbors)算法,可以用于数据的聚类分析。下面是一份用Python实现DPC-KNN算法的示例代码: ```python import numpy as np import pandas as pd import math from scipy.spatial.distance import pdist,squareform # 计算距离矩阵 def distmat(X): return squareform(pdist(X)) # 密度峰值计算 def rho(distance, dc): return np.sum(np.exp(-(distance/dc)**2),axis=1)-1 # 最小距离计算 def delta(distance, rho): n = distance.shape[0] delta = np.zeros(n) for i in range(n): delta[i] = np.min(distance[i,np.where(rho>rho[i])]) return delta # 密度峰值聚类 def dpc_knn(X,dc,n): # 计算距离矩阵 distance = distmat(X) # 计算密度峰值 rho_ = rho(distance,dc) # 计算最小距离 delta_ = delta(distance,rho_) # 计算rho-delta rhodelta = pd.DataFrame({'rho':rho_,'delta':delta_}) # 选择聚类中心 center = rhodelta.sort_values(by=['rho','delta'],ascending=[False,True]).head(n) center_idx = center.index # 分配样本点 cluster = {} for i in range(n): cluster[i] = [center_idx[i]] for i in range(distance.shape[0]): if i not in center_idx: dist = distance[i,center_idx] idx = np.argmin(dist) cluster[center_idx[idx]].append(i) # 输出聚类结果 for i in range(n): print('Cluster '+str(i+1)+': '+str(cluster[i])) # 示例数据 X = np.array([[1,2],[1.5,2],[3,4],[4,5],[3,3.5],[3.5,4],[3.5,2.5],[5,6],[7,8],[7,7.5],[8,8],[8,7.5]]) # 聚类分析 dpc_knn(X,2,3) ``` 在以上示例代码中,我们首先定义了三个辅助函数,分别用于计算距离矩阵、密度峰值和最小距离。然后,我们实现了DPC-KNN算法的主要流程,包括计算距离矩阵、密度峰值、最小距离和rho-delta值,以及选择聚类中心和分配样本点。最后,我们使用示例数据进行聚类分析,输出聚类结果。 需要注意的是,DPC-KNN算法的核心在于密度峰值聚类,可以根据实际应用需求选择不同的密度峰值计算方法,例如基于K近邻、基于带宽或基于网格等。此外,DPC-KNN算法也存在一些缺陷,例如对数据集分布和密度变化的敏感性较强、聚类数目的选择较为困难等。因此,在具体应用中需要结合实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值