栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

基于内容、用户算法推荐

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于内容、用户算法推荐

推荐算法:
1.获取数据集
2.根据数据集,做数据分析,分析一定规律(相似度)
3.人为定义阈值k,根据分析结果,做筛选
4.筛选 正相关 匹配  的内容
5.筛选出推荐内容 进行排序 加权计算
   权重:相似程度,偏好程度

第三方pandas模块:二维数据 dataframe数据集对象
1.创建数据集对象:
   dataframe = pandas.DataFrames(
                        数据data = 二维数据
                        列columns = 序列
                        行(索引)index = 序列 
   )
2.使用dataframe对象:
   dataframe.shape 数据集维度(n行m列)
   dataframe.dtype 数据集数据类型
   获取一行数据:
   dataframe.loc[行名/索引名]
   dataframe.iloc[n] 第n行数据
   获取多行数据:
   dataframe.loc[行名/索引名,行名/索引名....]
   dataframe.iloc[n:m] 从第n行到m-1行数据
   获取列数据
   dataframe[列名,列名....]
   排序:dataframe.sort_value(by=排序依据,ascending=True默认值为升序)

python中第三方模块matplotlib绘图

numpy中 皮尔逊相似函数 numpy.corrcoef()
不用pandas中dataframe数据集对象
直接numpy,做推荐?

基于内容推荐算法

##利用numpy生成二维数据 pandas数据分析
import numpy as np
import pandas as pd

##练习:依据上述 基于用户的推荐程序 设计一个 基于内容的推荐程序
##1.数据集 行=内容10 列=内容相关属性(要素)7 数据 二维数组
n = 20
m = 7
arr = np.random.randint(0,2,(n,m))
itemlist = ["item"+str(i) for i in range(n)]
attlist = ["att"+str(i) for i in range(m)]
data_df = pd.DataFrame(data=arr,columns=attlist,index=itemlist)
print(data_df)

##2.依据数据集 计算内容相似性 数据集
item_corr = data_df.T.corr(method="pearson")
print(item_corr)
##4.获取1个用户对 多个内容 偏好程度(1-3表示喜好程度 0表示没关系)
user_items_df = pd.DataFrame(data=np.random.randint(0,4,(1,n)),
                             columns=itemlist,index=["user"])
print(user_items_df)
##3.根据内容相似性 获取阈值的多个内容 筛选
##内容A 基于用户看过,相对比较喜欢的内容
##根据数据集 进行筛选 内容A
##itemA = "item0"
itemA = [key for key,value in user_items_df.loc["user"].items() if value > 2]
print(itemA)
k = 8

##根据itemA 序列 拿到 多行 item_corr 数据
itemA_corr = item_corr.loc[itemA]
print(itemA_corr)
##根据user_items_df 拿到 用户没看过的内容
user_missing_item = [key for key,value in user_items_df.loc["user"].items()
                     if value == 0]
print(user_missing_item)
##根据user_missing_item 和 itemA_corr 拿到 用户喜欢内容 和 用户没看过内容的 相似关系
itemA_missing_corr = itemA_corr[user_missing_item]
print(itemA_missing_corr)



'''
##遍历itemA
itemA_corr = []
for item in itemA:
    itemA_corr.append(item_corr.loc[item].sort_values(ascending=False)[1:k+1])
##itemA_corr 序列list 【数据集一行(类对象),数据集一行(类对象)...】
##定义变量 得到所有 相似内容 和 相似度
itemA_corr_obj = {} 
for item in itemA_corr:
    ##item 数据集一行(类对象) key:value  相似内容:相似程度
    for key,value in item.items():
        if value > 0: ##筛选出 正相关的相似内容
            ##判断 相似内容 在 itemA_corr_obj 里面是否存在
            if key in itemA_corr_obj.keys():
                itemA_corr_obj[key] += value
            else:
                itemA_corr_obj[key] = value
print(itemA_corr_obj)

##5.获取推荐给用户的内容
##用户没看过看过内容 相似内容 匹配
##根据 用户,内容,偏好 数据集 筛选 用户没看过内容
##python中转化函数enumerate(list/tuple) dir.items()
##将原序列转化新序列 新序列中每个元素(index/key,value)
user_missing_item = [key for key,value in user_items_df.loc["user"].items()
                     if value == 0]
print(user_missing_item)
##筛选 相似内容中 用户没看过
result = {key:value for key,value in itemA_corr_obj.items()
          if key in user_missing_item}

##6.对推荐给用户的内容进行排序
result = sorted(result.items(),key = lambda x:x[1],reverse = True)
result = [item[0] for item in result]
print(result)
'''



基于用户推荐算法

##利用numpy生成二维数据 pandas数据分析
import numpy as np
import pandas as pd

##定义用户个数n 内容个数m
n = 8
m = 10
##python中random.randint随机生成整型[start,end]
##numpy中np.random.randint随机生成数值 整型[start,end) 偏好程度数据
arr = np.random.randint(0,2,(n,m))
##print(arr)

##定义两个列表,放user用户,内容item
userlist = ["user"+str(i) for i in range(n)]
itemlist = ["item"+str(i) for i in range(m)]
##print(itemlist)

##1.形成 用户 内容 偏好 数据集
data_df = pd.DataFrame(data=arr,columns=itemlist,index=userlist)
##data_df = pd.read_csv("cf_data.csv")
print(data_df)

##2.根据数据集 数据分析 利用皮尔逊相似函数 计算用户之间的相似性
user_corr = data_df.T.corr(method="pearson")
print(user_corr)

##3.根据用户之间相似性,获取推荐用户A的相似用户
##人为定义阈值k,前k个推荐用户A的相似用户
userA = "user1"
k = 3
##获取 数据集 中 userA 这行的数据
userA_corr = user_corr.loc[userA]
##进行降序排序
userA_corr = userA_corr.sort_values(ascending=False)
##获取 前k个值
userA_corr = userA_corr[1:k+1]
##对前k个值 进行筛选 用户之间 正相关
##同时获取list列表的索引和值 for index,item in enumerate(list)
##遍历序列 字典 获取每个 key:value 判断 value>0
##for key,value in userA_corr.items():
##    if value > 0:
##        print(key,value)
##序列推导式 list = [i for i in 原序列 if 条件判断]
userA_corr = {key:value for key,value in userA_corr.items() if value > 0}       
print(userA_corr)

##4.获取推荐用户A 没看过的内容
##获取用户A 所有内容
userA_items = data_df.loc[userA]
##筛选出 没看过 值为0
userA_items = [ key for key,value in userA_items.items() if value == 0]
print(userA_items)

##5.获取相似用户 看过的内容 但是 用户A 没看过的 result
##获取用户相似用户 拿到userA_corr的key值
result = []
for key,value in userA_corr.items():
    ##获取相似用户 所有内容   筛选出 看过的 内容 值为1
    ##筛选 相似用户看过内容 不能重复 必须是用户A没看过的
    result += [index for index,val in data_df.loc[key].items()
      if val == 1 and index not in result and index in userA_items]
print(result)

##6.获取 要推荐给用户A的内容 result 推荐需不要顺序?要,加权计算
##推荐给用户A内容 多个item 看每个item 在相似用户中偏好程度 加权计算
##不同相似用户 权重不同 相似度就是相似用户的权重
##计算每一个item 权重=相似用户的权重*相似用户的喜好程度
res_sort = {}
for item in result:
    ##定义变量 item_qz 作为每个item的权重数
    item_qz = 0
    ##遍历相似用户 获取 相似用户是谁?key 相似度有多少?vlaue
    for key,value in userA_corr.items():
        item_qz += value * data_df.loc[key][item]
    res_sort[item] = item_qz
##字典中没有内置方法进行排序,利用python语言内置函数sorted()进行排序
##sorted(序列,排序的依据key,升降序reverse=False)
##字典.items()  key,value
res_sort = sorted(res_sort.items(),key=lambda x:x[1],reverse=True)
res_sort = [item[0] for item in res_sort]
print(res_sort)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/918566.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号