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

代码在这里 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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值