from numpy import *
from numpy import linalg as la def loadExData1():
return [[2,0,0,4,4,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,5],
[0,0,0,0,0,0,0,1,0,4,0],
[3,3,4,0,3,0,0,2,2,0,0],
[5,5,5,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,5,0,0,5,0],
[4,0,4,0,0,0,0,0,0,0,5],
[0,0,0,0,0,4,0,0,0,0,4],
[0,0,0,0,0,0,5,0,0,5,0],
[0,0,0,3,0,0,0,0,4,5,0],
[1,1,2,1,1,2,1,0,4,5,0]] #相似度计算
def ecludSim(inA,inB):
return 1.0/(1.0 + la.norm(inA - inB)) def pearsSim(inA,inB):
if len(inA) < 3 : return 1.0
return 0.5+0.5*corrcoef(inA, inB, rowvar=0)[0][1] def cosSim(inA, inB):
"""
:param inA: [a]
:param inB: [b]
:return: 1 or 0
"""
num = float(inA.T*inB)
demon = la.norm(inA)*la.norm(inB)
return 0.5+0.5*(num/demon) # 0.5+0.5*(a*b/abs(a*b)) # 基于物品相似度的推荐引擎
def standEst(dataMat, user, simMeas, item):
"""
:param dataMat: ex loadExdata1()
:param user: ex user=1
:param simMeas: cosSim()
:param item: ex # user=1对应的数据[0,0,0,0,0,0,0,0,0,0,5]的列=0的下标为 0 1 2 3 4 5 6 7 8 9
:return: 相似度
"""
n = shape(dataMat)[1]
simTotal = 0.0; ratSimTotal = 0.0
for j in range(n): # shape(dataMat):[x, n] x:数据集长度 n:维度
userRating = dataMat[user, j] # 取出user这条数据 a = np.array[[1,2,3],[0,2,1]]
if userRating == 0: # for i in [0,1,2]: print(a[1, i]) # 0 2 1
continue
# logical_and---- numpy逻辑与的判断
# logical_or---- numpy逻辑或的判断
# logical_not---- numpy逻辑非的判断
overLap = nonzero(logical_and(dataMat[:, item].A > 0, \
dataMat[:, j].A > 0))[0]
if len(overLap) == 0:
similarity = 0
else:
similarity = simMeas(dataMat[overLap,item],\
dataMat[overLap,j])
print('the %d and %d similarity is: %f'%(item, j, similarity))
simTotal += similarity
ratSimTotal += similarity * userRating
if simTotal == 0:
return 0
return ratSimTotal/simTotal # 将一个11纬的矩阵转换成一个5维的矩阵,基于SVD的评3分估计
def svdEst(dataMat, user, simMeas, item):
n = shape(dataMat)[1] #获取物品的数量
simTotal = 0.0; ratSimTotal = 0.0
U,Sigma, VT = la.svd(dataMat)
Sig4 = mat(eye(4)*Sigma[:4])
xformedItems = dataMat.T*U[:,:4]*Sig4.I
for j in range(n):
userRating = dataMat[user,j]
if userRating == 0 or j==item: continue
similarity = simMeas(xformedItems[item,:].T,\
xformedItems[j,:].T)
print('the %d and %d similarity is:%f'%(item, j, similarity))
simTotal += similarity
ratSimTotal += similarity * userRating
if simTotal == 0:return 0
else: return ratSimTotal/simTotal def recommend(dataMat, user, N=3, simMeas=cosSim, estMethod=standEst):
"""
:param dataMat: 测试数据集, ex loadExData1()
:param user: 用户ID所对应的行号index, ex user=1
:param N: default N=3 N个推荐结果,默认设为3
:param simMeas: 默认相关性函数cosSim
:param estMethod: 默认基于物品相似度的推荐函数standEst
:return: N个推荐结果
"""
unratedItems = nonzero(dataMat[user,:].A==0)[1] #返回user=1行[0,0,0,0,0,0,0,0,0,0,5],中元素为0的列下标
if len(unratedItems) == 0:
return 'you rated everything'
itemScores = []
for item in unratedItems: # [0 1 2 3 4 5 6 7 8 9]
estimatedScore = estMethod(dataMat, user, simMeas, item)
itemScores.append((item, estimatedScore))
return sorted(itemScores, key=lambda jj: jj[1], reverse=True)[:N] if __name__ == '__main__':
data = mat(loadExData1())
re = recommend(data, 1)
print(re)
from django.db import connection
  select_sql = 'select * from model'
datas = pd.read_sql(select_sql, connection) # <pandas.core.frame.DataFrame'>
temp = datas.iloc[:, 2:] # 取出所有数据的 除了前两个字段
tp = temp.sum(axis=0) # 所有字段纵向相加
top_sorts = tp.sort_values(ascending=False) # 降序排序
top3 = top_sorts.index[:4]
top_recommends = top3.values.tolist()

推荐算法 pd的更多相关文章

  1. 【笔记3】用pandas实现矩阵数据格式的推荐算法 (基于用户的协同)

    原书作者使用字典dict实现推荐算法,并且惊叹于18行代码实现了向量的余弦夹角公式. 我用pandas实现相同的公式只要3行. 特别说明:本篇笔记是针对矩阵数据,下篇笔记是针对条目数据. ''' 基于 ...

  2. 推荐算法_CIKM-2019-AnalytiCup 冠军源码解读_2

    最近在为机器学习结合推荐算法的优化方法和数据来源想办法.抱着学习的态度继续解读19-AnalytiCup的冠军源码. 第一部分itemcf解读的连接:https://www.cnblogs.com/m ...

  3. 基于用户的协同过滤的电影推荐算法(tensorflow)

    数据集: https://grouplens.org/datasets/movielens/ ml-latest-small 协同过滤算法理论基础 https://blog.csdn.net/u012 ...

  4. Mahout推荐算法API详解

    转载自:http://blog.fens.me/mahout-recommendation-api/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, ...

  5. FP-tree推荐算法

    推荐算法大致分为: 基于物品和用户本身 基于关联规则 基于模型的推荐 基于物品和用户本身 基于物品和用户本身的,这种推荐引擎将每个用户和每个物品都当作独立的实体,预测每个用户对于每个物品的喜好程度,这 ...

  6. apriori推荐算法

    大数据时代开始流行推荐算法,所以作者写了一篇教程来介绍apriori推荐算法. 推荐算法大致分为: 基于物品和用户本身 基于关联规则 基于模型的推荐 基于物品和用户本身 基于物品和用户本身的,这种推荐 ...

  7. 推荐算法——距离算法

    本文内容 用户评分表 曼哈顿(Manhattan)距离 欧式(Euclidean)距离 余弦相似度(cos simliarity) 推荐算法以及数据挖掘算法,计算"距离"是必须的~ ...

  8. 将 Book-Crossing Dataset 书籍推荐算法中 CVS 格式测试数据集导入到MySQL数据库

    本文内容 最近看<写给程序员的数据挖掘指南>,研究推荐算法,书中的测试数据集是 Book-Crossing Dataset 提供的亚马逊用户对书籍评分的真实数据.推荐大家看本书,写得不错, ...

  9. 美团网基于机器学习方法的POI品类推荐算法

    美团网基于机器学习方法的POI品类推荐算法 前言 在美团商家数据中心(MDC),有超过100w的已校准审核的POI数据(我们一般将商家标示为POI,POI基础信息包括:门店名称.品类.电话.地址.坐标 ...

随机推荐

  1. 升级ambari、HDP版本(ambari 2.1升级到2.4、HDP2.3升级到2.5)

    转载自:http://blog.csdn.net/levy_cui/article/details/52461377 官方升级版本说明 http://docs.hortonworks.com/HDPD ...

  2. 【设计模式】JDK源码中用到的设计模式

    https://blog.csdn.net/angjunqiang/article/details/42061453 https://blog.csdn.net/baiye_xing/article/ ...

  3. CentOS6.5_64位系统下安装配置postfix邮件系统 启用并配置SMTP虚拟账户

    http://blog.jjonline.cn/linux/185.html http://www.cnblogs.com/apexchu/p/4271264.html 用户新增和删除 http:// ...

  4. java经典5种 FlowLayout 、BorderLayout、GridLayout、GridBagLayout、CardLayout布局

    Java 程序通过jvm可以很好的移植到其他平台上,但是java 生成的图形界面样式,在不使用布局的情况下,往往需要重新设定大小,才能在新的平台上调整到最佳样式.这是由于组件的最佳大小 往往是与平台相 ...

  5. ALGO-10_蓝桥杯_算法训练_集合运算(排序)

    问题描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行 ...

  6. C++11--编译器生成的函数

    using namespace std; class Dog {}; /* C++ 03 * 1 默认构造函数(只有当用户没有声明任何构造函数) * 2 拷贝构造(只有当用户没有声明5,6),扩展到C ...

  7. 【并发】基于 @Async和 CompletableFuture 实现并发异步操作

    参考链接:Spring官方示例 User.java package hello; import com.fasterxml.jackson.annotation.JsonIgnorePropertie ...

  8. Hadoop 新增删除节点

    1 新增Data节点 1.1 修改/etc/hosts,增加datanode的ip 1.2 在新增加的节点启动服务 hadoop-daemon.sh start datanode yarn-daemo ...

  9. Redis的5中数据类型

    Radis的作用相信既然然就就知道她的作用,但是对于刚开始对radis学习的初学者来说,理解起来比较费劲.这里就从开始一步步认识radis 首先要知道radis是存在内存中的数据,所以读取速度回更改, ...

  10. html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件

    html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件