關聯規則通過量化的數字描述物品甲的出現對物品乙的出現有多大的影響。它的模式屬於描述型模式,發現關聯規則的演算法屬於無監督學習的方法。其實是一種事物相關性的**。
通過對比支援度,進行剪枝,將支援度高的分支留下,繼續探尋關聯,直到再沒有高於最小支援度為止。
應用場景比較廣泛,購物籃資料,醫療診斷,科學資料分析。
首先資料方面,要把資料轉換為0,1 的形式,1代表有,0代表無,每一項集的中元素相乘結果為1,則證明有該項集有結果,在通過求和後求佔比,即是該項集支援度。
再通過置信度檢驗是否為強規則。
實現**:
def find_rule(data, support, confidence):
result = pd.dataframe(index=['support', 'confidence']) # 定義輸出結果
support_series = round(1.0 * data.sum() / len(data), 6) # 支援度序列
column = list(support_series[support_series > support].index) # 初步根據支援度篩選
k = 0
while
len(column) > 1:
k += 1
print("正在搜尋{}元項集".format(k))
column = connect_string(column)
# 通過相乘得1 確認項集結果
sf = lambda i: data[i].prod(axis=1, numeric_only=true) # 新一批支援度的計算函式
# 用map函式分布式求解,加快運算速度
data_new = pd.dataframe(list(map(sf, column)), index=['-'.join(i) for i in column]).t
# 計算佔比(支援度)
support_series_new = round(data_new[['-'.join(i) for i in column]].sum() / len(data),6)
# 通過支援度剪枝
column = list(support_series_new[support_series_new > support].index)
column_new =
for i in column:
i = i.split('-')
for j in range(len(i)):
# 先行定義置信度序列,節約計算時間
cofidence_series = pd.series(index=['-'.join(i) for i in column_new])
for i in column_new: # 計算置信度序列
cofidence_series['-'.join(i)] = support_series['-'.join(sorted(i))] / support_series['-'.join(i[:len(i) - 1])]
for i in cofidence_series[cofidence_series > confidence].index: # 置信度篩選
result[i] = 0.0
result[i]['confidence'] = cofidence_series[i]
result[i]['support'] = support_series['-'.join(sorted(i.split('-')))]
return
result.t
def trans_index(x):
rename =
foritem
in x.split('-'):
return
"-".join(rename)
if __name__ == '__main__':
inputfile = 'data/income.csv'
outputfile = 'tmp/income.csv'
data = pd.read_csv(inputfile)
del data['unnamed: 0']
# 儲存原列標
origin_columns = list(data.columns)
# 替換列標
data.columns = np.arange(0, len(origin_columns)).astype(str)
# 設定最小支援度
support = 0.3
# 設定最小置信度
confidence = 0.5
result = find_rule(data, support, confidence).reset_index()
# 將關係名稱換回原來的
result = result.set_index('index')
print("*"*20, "結果", "*"*20)
print(result)
result.to_csv(outputfile)
結果也可以寫成鍵值對的形式存入redis 資料庫,方便搜尋呼叫。 Apriori關聯規則演算法
例子 支援度 支援度是乙個百分比,指某個商品組合出現的次數與總次數之間的比例,支援度越高表示該組合出現的機率越大。在上面圖中我們可以發現 牛奶 出現了 4 次,那麼這 5 筆訂單中 牛奶 的支援度就是 4 5 0.8。同樣 牛奶 麵包 出現了 3 次,那麼這 5 筆訂單中 牛奶 麵包 的支援度就是 ...
關聯規則挖掘 Apriori演算法
1 apriori 介紹 apriori演算法使用頻繁項集的先驗知識,使用一種稱作逐層搜尋的迭代方法,k項集用於探索 k 1 項集。首先,通過掃瞄資料庫,累積每個項的計數,並收集滿足最小值尺度的項,找出頻繁 1 項集的集合,該集合記做 l1 然後利用 l1 找頻繁 2 項集的集合 l2 l2 找 l...
關聯規則 Apriori演算法實現
coding utf 8 from future import print function import pandas as pd 自定義連線函式,用於實現l 到c k的連線 def connect string x,ms x list map lambda i sorted i.split ms...