概念
- 支持度:指某個組合商品出現的次數與總數之間的比例
- 置信度:條件概念,在A發生的情況下,B發生的概率
- 提升度: 提升度(A->B) = 置信度(A->B)/支持度(B) 這是用來衡量A出現的情況下,是否會對B出現的概率有提升。若提升度大於1說明有,等於1說明沒有,小於1說明會導致B下降。
APRIORI算法的工作原理
- 說白了Apriori算法就是查找頻繁項集(Frequent Itemset)的過程- 頻繁項集:支持度大於等於最小支持度(Min support)閾值的項集- 算法流程:
- K=1,計算K項集的支持度
- 篩選掉小於最下支持度的項集
- 如果項集爲空,則對應K-1項集的結果爲最終結果,否則K=K+1重複1-3
APRIORI算髮的缺點
- 可能產生大量的候選集2. 每次計算都需要重新掃描數據集,來計算每個項集的支持度3. 浪費大量的時間和空間
FP-Growth算法
- 針對APRIORI算法的缺點,FP-Growth算法創建了一顆FP樹來存儲頻繁項集。在創建前對不滿足最小支持度的項進行刪除,減少存儲空間,並且整個生成過程,只遍歷數據集兩次
FP-Growth算法的流程
- 創建項頭表(包括項目、支持度),以及該項在FP樹中的鏈表(初始爲空)
- 構造FP樹,按照支持度從高到低的順序創建節點,節點如果存在就將計數countr+1 ,不存在就進行創建。
- 通過FP樹挖掘頻繁項集。
Python實戰
導入相關的jar包
pip install efficient_aprioi
`### 核心代碼
itemset, rules = apriori(data, min_support, min_cofidence)
- data:要提供的數據集(LIST類型)
- min_support:最小支持度
- min_cofidence:最小置信度
- itemset:頻繁項集
- rules:頻繁規則
挖掘王晶選演員的特點
- 首先獲取王晶導演的電影,並且爬取電影的演員信息,信息如下(後面有時間我會寫如何獲取信息):2. python代碼
# -*- coding: utf-8 -*-
from efficient_apriori import apriori
import pandas as pd
import numpy as np
df = pd.read_csv("ninghao.csv", encoding='utf-8-sig')
stars = np.array(df['stars'])
data = []
for star in stars:
names = star.split(',')
new_name = []
for name in names:
tmp = name[2:-2]
new_name.append(tmp)
if len(new_name)>1:
data.append(new_name)
print(data)
itemsets, rules = apriori(data, min_support=0.1, min_confidence=1)
print(itemsets)
print(rules)
- 結果如圖
- itemsets
- 可以看出甯浩導演喜歡黃渤和徐崢搭配
- rules
- 可以看出有黃渤的話基本會有甯浩自己