collective filtering(协同过滤)
Item based:适用与用户数量远大与条目数量,电商用的比较多
优点是:相较与基于用户来说速度快,找到的商品相似度高
缺点是:也是找到的商品相似度高,很难发现用户潜在喜欢的东西
User based:适用与条目不断更新的,比如链接推荐,社交类网站也经常用次方法找到用户的相似用户
优点:能够找到用户可能喜欢的条目,且多样化
缺点:运算量大,因为用户的相似用户群的变动还是挺大的,所以要定时的更新相似用户矩阵
实现基本相同通过欧几里德距离,皮尔逊系数等找出相互之间的相似度
content based(基于内容分类)
通过文本挖掘应用提供的或爬取的内容提取出每个条目的关键词,共同的关键词越多,两个条目的相似度越高。这样的话即使没有评分数据也可以进行推荐
适用与:给通过注册时提供的兴趣等给刚刚注册的用户进行推荐,或对新添加还没有用户评分的条目等冷启动问题
slope one
根据用户在A条目上与大家评分的区别来判断该用户会对B条目的评分,这个算法在准确度上是很差的
优点:算法快,且能解决数据少的时候,没有东西推荐的情况
缺点:准确性差,推荐的基本都是大家都喜欢的,比较大众的
聚类:没有先验知识,属于无监督学习
适用与多维度,连续变量,基本的思路是概念建模和迭代优化
凝聚型层次聚类算法:
1:定义初始树,类似与B+树,所有数据都在叶子节点
2:逐步提高层级值,判断哪些元素可以构成新的聚类
eg:ROCK链接型聚类 :处理非线性的数据,如关键字,布尔值,枚举等,通过雅可比相似度来反映距离
分裂型层次聚类算法:
自上而下将数据拆成更小的聚类
k-means算法:效率最高(空间复杂度,时间复杂度),但是无法处理类别型数据,也无法处理异常点(实际上远离任何聚类的点)
通过配置k值来确定中心点的数量
根据数据到中心点的距离不断迭代调整中心点的位置,直到中心点不在大幅改变的时候
(距离可采用欧几里德距离和Kullback-Leibler发散度等)
DBSCAN:基于密度的空间聚类算法(相较与k-means复杂度增大了,但是可以有效的去除异常点)
用于根据eps(聚类圈的半径)和miniPoints(聚类内最小数据点数)找出数据集中的密度和噪声
BIRCH:通过数据挤压算法对大规模数据进行聚类算法
大数据规模下的聚类算法应该:
1:通过采样,索引等的实现减少对数据的寻址
2:随时都能够给出一个当前最好的结果
3:算法能够暂停和恢复
4:充分考虑内存限制
UGC
基于图
未完待续。。。