MovieLens 电影分类中的频繁项集和关联规则

场景:当用户给自己喜欢的电影打标签时,我们可以通过关联规则进行标签推荐,从而提升用户体验。

数据集:MovieLens

下载地址:https://www.kaggle.com/jneupane12/movielens/download

主要使用的文件:movies.csv

格式:movieId title genres

 完整代码:

import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

# 数据加载
movies = pd.read_csv('./movies.csv')
print(movies.head())
# 查看genres类型列的数据
print(movies['genres'])
# 将genres进行one-hot编码(离散特征有多少取值(就是说整个数据集有多少个电影类型),就用多少维来表示这个特征)
# 使用'|'来告诉程序,电影类型之间使用'|'隔开的
# drop('genres', 1) 先把genres列去掉,后面分割之后再拼接上
# 先把genres转换为字符串类型,然后 get_dummies(sep='|') 按竖线进行分割
movies_hot_encoded = movies.drop('genres', 1).join(movies.genres.str.get_dummies(sep='|'))
# 展示0-1热编码之后的结果
print(movies_hot_encoded)
# 设置大一点,有些列显示出来就不是省略号,就可以看到数据
pd.options.display.max_columns = 100
print(movies_hot_encoded.head())

# 分隔线啊啊啊啊啊啊啊啊啊
print("#################################")

# movies_hot_encoded是0-1热编码之后的数据集

# 将movieId, title同时设置为index(此操作可以把默认生成的第一列index0,1,2,3,...替换掉)
movies_hot_encoded.set_index(['movieId', 'title'], inplace=True)
print(movies_hot_encoded.head())
# 挖掘频繁项集,最小支持度为0.02
itemsets = apriori(movies_hot_encoded, use_colnames=True, min_support=0.02)
# 按照支持度从大到小进行输出(默认ascending=True,我们改成False就行了)
itemsets = itemsets.sort_values(by="support", ascending=False)
print('-' * 20, '频繁项集', '-' * 20)
print(itemsets)
# 根据频繁项集计算关联规则,设置最小提升度为2
rules = association_rules(itemsets, metric='lift', min_threshold=2)
# 按照提升度从大到小进行排序
rules = rules.sort_values(by="lift", ascending=False)
# 得到的关联规则本地保存
rules.to_csv('./rules.csv', index=False)
print('-' * 20, '关联规则', '-' * 20)
print(rules)

部分运行结果展示--------

频繁项集:                                                                                      关联规则:

       

如有疏漏,还望批评指正。

 

posted @ 2020-10-12 19:39  mingke07  阅读(1195)  评论(1)    收藏  举报