Beinsearch
4/30/2017 - 9:37 AM

算法思想

兴趣推荐:
数据结构:人-对象-打分,可用嵌套dict记录 
思想:找到相似的人的高分推荐 
衡量人的相似度:
1、欧式距离:每种对象(的打分)是1维空间,人是k维空间中的点;
2、皮尔逊相关系数:每个人是1维空间,1组对象是n维空间中的点(若某两人品味一致,对象散点在2维空间中拟合对角线)。散点的相关系数取值范围为[-1,1],有平移不变性的优点(欧式距离无)。
加权推荐:
对某物打分=sum(和某人的相似度*某人对某物打分)/sum(和某人的相似度),排序
对偶问题:对象-人-打分,计算对象相似度,为对象推荐人 
基于物品的协作型过滤
出发点:数据规模大,个人数据变化频繁,可利用机器空闲生成相似物品集(物品-相似物品-相似度)
推荐思想:用和已购物品相似度为权重,为已打分物品加权,得相似物品打分。

层次聚类:
数据结构:cluster(中心向量,左分支cluster,右分支cluster,id)  #合并cluster id<0
distances={(i,j):dis} #分类i,j的距离为dis
初始化分类=全体样本 [cluster[i] for i in range(n)]
当分类数>1
  计算分类i,j距离 #if (i,j) not in distances
  找出最近配对i,j,合并,加入cluster
  del cluster[i,j]
return cluster[0]
显示:
def print(clust,n):
  print(clust.left,n+1)
  for i in range(n):print '-',
  if clust.id<0:#分支 
    print ‘+’
  else:
    print clust.label #叶结点 
  print(clust.right,n+1)
  
网络搜索与排名:
1、爬取网页,建立数据库
从一组网页出发,提取文字,分词,建立数据库含链接表、词表、词在网页位置表、链接关系表。从网页对外链接扩散,宽度优先,指定深度。
2、搜索一组词,用联合查询,返回一组原始网页结果
3、对搜索结果排序
对原始结果中的网页用不同依据打分。单词频度,某网页含搜索词组越多越好;文档位置,词组首次出现位置越靠前越好;单词距离,最近词组间距越小越好;外部回指链接数越多越好。让以上方法返回{(url:score)}的dict,归一化到[0,1],各方法赋予权重。加权求和,排序,返回相关性最高的若干条结果。

PSO:
http://blog.csdn.net/myarrow/article/details/51507671