1. 程式人生 > 實用技巧 >MovieLens 電影分類中的頻繁項集和關聯規則

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)

今天天氣不錯,如有疏漏,還望批評指正。