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)
部分运行结果展示--------
频繁项集: 关联规则:

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

浙公网安备 33010602011771号