人工智能和機(jī)器學(xué)習(xí)之關(guān)聯(lián)規(guī)則學(xué)習(xí)算法:QuantitativeAssociation:1.關(guān)聯(lián)規(guī)則學(xué)習(xí)算法概論_第1頁
人工智能和機(jī)器學(xué)習(xí)之關(guān)聯(lián)規(guī)則學(xué)習(xí)算法:QuantitativeAssociation:1.關(guān)聯(lián)規(guī)則學(xué)習(xí)算法概論_第2頁
人工智能和機(jī)器學(xué)習(xí)之關(guān)聯(lián)規(guī)則學(xué)習(xí)算法:QuantitativeAssociation:1.關(guān)聯(lián)規(guī)則學(xué)習(xí)算法概論_第3頁
人工智能和機(jī)器學(xué)習(xí)之關(guān)聯(lián)規(guī)則學(xué)習(xí)算法:QuantitativeAssociation:1.關(guān)聯(lián)規(guī)則學(xué)習(xí)算法概論_第4頁
人工智能和機(jī)器學(xué)習(xí)之關(guān)聯(lián)規(guī)則學(xué)習(xí)算法:QuantitativeAssociation:1.關(guān)聯(lián)規(guī)則學(xué)習(xí)算法概論_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

人工智能和機(jī)器學(xué)習(xí)之關(guān)聯(lián)規(guī)則學(xué)習(xí)算法:QuantitativeAssociation:1.關(guān)聯(lián)規(guī)則學(xué)習(xí)算法概論1關(guān)聯(lián)規(guī)則學(xué)習(xí)算法簡介1.11什么是關(guān)聯(lián)規(guī)則學(xué)習(xí)關(guān)聯(lián)規(guī)則學(xué)習(xí)是一種在大數(shù)據(jù)集中發(fā)現(xiàn)有趣的關(guān)系或模式的機(jī)器學(xué)習(xí)方法。它主要用于市場籃子分析,幫助零售商理解商品之間的購買模式。例如,通過分析超市的銷售數(shù)據(jù),我們可能會(huì)發(fā)現(xiàn)一個(gè)規(guī)則:“如果顧客購買了面包和牛奶,他們很可能也會(huì)購買黃油”。這種規(guī)則可以用于優(yōu)化商品布局,促銷策略,甚至庫存管理。關(guān)聯(lián)規(guī)則學(xué)習(xí)的核心是尋找數(shù)據(jù)集中頻繁出現(xiàn)的項(xiàng)集,并基于這些項(xiàng)集生成關(guān)聯(lián)規(guī)則。算法通常包括兩個(gè)主要步驟:首先,識(shí)別所有頻繁項(xiàng)集;其次,從這些頻繁項(xiàng)集中生成關(guān)聯(lián)規(guī)則。1.1.1示例代碼假設(shè)我們有以下的購物籃數(shù)據(jù):transactions=[

['牛奶','面包','黃油'],

['面包','黃油'],

['牛奶','面包'],

['牛奶','黃油'],

['牛奶','面包','黃油'],

['面包'],

['牛奶','黃油'],

['面包','黃油'],

['牛奶','面包'],

['牛奶','面包','黃油']

]我們可以使用Python的mlxtend庫來執(zhí)行關(guān)聯(lián)規(guī)則學(xué)習(xí):frommlxtend.preprocessingimportTransactionEncoder

frommlxtend.frequent_patternsimportapriori,association_rules

#數(shù)據(jù)預(yù)處理

te=TransactionEncoder()

te_ary=te.fit(transactions).transform(transactions)

df=pd.DataFrame(te_ary,columns=te.columns_)

#計(jì)算頻繁項(xiàng)集

frequent_itemsets=apriori(df,min_support=0.3,use_colnames=True)

print(frequent_itemsets)

#生成關(guān)聯(lián)規(guī)則

rules=association_rules(frequent_itemsets,metric="confidence",min_threshold=0.7)

print(rules)1.22關(guān)聯(lián)規(guī)則學(xué)習(xí)的應(yīng)用場景關(guān)聯(lián)規(guī)則學(xué)習(xí)不僅限于零售業(yè),它在多個(gè)領(lǐng)域都有廣泛的應(yīng)用:醫(yī)療保?。悍治霾∪说陌Y狀和疾病之間的關(guān)聯(lián),幫助醫(yī)生做出更準(zhǔn)確的診斷。網(wǎng)絡(luò)分析:理解用戶在網(wǎng)站上的瀏覽行為,優(yōu)化網(wǎng)站設(shè)計(jì)和用戶體驗(yàn)。金融:檢測信用卡欺詐,通過分析異常的交易模式來識(shí)別潛在的欺詐行為。制造業(yè):預(yù)測設(shè)備故障,基于設(shè)備運(yùn)行數(shù)據(jù)發(fā)現(xiàn)故障前的模式。1.33關(guān)聯(lián)規(guī)則學(xué)習(xí)的關(guān)鍵概念在關(guān)聯(lián)規(guī)則學(xué)習(xí)中,有幾個(gè)關(guān)鍵概念需要理解:項(xiàng)集:數(shù)據(jù)集中的一個(gè)元素或元素集合。支持度:一個(gè)項(xiàng)集在數(shù)據(jù)集中出現(xiàn)的頻率。置信度:關(guān)聯(lián)規(guī)則的可靠性,即在規(guī)則的前件出現(xiàn)的情況下,后件出現(xiàn)的概率。提升度:衡量規(guī)則的提升程度,即規(guī)則的置信度與后件獨(dú)立出現(xiàn)的概率的比值,用于評估規(guī)則的實(shí)際價(jià)值。1.3.1示例數(shù)據(jù)與代碼考慮一個(gè)簡單的超市銷售數(shù)據(jù)集:#示例數(shù)據(jù)

data=[

['牛奶','面包','黃油'],

['面包','黃油'],

['牛奶','面包'],

['牛奶','黃油'],

['牛奶','面包','黃油'],

['面包'],

['牛奶','黃油'],

['面包','黃油'],

['牛奶','面包'],

['牛奶','面包','黃油']

]

#使用Apriori算法計(jì)算頻繁項(xiàng)集

frequent_itemsets=apriori(df,min_support=0.3,use_colnames=True)

#計(jì)算關(guān)聯(lián)規(guī)則

rules=association_rules(frequent_itemsets,metric="confidence",min_threshold=0.7)

#輸出結(jié)果

print(rules)在這個(gè)例子中,我們首先計(jì)算了支持度大于0.3的頻繁項(xiàng)集,然后基于這些項(xiàng)集生成了置信度大于0.7的關(guān)聯(lián)規(guī)則。通過這種方式,我們可以發(fā)現(xiàn)哪些商品組合在銷售數(shù)據(jù)中頻繁出現(xiàn),以及這些組合之間的置信度和提升度,從而為零售商提供有價(jià)值的洞察。1.4QuantitativeAssociation算法基礎(chǔ)1.4.11量化關(guān)聯(lián)規(guī)則的必要性在傳統(tǒng)的關(guān)聯(lián)規(guī)則學(xué)習(xí)中,我們主要關(guān)注的是項(xiàng)集之間的布爾關(guān)系,即一個(gè)項(xiàng)集是否出現(xiàn)。然而,在許多實(shí)際場景中,數(shù)據(jù)不僅僅是二元的,而是包含連續(xù)的數(shù)值。例如,在超市購物籃分析中,除了關(guān)心商品是否被購買,我們還可能關(guān)心商品被購買的數(shù)量。在醫(yī)療數(shù)據(jù)分析中,除了關(guān)注疾病與癥狀的關(guān)聯(lián),我們還可能需要了解癥狀的嚴(yán)重程度與疾病之間的關(guān)系。因此,量化關(guān)聯(lián)規(guī)則的提出,旨在處理這種包含數(shù)值型數(shù)據(jù)的關(guān)聯(lián)分析,以更全面地理解數(shù)據(jù)中的模式。1.4.22QuantitativeAssociation算法原理QuantitativeAssociation算法的核心在于如何將數(shù)值型數(shù)據(jù)轉(zhuǎn)化為可以進(jìn)行關(guān)聯(lián)分析的形式。這通常涉及到數(shù)據(jù)的離散化,即把連續(xù)的數(shù)值區(qū)間劃分成若干個(gè)離散的區(qū)間,然后將每個(gè)數(shù)值映射到相應(yīng)的區(qū)間。離散化的方法有多種,包括等寬離散化、等頻離散化、聚類離散化等。1.4.2.1示例:等寬離散化假設(shè)我們有一組年齡數(shù)據(jù),年齡范圍從18到60歲。我們可以將這個(gè)范圍等分為三個(gè)區(qū)間:18-32歲、33-47歲、48-60歲。這樣,每個(gè)年齡值就被映射到了一個(gè)區(qū)間,從而可以進(jìn)行關(guān)聯(lián)規(guī)則的挖掘。#示例代碼:使用pandas進(jìn)行等寬離散化

importpandasaspd

#創(chuàng)建一個(gè)包含年齡數(shù)據(jù)的DataFrame

data={'Age':[20,22,30,45,50,55,60]}

df=pd.DataFrame(data)

#定義年齡的區(qū)間

bins=[18,32,47,60]

labels=['Young','Middle-aged','Old']

#進(jìn)行等寬離散化

df['AgeGroup']=pd.cut(df['Age'],bins=bins,labels=labels,include_lowest=True)

print(df)運(yùn)行上述代碼后,dfDataFrame將包含一個(gè)新列AgeGroup,其中每個(gè)年齡值都被映射到了一個(gè)區(qū)間標(biāo)簽。1.4.33QuantitativeAssociation與傳統(tǒng)關(guān)聯(lián)規(guī)則的區(qū)別QuantitativeAssociation算法與傳統(tǒng)的關(guān)聯(lián)規(guī)則學(xué)習(xí)算法的主要區(qū)別在于處理數(shù)據(jù)的方式。傳統(tǒng)算法處理的是二元數(shù)據(jù),即每個(gè)項(xiàng)要么出現(xiàn),要么不出現(xiàn)。而QuantitativeAssociation算法處理的是數(shù)值型數(shù)據(jù),它首先通過離散化將數(shù)值型數(shù)據(jù)轉(zhuǎn)化為可以進(jìn)行關(guān)聯(lián)分析的形式,然后挖掘這些區(qū)間之間的關(guān)聯(lián)規(guī)則。1.4.3.1傳統(tǒng)關(guān)聯(lián)規(guī)則示例假設(shè)我們有以下購物籃數(shù)據(jù):交易ID商品1{牛奶,面包,雞蛋}2{牛奶,面包}3{面包,雞蛋}4{牛奶,雞蛋}從這些數(shù)據(jù)中,我們可以挖掘出關(guān)聯(lián)規(guī)則,如“牛奶->面包”,表示如果顧客購買了牛奶,他們也很可能購買面包。1.4.3.2QuantitativeAssociation示例如果我們考慮商品的購買數(shù)量,數(shù)據(jù)可能如下:交易ID牛奶數(shù)量面包數(shù)量雞蛋數(shù)量1216212030344302通過QuantitativeAssociation算法,我們可以挖掘出更復(fù)雜的關(guān)聯(lián)規(guī)則,如“當(dāng)牛奶數(shù)量大于1時(shí),面包數(shù)量也往往大于1”,這提供了更深入的洞察。1.4.3.3離散化后的關(guān)聯(lián)規(guī)則挖掘#示例代碼:使用mlxtend庫進(jìn)行關(guān)聯(lián)規(guī)則挖掘

frommlxtend.preprocessingimportTransactionEncoder

frommlxtend.frequent_patternsimportapriori,association_rules

#假設(shè)我們已經(jīng)對數(shù)值型數(shù)據(jù)進(jìn)行了離散化處理

data=[['Young','Middle-aged'],

['Young','Old'],

['Middle-aged','Old'],

['Young','Middle-aged','Old']]

#使用TransactionEncoder進(jìn)行數(shù)據(jù)編碼

te=TransactionEncoder()

te_ary=te.fit(data).transform(data)

df=pd.DataFrame(te_ary,columns=te.columns_)

#挖掘頻繁項(xiàng)集

frequent_itemsets=apriori(df,min_support=0.5,use_colnames=True)

print(frequent_itemsets)

#生成關(guān)聯(lián)規(guī)則

rules=association_rules(frequent_itemsets,metric="confidence",min_threshold=0.5)

print(rules)這段代碼展示了如何使用mlxtend庫對離散化后的數(shù)據(jù)進(jìn)行關(guān)聯(lián)規(guī)則挖掘。通過設(shè)置不同的支持度和置信度閾值,我們可以找到滿足條件的關(guān)聯(lián)規(guī)則。通過上述討論,我們可以看到QuantitativeAssociation算法在處理數(shù)值型數(shù)據(jù)時(shí)的靈活性和深度,它不僅能夠揭示數(shù)據(jù)中的關(guān)聯(lián),還能提供關(guān)于關(guān)聯(lián)強(qiáng)度和數(shù)值范圍的詳細(xì)信息,這對于許多領(lǐng)域的數(shù)據(jù)分析和決策支持具有重要意義。2關(guān)聯(lián)規(guī)則學(xué)習(xí)算法流程2.11數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理是關(guān)聯(lián)規(guī)則學(xué)習(xí)算法中的關(guān)鍵步驟,它確保了數(shù)據(jù)的質(zhì)量和適用性,為后續(xù)的頻繁項(xiàng)集挖掘和規(guī)則生成奠定基礎(chǔ)。預(yù)處理主要包括數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)編碼。2.1.1數(shù)據(jù)清洗數(shù)據(jù)清洗涉及去除數(shù)據(jù)集中的噪聲和不一致信息。例如,處理缺失值、異常值和重復(fù)記錄。在Python中,可以使用pandas庫進(jìn)行數(shù)據(jù)清洗:importpandasaspd

#讀取數(shù)據(jù)

data=pd.read_csv('transaction_data.csv')

#處理缺失值

data=data.dropna()#刪除含有缺失值的行

#處理異常值

#假設(shè)異常值為負(fù)數(shù),將其替換為0

data[data<0]=0

#去除重復(fù)記錄

data=data.drop_duplicates()2.1.2數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換將原始數(shù)據(jù)轉(zhuǎn)換為適合挖掘的形式。例如,將連續(xù)數(shù)值轉(zhuǎn)換為離散區(qū)間,或?qū)⑽谋緮?shù)據(jù)轉(zhuǎn)換為數(shù)值編碼。使用pandas庫進(jìn)行數(shù)據(jù)轉(zhuǎn)換:#將連續(xù)數(shù)值轉(zhuǎn)換為離散區(qū)間

bins=[0,10,20,30,40,50]

labels=['0-10','11-20','21-30','31-40','41-50']

data['age']=pd.cut(data['age'],bins=bins,labels=labels,include_lowest=True)2.1.3數(shù)據(jù)編碼數(shù)據(jù)編碼將非數(shù)值數(shù)據(jù)轉(zhuǎn)換為數(shù)值形式,以便算法處理。例如,將商品名稱轉(zhuǎn)換為商品ID。使用pandas庫進(jìn)行數(shù)據(jù)編碼:#將商品名稱轉(zhuǎn)換為商品ID

item_map={'apple':1,'banana':2,'orange':3}

data['item']=data['item'].map(item_map)2.22頻繁項(xiàng)集挖掘頻繁項(xiàng)集挖掘是關(guān)聯(lián)規(guī)則學(xué)習(xí)的核心,它找出數(shù)據(jù)集中頻繁出現(xiàn)的項(xiàng)集。Apriori算法是常用的一種方法,它基于“頻繁項(xiàng)集的子集也必須是頻繁的”這一性質(zhì)。2.2.1Apriori算法原理Apriori算法通過迭代過程,從1-項(xiàng)集開始,逐步構(gòu)建k-項(xiàng)集,直到無法找到新的頻繁項(xiàng)集為止。在每次迭代中,算法都會(huì)計(jì)算項(xiàng)集的支持度,支持度是指項(xiàng)集在數(shù)據(jù)集中出現(xiàn)的頻率。2.2.2Apriori算法實(shí)現(xiàn)使用Python的mlxtend庫可以實(shí)現(xiàn)Apriori算法:frommlxtend.preprocessingimportTransactionEncoder

frommlxtend.frequent_patternsimportapriori

#假設(shè)data是一個(gè)包含交易記錄的列表

transactions=[['apple','banana'],['apple','orange'],['banana','orange'],['apple','banana','orange']]

#數(shù)據(jù)編碼

te=TransactionEncoder()

te_ary=te.fit(transactions).transform(transactions)

data=pd.DataFrame(te_ary,columns=te.columns_)

#挖掘頻繁項(xiàng)集

frequent_itemsets=apriori(data,min_support=0.5,use_colnames=True)

print(frequent_itemsets)2.33規(guī)則生成與評估從頻繁項(xiàng)集中生成關(guān)聯(lián)規(guī)則,并評估這些規(guī)則的強(qiáng)度和實(shí)用性。評估規(guī)則的常用指標(biāo)包括支持度、置信度和提升度。2.3.1規(guī)則生成使用mlxtend庫中的association_rules函數(shù)生成關(guān)聯(lián)規(guī)則:frommlxtend.frequent_patternsimportassociation_rules

#生成關(guān)聯(lián)規(guī)則

rules=association_rules(frequent_itemsets,metric="confidence",min_threshold=0.7)

print(rules)2.3.2規(guī)則評估評估規(guī)則時(shí),支持度表示規(guī)則在數(shù)據(jù)集中的普遍程度,置信度表示規(guī)則的可靠性,提升度則衡量規(guī)則的獨(dú)立性。例如,規(guī)則“apple->banana”的支持度為0.5,置信度為0.75,提升度為1.5,表示在50%的交易中同時(shí)出現(xiàn)了apple和banana,當(dāng)apple出現(xiàn)時(shí),banana出現(xiàn)的概率為75%,且該規(guī)則比隨機(jī)出現(xiàn)的可能性高50%。2.3.3示例代碼#評估規(guī)則

rules['lift']=rules['confidence']/rules['antecedentsupport']

rules['leverage']=rules['confidence']-rules['consequentsupport']

rules['conviction']=(1-rules['consequentsupport'])/(1-rules['confidence'])

#選擇提升度大于1的規(guī)則

strong_rules=rules[rules['lift']>1]

print(strong_rules)通過以上步驟,我們完成了關(guān)聯(lián)規(guī)則學(xué)習(xí)算法的基本流程,從數(shù)據(jù)預(yù)處理到頻繁項(xiàng)集挖掘,再到規(guī)則生成與評估。這為理解和應(yīng)用關(guān)聯(lián)規(guī)則學(xué)習(xí)算法提供了堅(jiān)實(shí)的基礎(chǔ)。2.4QuantitativeAssociation算法的實(shí)現(xiàn)步驟2.4.11量化數(shù)據(jù)的處理量化數(shù)據(jù)處理是QuantitativeAssociation算法的第一步,其目的是將連續(xù)型數(shù)據(jù)轉(zhuǎn)換為離散型數(shù)據(jù),以便進(jìn)行頻繁項(xiàng)集的挖掘。這一步驟通常涉及數(shù)據(jù)的預(yù)處理,包括數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)規(guī)范化。2.4.1.1數(shù)據(jù)清洗數(shù)據(jù)清洗是處理缺失值、異常值和重復(fù)值的過程。例如,如果數(shù)據(jù)集中存在缺失的數(shù)值,可以使用平均值、中位數(shù)或眾數(shù)進(jìn)行填充。2.4.1.2數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換包括將連續(xù)型數(shù)據(jù)轉(zhuǎn)換為離散型數(shù)據(jù)。這可以通過等寬分箱或等頻分箱來實(shí)現(xiàn)。等寬分箱是將數(shù)據(jù)范圍分成等寬的區(qū)間,而等頻分箱則是確保每個(gè)區(qū)間內(nèi)有相同數(shù)量的記錄。2.4.1.3數(shù)據(jù)規(guī)范化數(shù)據(jù)規(guī)范化是將數(shù)據(jù)轉(zhuǎn)換到一個(gè)特定的范圍,如0到1之間,以消除量綱的影響。常用的規(guī)范化方法有最小-最大規(guī)范化和Z-score規(guī)范化。2.4.1.4示例代碼importpandasaspd

fromsklearnimportpreprocessing

#示例數(shù)據(jù)

data={

'Age':[22,25,28,31,34,37,40,43,46,49],

'Income':[30000,35000,40000,45000,50000,55000,60000,65000,70000,75000]

}

df=pd.DataFrame(data)

#數(shù)據(jù)轉(zhuǎn)換:等寬分箱

bins=[20,30,40,50,60,70]

df['Age_Bin']=pd.cut(df['Age'],bins)

#數(shù)據(jù)規(guī)范化:最小-最大規(guī)范化

min_max_scaler=preprocessing.MinMaxScaler()

df['Income_Norm']=min_max_scaler.fit_transform(df[['Income']])

print(df)2.4.22量化頻繁項(xiàng)集的挖掘量化頻繁項(xiàng)集的挖掘是關(guān)聯(lián)規(guī)則學(xué)習(xí)中的關(guān)鍵步驟,它涉及到尋找數(shù)據(jù)集中頻繁出現(xiàn)的項(xiàng)集。在量化數(shù)據(jù)中,這通常意味著尋找在特定區(qū)間內(nèi)頻繁出現(xiàn)的組合。2.4.2.1Apriori算法Apriori算法是一種常用的挖掘頻繁項(xiàng)集的算法。它基于一個(gè)簡單的觀察:如果一個(gè)項(xiàng)集是頻繁的,那么它的所有子集也應(yīng)該是頻繁的。Apriori算法通過迭代地生成候選項(xiàng)集并計(jì)算它們的頻率來工作。2.4.2.2FP-growth算法FP-growth算法是另一種高效的頻繁項(xiàng)集挖掘算法,它通過構(gòu)建一個(gè)FP樹來壓縮數(shù)據(jù)集,從而減少計(jì)算頻繁項(xiàng)集所需的掃描次數(shù)。2.4.2.3示例代碼frommlxtend.preprocessingimportTransactionEncoder

frommlxtend.frequent_patternsimportapriori

#示例數(shù)據(jù)

dataset=[['Age_Bin_20-30','Income_Norm_0-0.2'],

['Age_Bin_20-30','Income_Norm_0.2-0.4'],

['Age_Bin_30-40','Income_Norm_0.4-0.6'],

['Age_Bin_30-40','Income_Norm_0.6-0.8'],

['Age_Bin_40-50','Income_Norm_0.8-1.0'],

['Age_Bin_40-50','Income_Norm_0.6-0.8'],

['Age_Bin_50-60','Income_Norm_0.4-0.6'],

['Age_Bin_50-60','Income_Norm_0.2-0.4'],

['Age_Bin_60-70','Income_Norm_0-0.2'],

['Age_Bin_60-70','Income_Norm_0.8-1.0']]

#數(shù)據(jù)編碼

te=TransactionEncoder()

te_ary=te.fit(dataset).transform(dataset)

df=pd.DataFrame(te_ary,columns=te.columns_)

#挖掘頻繁項(xiàng)集

frequent_itemsets=apriori(df,min_support=0.3,use_colnames=True)

print(frequent_itemsets)2.4.33量化關(guān)聯(lián)規(guī)則的生成量化關(guān)聯(lián)規(guī)則的生成是在頻繁項(xiàng)集的基礎(chǔ)上,生成具有高支持度和置信度的關(guān)聯(lián)規(guī)則。這一步驟涉及到計(jì)算規(guī)則的支持度、置信度和提升度。2.4.3.1支持度支持度是項(xiàng)集在數(shù)據(jù)集中出現(xiàn)的頻率。2.4.3.2置信度置信度是規(guī)則A->B在數(shù)據(jù)集中的條件概率,即在A出現(xiàn)的情況下B也出現(xiàn)的概率。2.4.3.3提升度提升度是規(guī)則A->B的支持度與A和B獨(dú)立出現(xiàn)時(shí)的支持度的比值,用于衡量規(guī)則的關(guān)聯(lián)強(qiáng)度。2.4.3.4示例代碼frommlxtend.frequent_patternsimportassociation_rules

#生成關(guān)聯(lián)規(guī)則

rules=association_rules(frequent_itemsets,metric="confidence",min_threshold=0.7)

print(rules)通過以上步驟,我們可以從量化數(shù)據(jù)中挖掘出頻繁項(xiàng)集,并生成具有高支持度和置信度的關(guān)聯(lián)規(guī)則,為數(shù)據(jù)分析和決策提供有力的支持。3關(guān)聯(lián)規(guī)則學(xué)習(xí)算法的評估與優(yōu)化3.11評估指標(biāo):支持度與置信度3.1.1支持度(Support)支持度是衡量一個(gè)項(xiàng)集在數(shù)據(jù)集中出現(xiàn)頻率的指標(biāo)。對于關(guān)聯(lián)規(guī)則A→B,支持度定義為數(shù)據(jù)集中同時(shí)包含項(xiàng)集A和3.1.2置信度(Confidence)置信度是衡量規(guī)則A→B在包含項(xiàng)集A的交易中,同時(shí)包含項(xiàng)集B的概率。置信度定義為規(guī)則的支持度除以項(xiàng)集A的支持度。置信度越高,表示在給定A的情況下,出現(xiàn)3.1.2.1示例代碼frommlxtend.preprocessingimportTransactionEncoder

frommlxtend.frequent_patternsimportapriori,association_rules

#示例數(shù)據(jù)

dataset=[['Milk','Eggs','Bread'],

['Milk','Eggs'],

['Bread','Butter','Eggs'],

['Milk','Butter'],

['Milk','Bread','Butter','Eggs']]

#數(shù)據(jù)預(yù)處理

te=TransactionEncoder()

te_ary=te.fit(dataset).transform(dataset)

df=pd.DataFrame(te_ary,columns=te.columns_)

#計(jì)算頻繁項(xiàng)集

frequent_itemsets=apriori(df,min_support=0.4,use_colnames=True)

#生成關(guān)聯(lián)規(guī)則

rules=association_rules(frequent_itemsets,metric="confidence",min_threshold=0.7)

#輸出規(guī)則

print(rules)3.1.3解釋在上述代碼中,我們使用了mlxtend庫來計(jì)算關(guān)聯(lián)規(guī)則。數(shù)據(jù)集包含5個(gè)交易,每個(gè)交易是一組商品。通過設(shè)置min_support=0.4和min_threshold=0.7,我們篩選出支持度至少為40%且置信度至少為70%的規(guī)則。輸出的規(guī)則將展示哪些商品組合在數(shù)據(jù)集中頻繁出現(xiàn),并且在給定某些商品的情況下,其他商品出現(xiàn)的概率較高。3.22優(yōu)化策略:提升規(guī)則質(zhì)量3.2.1提升度(Lift)提升度是評估規(guī)則A→B是否真正具有關(guān)聯(lián)性的指標(biāo)。它定義為規(guī)則的置信度除以項(xiàng)集A和項(xiàng)集B在數(shù)據(jù)集中獨(dú)立出現(xiàn)時(shí)的期望置信度。提升度大于1表示規(guī)則3.2.2杠桿率(Leverage)杠桿率衡量規(guī)則A→B的實(shí)際支持度與期望支持度之間的差異。它定義為規(guī)則的支持度減去數(shù)據(jù)集中項(xiàng)集A和項(xiàng)集B分別出現(xiàn)的概率的乘積。杠桿率不為零表示規(guī)則3.2.3示例代碼#使用提升度和杠桿率評估規(guī)則

rules_lift=rules[rules['lift']>1]

rules_leverage=rules[rules['leverage']>0]

#輸出提升度大于1的規(guī)則

print("提升度大于1的規(guī)則:")

print(rules_lift)

#輸出杠桿率大于0的規(guī)則

print("杠桿率大于0的規(guī)則:")

print(rules_leverage)3.2.4解釋通過計(jì)算提升度和杠桿率,我們可以進(jìn)一步篩選出那些不僅頻繁出現(xiàn),而且具有實(shí)際關(guān)聯(lián)性的規(guī)則。提升度和杠桿率的計(jì)算幫助我們排除了那些可能由于隨機(jī)性而出現(xiàn)的關(guān)聯(lián),確保了規(guī)則的質(zhì)量。3.33實(shí)際應(yīng)用中的挑戰(zhàn)與解決方案3.3.1數(shù)據(jù)稀疏性在實(shí)際應(yīng)用中,數(shù)據(jù)集可能非常大,但頻繁項(xiàng)集卻很少,導(dǎo)致數(shù)據(jù)稀疏。這可能使得關(guān)聯(lián)規(guī)則學(xué)習(xí)算法難以找到有意義的規(guī)則。3.3.2解決方案:數(shù)據(jù)預(yù)處理增加數(shù)據(jù)量:收集更多的交易數(shù)據(jù),以提高頻繁項(xiàng)集的出現(xiàn)頻率。特征選擇:通過領(lǐng)域知識(shí)或統(tǒng)計(jì)方法選擇更可能頻繁出現(xiàn)的特征。3.3.3大數(shù)據(jù)處理處理大規(guī)模數(shù)據(jù)集時(shí),傳統(tǒng)的關(guān)聯(lián)規(guī)則學(xué)習(xí)算法可能效率低下。3.3.4解決方案:分布式計(jì)算MapReduce:利用分布式計(jì)算框架如Hadoop或Spark,將數(shù)據(jù)集分割成小塊,分別在不同的節(jié)點(diǎn)上進(jìn)行計(jì)算,最后匯總結(jié)果。3.3.5示例代碼:使用Spark進(jìn)行分布式計(jì)算frompyspark.sqlimportSparkSession

frompyspark.ml.fpmimportFPGrowth

#創(chuàng)建SparkSession

spark=SparkSession.builder.appName("FPGrowth").getOrCreate()

#加載數(shù)據(jù)

data=spark.read.format("csv").option("header","true").load("transactions.csv")

#轉(zhuǎn)換數(shù)據(jù)格式

transactions=data.rdd.map(lambdarow:row[0].split(",")).cache()

#應(yīng)用FPGrowth算法

fpGrowth=FPGrowth(itemsCol="items",minSupport=0.4,minConfidence=0.7)

model=fpGrowth.fit(transactions)

#輸出頻繁項(xiàng)集和關(guān)聯(lián)規(guī)則

print("FrequentItemsets:")

model.freqItemsets.show()

print("AssociationRules:")

model.associationRules.show()3.3.6解釋在處理大規(guī)模數(shù)據(jù)集時(shí),使用Spark的FPGrowth算法可以有效地進(jìn)行分布式計(jì)算。通過將數(shù)據(jù)集分割并行處理,可以顯著提高計(jì)算效率,解決大數(shù)據(jù)處理的挑戰(zhàn)。通過上述內(nèi)容,我們深入了解了關(guān)聯(lián)規(guī)則學(xué)習(xí)算法的評估與優(yōu)化,包括支持度、置信度、提升度和杠桿率的計(jì)算,以及在實(shí)際應(yīng)用中如何應(yīng)對數(shù)據(jù)稀疏性和大數(shù)據(jù)處理的挑戰(zhàn)。這些策略和指標(biāo)對于提升關(guān)聯(lián)規(guī)則學(xué)習(xí)算法的性能和規(guī)則質(zhì)量至關(guān)重要。3.4案例分析與實(shí)踐3.4.11零售業(yè)中的關(guān)聯(lián)規(guī)則分析在零售業(yè)中,關(guān)聯(lián)規(guī)則學(xué)習(xí)是一種常用的數(shù)據(jù)挖掘技術(shù),用于發(fā)現(xiàn)商品之間的購買模式。例如,通過分析超市的銷售數(shù)據(jù),可以找出“購買面包的顧客往往也會(huì)購買牛奶”這樣的規(guī)則,從而幫助商家優(yōu)化商品布局,提升銷售策略。3.4.1.1數(shù)據(jù)樣例假設(shè)我們有以下的銷售數(shù)據(jù):交易ID商品1{牛奶,面包,黃油}2{面包,果醬}3{牛奶,黃油}4{面包,牛奶,果醬}5{黃油,果醬}3.4.1.2代碼示例使用Python的mlxtend庫進(jìn)行關(guān)聯(lián)規(guī)則分析:frommlxtend.preprocessingimportTransactionEncoder

frommlxtend.frequent_patternsimportapriori,association_rules

#銷售數(shù)據(jù)

dataset=[['牛奶','面包','黃油'],

['面包','果醬'],

['牛奶','黃油'],

['面包','牛奶','果醬'],

['黃油','果醬']]

#數(shù)據(jù)預(yù)處理

te=TransactionEncoder()

te_ary=te.fit(dataset).transform(dataset)

df=pd.DataFrame(te_ary,columns=te.columns_)

#計(jì)算頻繁項(xiàng)集

frequent_itemsets=apriori(df,min_support=0.2,use_colnames=True)

print(frequent_itemsets)

#生成關(guān)聯(lián)規(guī)則

rules=association_rules(frequent_itemsets,metric="confidence",min_threshold=0.5)

print(rules)這段代碼首先將銷售數(shù)據(jù)轉(zhuǎn)換為適合mlxtend庫處理的格式,然后使用Apriori算法計(jì)算頻繁項(xiàng)集,最后生成關(guān)聯(lián)規(guī)則。通過設(shè)置不同的支持度和置信度閾值,可以調(diào)整規(guī)則的嚴(yán)格程度。3.4.22電子商務(wù)中的QuantitativeAssociation應(yīng)用在電子商務(wù)領(lǐng)域,QuantitativeAssociation(定量關(guān)聯(lián))分析可以揭示顧客購買行為中的數(shù)量關(guān)系。例如,分析顧客購買特定商品的數(shù)量與購買其他商品的關(guān)系,有助于個(gè)性化推薦和庫存管理。3.4.2.1數(shù)據(jù)樣例考慮一個(gè)電子商務(wù)網(wǎng)站的購買數(shù)據(jù),其中包含商品ID和購買數(shù)量:交易ID商品ID購買數(shù)量1101211021210112103331022310313.4.2.2代碼示例使用Python的pandas和mlxtend庫進(jìn)行定量關(guān)聯(lián)分析:importpandasaspd

frommlxtend.preprocessingimportDenseEncoder

frommlxtend.frequent_patternsimportfpgrowth,association_rules

#購買數(shù)據(jù)

data={'交易ID':[1,1,2,2,3,3],

'商品ID':[101,102,101,103,102,103],

'購買數(shù)量':[2,1,1,3,2,1]}

df=pd.DataFrame(data)

#將數(shù)據(jù)轉(zhuǎn)換為適合關(guān)聯(lián)規(guī)則

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論