协同过滤推荐算法_以MovieLens 1M Dataset 为例的k近邻-协同过滤推荐算法

k近邻-协同过滤推荐算法

算法概述

推荐算法常用的有三种:基于人口统计学的推荐、基于内容的推荐、基于协同过滤的推荐。前两种是仅仅考虑用户或物品本身背景属性,将拥有相似属性的用户或物品分在一个集合里。第三种算法是在大量用户行为和数据中收集答案,以帮助对整个人群产生统计意义上的结论。此处我们重点讨论第三种,基于协同过滤的推荐算法。

协同过滤

核心是用户交互数据建模,可以分为三个子类:user-based recommendation,item-based recommendation,model-based recommendation。

基于用户的协同过滤推荐(user-based recommendation)

它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,在一般的应用中是采用计算“K- 近邻”的算法;然后,基于这 K 个邻居的历史偏好信息,为当前用户进行推荐。

这里写图片描述

基于项目的协同过滤推荐

基于项目的协同过滤推荐的基本原理也是类似的,只是说它使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。

基于模型的协同过滤推荐

基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐。

协同过滤小结

优点:

a. 它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可理解的,所以这种方法也是领域无关的。

b. 这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好

缺点:

a. 方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。

b. 推荐的效果依赖于用户历史偏好数据的多少和准确性。

c. 在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。

d. 对于一些特殊品味的用户不能给予很好的推荐。

e. 由于以历史数据为基础,抓取和建模用户的偏好后,很难修改或者根据用户的使用演变,从而导致这个方法不够灵活。

k近邻算法KNN

算法原理

简单地说,k近邻算法就是采用测量不同特征值之间的距离方法进行分类。

优点:精度高,对异常值不敏感,无数据输入假定。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用K近邻算法进行图像分类时,一种常见的方法是将每个图像表示为特征向量,然后使用KNN算法根据特征向量的距离进行分类。以下是一个使用KNN算法实现图片识别的示例代码: ```python import numpy as np from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载图像数据集 def load_dataset(): # TODO: 加载图像数据集,将图像转换为特征向量 # 返回特征矩阵 X 和标签向量 y pass # 划分训练集和测试集 def split_dataset(X, y): X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) return X_train, X_test, y_train, y_test # 使用KNN算法进行图像分类 def image_classification(X_train, X_test, y_train, y_test): knn = KNeighborsClassifier(n_neighbors=5) # 创建KNN分类器对象 knn.fit(X_train, y_train) # 在训练集上训练KNN模型 y_pred = knn.predict(X_test) # 在测试集上进行预测 accuracy = accuracy_score(y_test, y_pred) # 计算准确率 return accuracy def main(): X, y = load_dataset() # 加载图像数据集 X_train, X_test, y_train, y_test = split_dataset(X, y) # 划分训练集和测试集 accuracy = image_classification(X_train, X_test, y_train, y_test) # 使用KNN算法进行图像分类 print("准确率:", accuracy) if __name__ == '__main__': main() ``` 在上述代码,你需要自行实现 `load_dataset()` 函数来加载图像数据集并将图像转换为特征向量。可以使用图像处理库(如OpenCV)来读取和处理图像,然后将每个图像转换为特征向量。通常,可以使用图像的像素值、颜色直方图、梯度直方图等作为特征。然后,通过调用 `split_dataset()` 函数将数据集划分为训练集和测试集。最后,通过调用 `image_classification()` 函数使用KNN算法进行图像分类,并计算准确率。 请注意,这只是一个示例代码框架,你需要根据你的具体需求和数据集进行相应的实现和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值