關聯分析(Association analysis)

關聯分析(Association analysis)

簡介

大量數據中隱藏的關系可以以‘關聯規則’和‘頻繁項集’的形式表示。rules:{Diapers}–>{Beer}說明兩者之間有很強的關系,購買Diapers的消費者通常會購買Beer。?
除了應用在市場籃子數據(market basket data)中,關聯分析(association analysis)也可以應用在其他領域像bioinfomatic(分析復雜生物知識的學科)、medical diagnosis、Web mining和scientific data analysis。?
在關聯分析中有兩個問題需要解決:1,從大量交易數據中發現隱藏的模式需要大量運算;2,有些模式可能只是剛好發生,因此這些模式是虛假的。所以以下內容包括兩點:1,利用某種算法高效的挖掘這種模式;2,通過評估這些模式避免產生虛假結果。1?
下面以market basket data分析為例:?
這里寫圖片描述

幾個概念:

  • Itemset?
    I=i1,i2,?,id是所有項的集合。在association analysis中,0或更多項的集合稱為itemset,具有k項的itemset稱為k-itemset。
  • support count?
    包含某個特定的Itemset的交易數目。在表6.1中2-itemset{Bread,Milk}的support count:σ({Bread,Milk})=3(1)
  • rule?
    規則,不難理解,XY(XY=?),箭頭左邊稱為先決條件(antecedent),箭頭右邊稱為結果(consequent)
  • support?
    某一項集或規則發生次數占總交易次數的百分比。s(XY)=s({X,Y})=σ(XY)N(2)
    例如:項集{Bread,Milk}的support為35
  • confidence?
    X發生時Y發生的概率,也即條件概率。?
    Confidence,c(XY)=σ(XY)σ(X)(3)

尋找關聯規則的兩個步驟

給定一個交易集合T,尋找所有的滿足supportminsup,并且confidenceminconf的規則,minsup和minconf是相應的support和confidence的閾值。?
一種尋找關聯規則的方法是計算每一條可能規則的support和confidence,也就是我們說的蠻力法。這種方法需要大量的運算,因為規則的個數是呈指數增長的。一個包含d個項的數據集可以提取出的規則的數目是

R=3d?2d+1+1()

既然我們不想使用蠻力法,那么應該使用什么方法來尋找關聯規則呢?從上式(1)可以看出規則 XY 的support僅僅依賴于相應的項集 XY 的support。例如,下面的規則的support完全相同,因為他們有相同的項集{Beer,Diapers,Milk}:?
{Beer,Diapers} {Milk},{Beer,Milk} {Diapers},{Diapers,Milk} {Beer},{Beer} {Diapers,Milk},{Milk} {Beer,Diapers},{Diapers} {Beer,Milk}?
如果項集{Beer,Diapers,Milk}不是頻繁的,那么可以直接裁剪掉以上所有6個候選規則。?
因此,許多關聯規則挖掘算法將這個問題分解成兩個主要子任務:?
- 產生頻繁項集:尋找所有達到support閾值的項集。?
- 產生規則:從頻繁項集中提取具有高置信度的規則,這些規則稱為強規則。 2

產生頻繁項集

Apriori原理

我們可以使用枚舉法列舉出所有可能的k-itemset,然后計算每個項集的support。一個具有m項的數據集可以產生2m?1個項集,而其中滿足support閾值的項集可能很少。顯然,當數據集很大時,枚舉法并不是個高效的方法。從下圖可以看出,有4個項的數據集,共有15個項集。?
圖來自 機器學習實戰?
為了提高尋找頻繁項集的效率,我們應該把那些不可能滿足support閾值的項集裁剪掉。?
Apriori原理:如果一個項集是頻繁的,那么它的子項集也一定是頻繁的?
反過來說,如果一個項集不是頻繁的,那么它的父項集也一定不是頻繁的。下圖加了陰影的項集被裁剪掉。?
這里寫圖片描述?
來自 機器學習實戰?
根據以上原理,我們可以從上往下尋找頻繁項集。也就是,首先尋找頻繁項集:1-itemset,然后再由1-itemset組合成2-itemset…..(其實上圖的例子并沒有減少需要計算support的項集個數(這個是不是程序需要改進??怎么只有1-itemset是infrequent的時候才能減少需要計算的項集數),如果 3 是infrequent的,那么以下包含3的項集可以全部忽略)?
偽代碼?
1. 計算得到頻繁項集1-itemset的集合:Iii=1?
2. k=2?
當 kle項的個數N時:?
Ik=generateIk(D,Ii)?…從I_i中產生頻繁項集的集合Ii+1?
i=k,k++

其中,generateIk函數是從k-itemset產生(k+1)-itemset?
這個函數包含兩個過程:連接和篩選。?
- 連接?
當確定了一個頻繁項集k-itemset的全部集合后,它需要和自身連接,生成k+1-itemset。所謂連接,就是兩個不同的頻繁項集k-itemset,當它們的前(k-1)項都相同時,就進行合并。?
- 篩選?
從上面的定理我們得知,當子項不是頻繁項集時,父項也一定不是頻繁項集。但當子項都是頻繁項集時,其父項卻不一定是頻繁項集。因此,在連接得到(k+1)-itemset后,還需要計算它的support,如果不滿足support的閾值,那么就刪去。

python程序

下面的程序和 機器學習實戰 中的程序思想基本相同,但我個人感覺書中的程序有些難以理解,因此自己寫了一個。 感謝 機器學習實戰 作者

'''產生頻繁項集'''
def genFreqItemset(dataSet,minSupp=0.5):'''input:dataSet:training data,type:listoutput:freqSet:a list of all the k-itemset.each element is frozensetsupport:a dict,the support of frequent itemset'''unique_value={}I1=[]support={}freqSet=[]m=len(dataSet)for tran in dataSet:for item in tran:if item not in unique_value.keys():unique_value[item]=0unique_value[item]+=1for item in unique_value.keys():supp=float(unique_value[item])/mif supp>=minSupp:I1.append(frozenset([item]))  #frozeset can serve as a key to dictionarysupport[frozenset([item])]=supp #only record the support of frequent itemsetI1.sort();freqSet.append(I1)k=2Lk=[]while k<=m:Lk=generateLk(freqSet[k-2],k)Lk,LkSupp=filterLk(dataSet,Lk,minSupp)freqSet.append(Lk)support.update(LkSupp)k+=1return freqSet,supportdef generateLk(freq,k):'''input:freq:  the itemset in freq is k-1 itemsetk:  create k-itemset from k-1_itemsetoutput:Lk:a list of k-itemset,frequent and infrequent'''Lk=[]for i in range(0,len(freq)-1):for j in range(i+1,len(freq)):if list(freq[i])[0:k-2]==list(freq[j])[0:k-2]:#fore k-1 item is identityLk.append(frozenset(freq[i]|freq[j]))return Lkdef filterLk(dataSet,Lk,minSupp=0.5):'''input:  Lk: all the k-itemset that need to be prunedoutput:filteredLk: frequent k-itemset which satisfy the minimum supportLkSupp: the support of frequent k-itemset'''LkSupp={}filteredLk=[]for itemset in Lk:supp=calcSupport(dataSet,itemset)if supp>=minSupp:LkSupp[frozenset(itemset)]=suppfilteredLk.append(frozenset(itemset))return filteredLk,LkSuppdef calcSupport(dataSet,Lk):'''calculate the support of Lk,Lk is a frozenset'''# Lk=list(Lk)[0]dataSet=map(set,dataSet)m=len(dataSet)num=0for tran in dataSet:if Lk.issubset(tran):num+=1return float(num)/m
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83

測試

>>> dataSet
[[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
>>> Lk,support=apriori_f.genFreqItemset(dataSet,0.5)
>>> Lk[0]
[frozenset([1]), frozenset([2]), frozenset([3]), frozenset([5])]
>>> Lk[1]
[frozenset([1, 3]), frozenset([2, 3]), frozenset([2, 5]), frozenset([3, 5])]
>>> Lk[2]
[frozenset([2, 3, 5])]
>>> Lk[3]
[]
>>> support
{frozenset([5]): 0.75, frozenset([3]): 0.75, frozenset([2, 3, 5]): 0.5, frozenset([3, 5]): 0.5, frozenset([2, 3]): 0.5, frozenset([2, 5]): 0.75, frozenset([1]): 0.5, frozenset([1, 3]): 0.5, frozenset([2]): 0.75}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

從頻繁項集中提取強規則

修剪

從頻繁項集中提取規則保證了這些規則的support一定滿足minsupport,接下來就是置信度的計算。同樣,我們可以使用蠻力列舉所有可能的規則,并計算其置信度,但這樣我們會做許多無用功。一個包含n項的頻繁項集,可能產生的規則數是2n?1。?
為了提高效率,我們采用同前面Apriori算法類似的裁剪方法:?
如果XY?X不滿足最小置信度,那么XY?X(X?X)也一定不滿足最小置信度。?
證明:c(XY?X)=support(Y)support(X)<minConfidence?
c(XY?X)=support(Y)support(X),其中,support(X)support(X),所以有c(XY?X)<minConfidence?
如下圖:?
這里寫圖片描述?
圖中添加陰影的規則全部被裁剪掉。

python程序

def getBigRule(freq,support,minConf=0.5):'''input:  freq   : the frequent k-itemset,k=1,2,...nsupport:  corresponding support  outpur:bigRuleList: a list of all the rule that satisfy min confidence'''bigRuleList=[]m=len(freq)for i in range(1,m):genRules(freq[i],support,bigRuleList,minConf)return bigRuleListdef genRules(freq,support,brl,minConf=0.5):'''extract rules that satisfy min confidence from a list of k-itemset(k>1)put the eligible rules in the brl'''if len(freq)==0:returnif len(freq[0])==2: #handle 2-itemsetfor itemset in freq:for conseq in itemset:conseq=frozenset([conseq])conf=support[itemset]/support[itemset-conseq]if conf>=minConf:print itemset-conseq, '-->',conseq,'conf:',confbrl.append((itemset-conseq,conseq,conf))elif len(freq[0])>2:H=[]for itemset in freq:# first generate 1-consequence listfor conseq in itemset:conseq=frozenset([conseq])conf=support[itemset]/support[itemset-conseq]if conf>=minConf:print itemset-conseq, '-->',conseq,'conf:',confbrl.append((itemset-conseq,conseq,conf))H.append(conseq)m=2#  generate 2,...,k-1 consequencewhile m<len(freq[0]):H=generateLk(H,m)for conseq in H:conf=support[itemset]/support[itemset-conseq]if conf>=minConf:print itemset-conseq, '-->',conseq,'conf:',confbrl.append((itemset-conseq,conseq,conf))m+=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

利用以上得到的頻繁項集測試:

>>> brl=apriori_f.getBigRule(freqSet,support,0.7)
frozenset([1]) --> frozenset([3]) conf: 1.0
frozenset([5]) --> frozenset([2]) conf: 1.0
frozenset([2]) --> frozenset([5]) conf: 1.0
frozenset([3, 5]) --> frozenset([2]) conf: 1.0
frozenset([2, 3]) --> frozenset([5]) conf: 1.0
>>> brl
[(frozenset([1]), frozenset([3]), 1.0), (frozenset([5]), frozenset([2]), 1.0), (frozenset([2]), frozenset([5]), 1.0), (frozenset([3, 5]), frozenset([2]), 1.0), (frozenset([2, 3]), frozenset([5]), 1.0)]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

參考資料:

[1] 機器學習實戰?
[2]?使用Apriori算法和FP-growth算法進行關聯分析


  1. Introduction to data mining Ch6??
  2. Introduction to data mining Ch6??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387249.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387249.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387249.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習11主成分分析

降維(Dimensionality Reduction) &#xff1a; 一、 降維目的&#xff1a; 目的一&#xff1a;數據壓縮&#xff08;Data Compression&#xff09; 目的二&#xff1a;數據可視化&#xff08;Visualization&#xff09; 二、 主成分分析&#xff08;PCA&#xff09; 主成分…

使用Apriori進行關聯分析(一)

使用Apriori進行關聯分析&#xff08;一&#xff09;大型超市有海量交易數據&#xff0c;我們可以通過聚類算法尋找購買相似物品的人群&#xff0c;從而為特定人群提供更具個性化的服務。但是對于超市來講&#xff0c;更有價值的是如何找出商品的隱藏關聯&#xff0c;從而打包促…

主成分分析法 (PCA) 用于數據可視化實驗 -- Matlab版

第一步&#xff1a;下載數據集。 https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass.html#pendigits 第二步&#xff1a;改變數據格式。 注&#xff1a;此數據集的各特征值均為像素&#xff0c;即屬于同一量綱&#xff0c;故無需歸一化步驟。 原格式為&a…

后端視角下的前端框架之Vue.js初探

背景 作為常年搞后端的自己來說&#xff0c;除了多年前學習的一點關于HTML的皮毛&#xff0c;對現在的前端技術棧可謂是一竅不通。但是因為最近在做的內部業務全鏈路監控系統&#xff0c;負責前端的同事做到一半去搞別的項目了&#xff0c;為了把項目落地不得不硬著頭皮學一下前…

機器學習12推薦系統

推薦系統(Recommender Systems) 推薦系統根據瀏覽用戶過去買過什么書&#xff0c;或過去評價過什么電影來判斷并推薦新產品給用戶。 這些系統會為像亞馬遜和網飛這樣的公司帶來很大一部分收入。 因此&#xff0c;對推薦系統性能的改善&#xff0c;將對這些企業的有實質性和…

使用Apriori進行關聯分析(二)

使用Apriori進行關聯分析&#xff08;二&#xff09;書接上文&#xff08;使用Apriori進行關聯分析&#xff08;一&#xff09;&#xff09;&#xff0c;介紹如何挖掘關聯規則。發現關聯規則我們的目標是通過頻繁項集挖掘到隱藏的關聯規則。所謂關聯規則&#xff0c;指通過某個…

Apache Tomcat 7 Configuration BIO NIO AIO APR ThreadPool

Apache Tomcat 7 Configuration Reference (7.0.93) - The Executor (thread pool)https://tomcat.apache.org/tomcat-7.0-doc/config/executor.html Tomat組件研究之ThreadPool - 老碼農的專欄 - CSDN博客https://blog.csdn.net/chen77716/article/details/344764 Tomcat中的線…

數學筆記3——導數3(隱函數的導數)

數學筆記3——導數3&#xff08;隱函數的導數&#xff09;冪函數的擴展形式f(x) xn的導數&#xff1a;f’(x) nxn-1&#xff0c;n是整數&#xff0c;該公式對f(x) xm/n, m,n 是整數同樣適用。推導過程&#xff1a;什么是隱函數引自知乎&#xff1a;“如果方程F(x,y)0能確定y…

機器學習13大規模數據集

大型數據集的學習&#xff08;Learning With Large Datasets&#xff09; 如果我們有一個低方差的模型&#xff0c; 增加數據集的規模可以幫助你獲得更好的結果。 我們應該怎樣應對一個有 100 萬條記錄的訓練集&#xff1f; 以線性回歸模型為例&#xff0c;每一次梯度下降…

svn認證失敗,解決方案

在svnserve.conf:文件中去掉authz-db authz前面的#號&#xff0c;會出現的認證失敗。 造成此原因的主要問題就是authz文件中權限沒有配置好。 例如&#xff1a; 創建prj1庫 svnadmin create prj1 修改配置文件 svnserve.conf: [general] anon-access read auth-access write…

Python機器學習庫sklearn的安裝

Python機器學習庫sklearn的安裝 scikit-learn是Python的一個開源機器學習模塊&#xff0c;它建立在NumPy&#xff0c;SciPy和matplotlib模塊之上能夠為用戶提供各種機器學習算法接口&#xff0c;可以讓用戶簡單、高效地進行數據挖掘和數據分析。 Ubuntu14.04系統上安裝 安裝num…

Java07多線程

14 多線程 操作系統的多任務&#xff08;multitasking&#xff09;&#xff1a;在同一時刻運行多個程序的能力。 多線程在較低的層次上擴展了多任務的概念&#xff1a;一個程序同時執行多個任務。 通常&#xff0c;每一個任務稱為一個線程&#xff08;tread&#xff09;&…

MySQL字段拼接Concat

有時候&#xff0c;從數據庫中拿出的數據并不是我們想要的格式&#xff0c;比如&#xff0c;有以下的vendors表 如果&#xff0c;想以 name (location)的格式展現出來&#xff0c;那么就要用到MySQL的Concat了。 Concat()拼接串&#xff0c;即把多個串連接起來形成一個較長的串…

使用pycharm調用模塊后字體變灰 是什么原因呢?

使用pycharm調用模塊后字體變灰 是什么原因呢&#xff1f;點擊小燈泡提示出現以下內容&#xff1a;This inspection detects names that should resolve but dont. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-l…

操作系統01概述

第一章 概論 《Operating System Internals and Design Principles》 《Applied Operating System Concepts》 操作系統——裸機上的第一層軟件&#xff0c;它是對硬件系統功能的首次擴充&#xff0c;填補人與機器之間的鴻溝。 1.1 操作系統與計算機同在 1.2 對操作系統的…

CNN訓練模型 花卉

一、CNN訓練模型 模型尺寸分析&#xff1a;卷積層全都采用了補0&#xff0c;所以經過卷積層長和寬不變&#xff0c;只有深度加深。池化層全都沒有補0&#xff0c;所以經過池化層長和寬均減小&#xff0c;深度不變。http://download.tensorflow.org/example_images/flower_photo…

Linux re

正則表達式并不是一個工具程序&#xff0c;而是一個字符串處理的標準依據&#xff0c;如果想要以正則表達式的方式處理字符串&#xff0c;就得使用支持正則表達式的工具&#xff0c;例如grep、vi、sed、asw等。 注意&#xff1a;ls不支持正則表達式。 grep 正則表達式: 注意gr…

操作系統02進程管理Process_Description_and_Control

作業的基本概念&#xff1a;用戶再一次計算過程中或一次事務處理過程中&#xff0c;要求計算機系統所做的工作的集合。 包含多個程序、多個數據、作業控制說明書 系統調用時操作系統提供給編程人員的唯一接口。 1、文件操作類&#xff1b; 2、進程控制類&#xff1b; 3、資…

藍橋杯 方格填數(全排列+圖形補齊)

方格填數 如下的10個格子 填入0~9的數字&#xff0c;同一數字不能重復填。要求&#xff1a;連續的兩個數字不能相鄰。&#xff08;左右、上下、對角都算相鄰&#xff09; 一共有多少種可能的填數方案&#xff1f; 請填寫表示方案數目的整數。注意&#xff1a;你提交的應該是一個…

操作系統03進程管理Process_Scheduling

2 Process Scheduling >Type of scheduling >Scheduling Criteria (準則) >Scheduling Algorithm >Real-Time Scheduling (嵌入式系統) 2.1 Learning Objectives By the end of this lecture you should be able to Explain what is Response Time 響應時間-…