推荐算法 pd
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的更多相关文章
- 【笔记3】用pandas实现矩阵数据格式的推荐算法 (基于用户的协同)
原书作者使用字典dict实现推荐算法,并且惊叹于18行代码实现了向量的余弦夹角公式. 我用pandas实现相同的公式只要3行. 特别说明:本篇笔记是针对矩阵数据,下篇笔记是针对条目数据. ''' 基于 ...
- 推荐算法_CIKM-2019-AnalytiCup 冠军源码解读_2
最近在为机器学习结合推荐算法的优化方法和数据来源想办法.抱着学习的态度继续解读19-AnalytiCup的冠军源码. 第一部分itemcf解读的连接:https://www.cnblogs.com/m ...
- 基于用户的协同过滤的电影推荐算法(tensorflow)
数据集: https://grouplens.org/datasets/movielens/ ml-latest-small 协同过滤算法理论基础 https://blog.csdn.net/u012 ...
- Mahout推荐算法API详解
转载自:http://blog.fens.me/mahout-recommendation-api/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, ...
- FP-tree推荐算法
推荐算法大致分为: 基于物品和用户本身 基于关联规则 基于模型的推荐 基于物品和用户本身 基于物品和用户本身的,这种推荐引擎将每个用户和每个物品都当作独立的实体,预测每个用户对于每个物品的喜好程度,这 ...
- apriori推荐算法
大数据时代开始流行推荐算法,所以作者写了一篇教程来介绍apriori推荐算法. 推荐算法大致分为: 基于物品和用户本身 基于关联规则 基于模型的推荐 基于物品和用户本身 基于物品和用户本身的,这种推荐 ...
- 推荐算法——距离算法
本文内容 用户评分表 曼哈顿(Manhattan)距离 欧式(Euclidean)距离 余弦相似度(cos simliarity) 推荐算法以及数据挖掘算法,计算"距离"是必须的~ ...
- 将 Book-Crossing Dataset 书籍推荐算法中 CVS 格式测试数据集导入到MySQL数据库
本文内容 最近看<写给程序员的数据挖掘指南>,研究推荐算法,书中的测试数据集是 Book-Crossing Dataset 提供的亚马逊用户对书籍评分的真实数据.推荐大家看本书,写得不错, ...
- 美团网基于机器学习方法的POI品类推荐算法
美团网基于机器学习方法的POI品类推荐算法 前言 在美团商家数据中心(MDC),有超过100w的已校准审核的POI数据(我们一般将商家标示为POI,POI基础信息包括:门店名称.品类.电话.地址.坐标 ...
随机推荐
- pyhanlp 中文词性标注与分词简介
pyhanlp 中文词性标注与分词简介 pyhanlp实现的分词器有很多,同时pyhanlp获取hanlp中分词器也有两种方式 第一种是直接从封装好的hanlp类中获取,这种获取方式一共可以获取五种分 ...
- 深入理解java虚拟机读后总结(个人总结记录)
1.jvm布局: jdk1.6版本JVM布局分为:heap(堆),method(方法区),stack(虚拟机栈),native stack(本地方法栈),程序计数器共五大区域. 其中方法区包含运行 ...
- kindle电子书下载搜索
kindle电子书下载搜索 https://sokindle.com/ https://sobooks.cc/
- mig_7series DDR控制器的配置
mig_7series DDR控制器的配置
- 阅读OReilly.Web.Scraping.with.Python.2015.6笔记---Crawl
阅读OReilly.Web.Scraping.with.Python.2015.6笔记---Crawl 1.函数调用它自身,这样就形成了一个循环,一环套一环: from urllib.request ...
- STL基础--流
流 介绍 // cout: 全局ostream对象,(typedef basic_ostream<char> ostream) // <<: ostream& ostr ...
- 【深度学习】BP反向传播算法Python简单实现
转载:火烫火烫的 个人觉得BP反向传播是深度学习的一个基础,所以很有必要把反向传播算法好好学一下 得益于一步一步弄懂反向传播的例子这篇文章,给出一个例子来说明反向传播 不过是英文的,如果你感觉不好阅读 ...
- “国家重点实验室”完全名单_洹水泛舟_新浪博客 - Google Chrome
“国家重点实验室”完全名单 单位名称(序号) 国家重点实验室名称 建设单位 中国科学院(73) 1 半导体超晶格国家重点实验室 中国科学院半导体研究所 2 应用光学国家重点实验室 中 ...
- PAT 乙级 1071 小赌怡情(15 分)
1071 小赌怡情(15 分) 常言道“小赌怡情”.这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算机给出第二个数.若玩 ...
- redis(redis概念,运用场景,如何操作基本数据类型)
什么是redis:Nosql一种缓存数据库 redis可以干什么:redis可以减轻对数据库的请求压力如果不使用缓存:客服端->控制层->业务层->dao层使用缓存:客服端-> ...