關聯規則分析也稱購物籃分析。
常用關聯規則分析
演算法名稱
演算法描述
apriori
最經典的挖掘頻繁項集的演算法,其核心思想是通過連線產生候選項及其支援度然後通過剪枝生成頻繁項集
fp-tree
針對apriori演算法固有的多次掃瞄事物資料集的缺陷,提出的不產生候選頻繁項集的方法,也是尋找頻繁項集的演算法
eclat演算法
一種深度優先演算法,採用垂直資料表示形式,在概念格理論的舉出上利用基於字首的等價關係將搜尋空間劃分為較小的子空間
灰色關聯法
分析和確定各因素之間的影響程度或是若干個子因素對主因素的貢獻度而進行的一種分析方法
apriori演算法
其核心思想是通過連線產生候選項與支援度,然後通過剪枝生成頻繁項集。
apriori演算法詳解
apriori演算法實現**
#使用apriori演算法挖掘菜品訂單關聯規則
#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)), x))
l = len(x[0])
r =
for i in range(len(x)):
for j in range(i,len(x)):
if x[i][:l-1] == x[j][:l-1] and x[i][l-1] != x[j][l-1]:
return r
#尋找關聯規則的函式
def find_rule(d, support, confidence, ms = u'--'):
result = pd.dataframe(index=['support', 'confidence']) #定義輸出結果
support_series = 1.0*d.sum()/len(d) #支援度序列
column = list(support_series[support_series > support].index) #初步根據支援度篩選
k = 0
while len(column) > 1:
k = k+1
print(u'\n正在進行第%s次搜尋...' %k)
column = connect_string(column, ms)
print(u'數目:%s...' %len(column))
sf = lambda i: d[i].prod(axis=1, numeric_only = true) #新一批支援度的計算函式
#建立連線資料,這一步耗時、耗記憶體最嚴重。當資料集較大時,可以考慮並行運算優化。
d_2 = pd.dataframe(list(map(sf,column)), index = [ms.join(i) for i in column]).t
support_series_2 = 1.0*d_2[[ms.join(i) for i in column]].sum()/len(d) #計算連線後的支援度
column = list(support_series_2[support_series_2 > support].index) #新一輪支援度篩選
column2 =
for i in column: #遍歷可能的推理,如究竟是a+b-->c還是b+c-->a還是c+a-->b?
i = i.split(ms)
for j in range(len(i)):
cofidence_series = pd.series(index=[ms.join(i) for i in column2]) #定義置信度序列
for i in column2: #計算置信度序列
cofidence_series[ms.join(i)] = support_series[ms.join(sorted(i))]/support_series[ms.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[ms.join(sorted(i.split(ms)))]
result = result.t.sort(['confidence','support'], ascending = false) #結果整理,輸出
print(u'\n結果為:')
print(result)
return result
inputfile = 'c:/users/asus/desktop/python/chapter5/demo/data/menu_orders.xls'
outputfile = 'c:/users/asus/desktop/apriori.xls'
data = pd.read_excel(inputfile,header = none)
print(u'\n轉化原始資料至0-1矩陣')
ct = lambda x :pd.series(1, index = x[pd.notnull(x)]) #轉換0-1矩陣的過渡函式
b = map(ct, data.as_matrix()) #用map方式執行
data = pd.dataframe(list(b)).fillna(0) #實現矩陣轉換,空值用0填充
print(u'轉換完畢')
del b #刪除中間變數b ,節省記憶體
support = 0.2 #最小支援度
confidence = 0.5 #最小置信度
ms = '---'
find_rule(data, support, confidence, ms).to_excel(outputfile)
關聯規則挖掘
關聯規則反映事物之間的相互依存性和關聯性。如果事物之間存在一定的關聯,那麼我們就可以通過乙個事物去 另乙個事物。我們要挖掘大量資料中人們感興趣的,有價值的資訊,包括概念,規則,規律等。關聯規則 發現資料中的規律 超市中什麼產品會 起購買?組合推薦 顧客在買了 臺pc之後下 步會購買?搭配推薦 哪種d...
關聯規則挖掘
直接用例項來解釋概念更清楚一些,加入資料庫中存在10條交易記錄 transaction 具體如下表所示 交易id tid 購買商品 items b bread c cream m milk t tea t01b c m t t02b c m t03c m t04m t t05b c m t06b t...
關聯規則挖掘
1.基本概念 關聯規則挖掘是指尋找給定資料集中項之間的有趣關聯或相關聯絡。可以幫助許多決策的制定,如分類設計 交叉購物和賤賣分析。典型的例子就是購物籃分析。2.關聯規則的步驟 1 找出所有的頻繁項集 這些項集出現的頻繁性至少和預定義的最小支援數一樣 2 由頻繁項集產生強關聯規則 這些規則必須滿足最小...