推荐系统实战-出租公寓项目5-基于聚类分析推荐

推荐系统实战 专栏收录该内容
16 篇文章 1 订阅

代码在这里 https://github.com/worry1613/gongyu-recommend

聚类通俗的讲,即所谓“物以类聚,人以群分”。聚类 (Clustering) 是一个数据挖掘的经典问题,它的目的是将数据分为多个簇 (Cluster),在同一个簇中的对象之间有较高的相似度,而不同簇的对象差别较大。

为什么要用聚类算法?

简单,非常简单!!!!

聚类是非监督版的‘分类’,把相近的数据划分成多个簇,一个簇内的所有数据相关性很好。

在推荐系统的初期,用户查看的公寓信息很少,协同过滤算法施展不出身手,聚类算法可以在协同过滤算法之前做预处理,适当扩大用户有效操作,提高协同过滤算法的效果。

同时,在某些方面,聚类算法缩小的计算范围,只计算相关簇内的信息即可,很好的减少的计算量,提高了算法的效率。

聚类算法实现

K均值(K-means)算法是简单的聚类算法,同时也是最基础,使用最为广泛的聚类算法。

K均值聚类算法首先会随机确定K个中心位置(位于空间中代表聚类中心的点),然后将各个数据项分配给最临近的中心点。待分配完成之后,聚类中心就会移到分配给该聚类的所有节点的平均位置处,然后整个分配过程重新开始。这一过程会一直重复下去,直到分配过程不再产生变化为止。下图是包含两个聚类的K-均值聚类过程:

K均值算法有2个难题?1,K是多少?2,K的值分别是多少?

一般情况下K是需要人来确定的,不同的产品,不同经验的人员,给的值是不一样的。

K点的值初始都是随机的,每次都不一样,聚成的簇也就不一样。

怎么解决这2个问题呢

用另一种聚类算法canopy

canopy算法主要是给K均值算法做数据预处理的,就是要找到比较理想的簇的个数及簇的初始点位置。


图中有一个T1,一个T2,我们称之为距离阀值,显然T1>T2,这两个值有什么用呢?我们先确定了一个中心,然后计算其他点到这个中心间的距离,当距离大于T1时,小于T1大于T2时,小于T2时,对这个点的处理都是不一样的。

 while D is not empty
      select element d from D to initialize canopy c
      remove d from D
      Loop through remaining elements in D
           if distance between d_i and c < T1 : add element to the canopy c
           if distance between d_i and c < T2 : remove element from D
      end
      add canopy c to the list of canopies C
end
D指代一组数据,d_i表示D中的各个数据。
是不是还不够明白?下面用中文进行说明:
1:给我一组存放在数组里面的数据D
2:给我两个距离阈值T1,T2,且T1>T2
3:随机取D中的一个数据d作为中心,并将d从D中移除
4:计算D中所有点到d的距离distance
5:将所有distance<T1的点都归如到d为中心的canopy1类中(注意哦,小于T2的也是小于T1的,所以也是归入到canopy1中的哦)
6:将所有distance<T2的点,都从D中移除。(这一步很关键的,你回去看上面那个图,就明白了)
7:重复步骤4到6,直到D为空,形成多个canopy类
不难,好理解,canopy算法已经在多个工业级的算法库中有了实现,不理解就去看源码吧。

具体实现请看https://github.com/worry1613/gongyu-recommend/cluster.py

canopy算法代码从网上摘录,kmeans算法代码来自《机器学习实战》中第10章的代码。

canopy算法的结果每次也不一样,但都差距都很少。为了更公平的选出K,7次canopy算法,减去最大值和最小值,剩下的和平均数最接近的那个值就是K的值。

K匀值算法计算时间较长,所以最好是把计算结果保存下来,以后随时可以使用。


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<p><img src="https://img-bss.csdnimg.cn/202009170342045706.png" alt="" width="1464" height="750" /></p> <p style="margin: 10px 0px; padding: 0px; border: 0px; outline: 0px; font-size: 14px; vertical-align: baseline; background: #ffffff; list-style-type: none; box-sizing: border-box; line-height: 1.5; font-family: tahoma, 微软雅黑, arial, 宋体;"> </p> <p style="margin: 10px 0px; padding: 0px; border: 0px; outline: 0px; font-size: 14px; vertical-align: baseline; background: #ffffff; list-style-type: none; box-sizing: border-box; line-height: 1.5; font-family: tahoma, 微软雅黑, arial, 宋体;">根据图识,项目将分为三个部分。整个项目基本思路是如何通过爬虫爬取大量数据放到Hbase,然后通过ETL工具初步转化筛选将数据存到mongodb,抽取mongodb的数据进行清洗处理算出模型放到hdfs。后续进来数据通过模型运算出数据的类型。项目系统主要包括前端+后端+机器学习,前端采用React Native,Native,后端采用Dubbo+Spring+java,机器学习采用Spark进行实现,本项目机器学习-spark代码运行在mesos上。<br style="padding: 0px; margin: 0px; box-sizing: border-box;" /><br style="padding: 0px; margin: 0px; box-sizing: border-box;" />本课程我们只针对以上图示的浅蓝色部分内容(即与机器学习相关的内容),通过用真实的智能客户项目系统作为案例(案例附带源码,可以直接做二次开发),主要根据项目实例穿讲机器学习以及相关知识,包括有:数据提取,数据清洗以及分词,数据特征值提取、机器学习模型计算、数据分类等等,进行详细讲解。<br style="padding: 0px; margin: 0px; box-sizing: border-box;" /><br style="padding: 0px; margin: 0px; box-sizing: border-box;" />本课程所需掌握的技术:java、scala、IK、Hdfs、Spark ml、Spark Streaming、Spark SQL、Kafka、Zookeeper、Mongodb、Spring-Data-Mongodb,由于每个技术需要掌握的程度不一样,对于我们用到的一些开源技术,课程中将会是简单介绍如何使用,不会着重讲解。课程重点讲解spark ml、spark Streaming,以及如何使用这些技术进行项目实战,贯穿项目系统并且最后串联所有技术。spark基于2.0.1版本讲解</p> <p><img src="https://img-bss.csdnimg.cn/202009170342228806.jpg" alt="" width="1794" height="998" /></p> <p><img src="https://img-bss.csdnimg.cn/202009170342388892.jpg" alt="" width="1916" height="820" /></p>
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值