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. 如何在linux服务器上使用hanlp

    关于如何在linux服务器上使用hanlp也有分享过一篇,但分享的内容与湘笑的这篇还是不同的.此处分享一下湘笑的这篇hanlp在linux服务器上使用的文章,供新手朋友学习之用. 本文主要工作是在li ...

  2. hadoop 2.7.1安装和配置

    一.安装环境 硬件:虚拟机 操作系统:Centos 6.4 64位 IP:192.168.241.128主机名:admin安装用户:root 二.安装JDK 安装JDK1.7或者以上版本.这里安装jd ...

  3. MATLAB 绘透视图

    MATLAB绘图随记(1)--如何画一个透明平面 http://blog.sina.com.cn/s/blog_5cd4cccf0100q90p.html 小老板让我绘个图 找了些资料 最后发现mat ...

  4. BlockingQueue队列

    1.BlockingQueue定义的常用方法如下     抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e,time,unit) 移除 remove() ...

  5. mysql 锁2

    官网地址 https://dev.mysql.com/doc/refman/5.5/en/innodb-transaction-isolation-levels.html 这里主要是说事务隔离级别,以 ...

  6. android 5.0安装应用冲突问题

    公司二款产品无法同时安装 为了查看原因 用adb命令安装((adb 命令要配置环境环境,path 盘符+adt-bundle-windows-x86-20140702\sdk\platform-too ...

  7. [UE4]使用UFUNCTION注意事项

    #pragma once #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include ...

  8. Mybatis 系列9-强大的动态sql 语句

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

  9. 01.String类字符串本质

    String类是在java开发过程中,使用最最频繁的一个类,不管是 用户名 密码 还是http报文接收过来的数据,其本质就是字符序列 所以做为一个java开发者,我们要重点掌握好String的方法使用 ...

  10. U3D学习11——nav导航和动画

    一.nav导航 1.nav mesh agent 2.off mesh link 3.navigation面板-areas标签的应用,导航分层 二.动画 1.avatar可重用. 2.Animator ...