您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)如何利用Python進(jìn)行商品的親和性分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
數(shù)據(jù)挖掘旨在讓計(jì)算機(jī)根據(jù)已有數(shù)據(jù)做出決策。決策可以是預(yù)測(cè)明年的銷(xiāo)量,人口的數(shù)目,攔截垃圾郵件,檢測(cè)網(wǎng)站的語(yǔ)言。到目前為止,數(shù)據(jù)挖掘已經(jīng)有很多的應(yīng)用,即使這樣很多新的應(yīng)用領(lǐng)域也在不斷出現(xiàn)。
數(shù)據(jù)挖掘涉及到算法,最優(yōu)策略,統(tǒng)計(jì)學(xué),工程學(xué)和計(jì)算機(jī)科學(xué)相關(guān)領(lǐng)域的知識(shí)。除此之外我們還會(huì)用到語(yǔ)言學(xué),神經(jīng)科學(xué),城市規(guī)劃等其他領(lǐng)域的概念或知識(shí)。想要充分發(fā)揮數(shù)據(jù)挖掘的威力,算法肯定是必備的。(在這里推薦讀者去刷一刷LeetCode)
一般來(lái)說(shuō)數(shù)據(jù)挖掘有這三個(gè)基本步驟:1、創(chuàng)建數(shù)據(jù)集。數(shù)據(jù)集能直接反應(yīng)一些真實(shí)事件;2、選擇算法。選擇一個(gè)合適的算法才能更好的對(duì)數(shù)據(jù)進(jìn)行處理;3、優(yōu)化算法。每種數(shù)據(jù)挖掘算法都有參數(shù),它們或是算法自身包含的,或是使用者添加的,這些參數(shù)會(huì)影響算法的具體決策。
現(xiàn)在讓我們用一個(gè)例子說(shuō)明。不知道你逛超市的時(shí)候,是否發(fā)現(xiàn)超市里面基本上都是按照商品的種類(lèi)來(lái)分區(qū)域的,然而有些東西是存在例外的,一件商品的旁邊擺放著不一樣種類(lèi)的商品。不知道你是否有發(fā)現(xiàn)這個(gè)現(xiàn)象,有沒(méi)有對(duì)此感到不解。這邊我想跟你說(shuō)的是,這種擺放也是有道理的,這個(gè)道理是商品之間的親和性!
前置知識(shí):
(1)defaultdict(int):初始化為 0 (2)defaultdict(float):初始化為 0.0 (3)defaultdict(str):初始化為 ''
這里的defaultdict(function_factory)構(gòu)建的是一個(gè)類(lèi)似dictionary的對(duì)象其中keys的值,自行確定賦值,但是values的類(lèi)型,是function_factory的類(lèi)實(shí)例而且具有默認(rèn)值。比如default(int)則創(chuàng)建一個(gè)類(lèi)似dictionary對(duì)象里面任何的values都是int的實(shí)例,而且就算是一個(gè)不存在的key, d[key] 也有一個(gè)默認(rèn)值,這個(gè)默認(rèn)值是int()的默認(rèn)值0。
現(xiàn)在進(jìn)行代碼部分:
import numpy as np from collections import defaultdict dataset_filename = "affinity_dataset.txt" features = ["bread","milk","cheese","apple","banana"] #猜一下這個(gè)是干嘛用的 X = np.loadtxt(dataset_filename) print(X[:5]) #打印前五行的購(gòu)物信息
統(tǒng)計(jì)一下購(gòu)買(mǎi)蘋(píng)果和香蕉的人數(shù):
num_apple_purchases = 0 # 初始化一個(gè)購(gòu)買(mǎi)蘋(píng)果人數(shù)的變量 for sample in X: if sample[3] == 1: num_apple_purchases+=1 print("{0} people bought Apples ".format(num_apple_purchases)) num_banana_purchases = 0 for sample in X: if sample[4] == 1: num_banana_purchases += 1 print("{0} people bought banana".format(num_banana_purchases))
現(xiàn)在為了計(jì)算規(guī)則的置信度還有支持度,我們可以用字典的形式來(lái)存放計(jì)算結(jié)果:
valid_rules = defaultdict(int) invalid_rules = defaultdict(int) num_occurances = defaultdict(int) for sample in X: for premise in range(4): if sample[premise] ==0 : continue num_occurances[premise] +=1 #當(dāng)顧客有購(gòu)買(mǎi)物品時(shí)key對(duì)應(yīng)的時(shí)value變?yōu)? for conclusion in range(4): if premise == conclusion: #訪(fǎng)問(wèn)同一個(gè)key 的時(shí)候是沒(méi)有意義的直接跳過(guò) continue if sample[conclusion] == 1: valid_rules[(premise,conclusion)] +=1 else: invalid_rules[(premise,conclusion)] +=1
得到所有必要的統(tǒng)計(jì)量后,我們?cè)賮?lái)計(jì)算每條規(guī)則的支持度和置信度。如前所述,支持度就是規(guī)則應(yīng)驗(yàn)的次數(shù):
support = valid_rules #置信度的計(jì)算方法類(lèi)似,遍歷每條規(guī)則進(jìn)行計(jì)算 confidence = defaultdict(float) for premise,conclusion in valid_rules.keys(): rule = (premise,conclusion) confidence[rule] = valid_rules[rule]/num_occurances[premise]
聲明一個(gè)函數(shù),接收的參數(shù)有:分別作為前提條件和結(jié)論的特征索引值、支持度字典、置信度字典以及特征列表。
def print_rule(premise, conclusion,support , confidence,features): premise_name = features[premise] conclusion_name = features[conclusion] print("Rule:if a person buys {0} they will also buy {1} ".format(premise_name,conclusion_name)) print(" - Support : {0}".format(support[(premise,conclusion)])) print(" - Confidence : {0:.3f}".format(confidence[(premise,conclusion)])) premise = 1 conclusion = 3 features = ["bread","milk","cheese","apple","banana"] print_rule(premise,conclusion,support,confidence,features) from operator import itemgetter sorted_support = sorted(support.items(),key=itemgetter(1),reverse=True)
排序完成后,就可以輸出支持度最高的前5條規(guī)則:
for index in range(5): print("Rule #{0}".format(index+1)) premise,conclusion = sorted_support[index][0] print_rule(premise,conclusion,support,confidence,features)
關(guān)于“如何利用Python進(jìn)行商品的親和性分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。