MovieLens 電影分類中的頻繁項集和關聯規則
阿新 • • 發佈:2020-10-12
場景:當用戶給自己喜歡的電影打標籤時,我們可以通過關聯規則進行標籤推薦,從而提升使用者體驗。
資料集: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)
今天天氣不錯,如有疏漏,還望批評指正。