資料探勘系列筆記(1) 親和性分析

2021-09-11 17:55:13 字數 3378 閱讀 4364

親和性分析是根據樣本個體(物體)之間的相似度,確定它們關係的親疏。在資料探勘中有大量的應用場景,比如顧客更願意同時購買哪些物品。

親和性有多種測量方法。例如,統計兩件商品一起**的頻率,或者統計顧客購買了商品1 後再買商品2的比率。最常用的用來進行親和性分析的兩個重要概念是:支援度(support)和置信度(confidence)。舉個例子:我們說在全班同學的樣本中間,地理90分以上的同學歷史也考90以上,那麼他的支援度就是所有兩門90分的人在樣本中的佔比,而置信度就是在地理90分的樣本中,歷史90分的人的佔比。

接下來是乙個利用計算支援度和置信度實現規則判斷的乙個例子(來自書籍《python資料探勘入門與實踐》):商品推薦,任務目標,發現超市顧客對於商品購買的連帶情況,找出更願意一起購買的貨物,然後重新布置貨架。為了簡化**,方便講解,我們只考慮一次購買兩種商品的情況。例如,人們去超市既買了 麵包,又買了牛奶。作為資料挖據入門性質的例子,我們希望得到下面這樣的規則:如果乙個人買了商品x,那麼他很有可能購買商品y。

資料的矩陣話計算需要庫:numpy,numpy是python中處理二位資料最常用的依賴方法,後邊還有更多的使用。可以吧numpy理解為乙個矩陣控制器的物件,匯入之後就直接建立了這個manager的object

import numpy as np 

dataset_filename = "affinity_dataset.txt"

x = np.loadtxt(dataset_filename)

這樣就得到了相關性分析資料庫的陣列實體。(陣列來自隨書材料,是[n:5]的二維陣列,資料為0或者1,每行表示每個顧客當次購物是否購買5類產品)。因此我們挖掘目標就是,找到支援度性和置信度最高的顧客願意一起購買的物品的規則。

我們可以通過統計每個事件發生的頻率作為計算的基礎,比如:所有購買蘋果的顧客的數量:

因此對於某個樣本的支援度計算即為:

可以通過迴圈一次性計算所有的規則的發生次數和應驗次數:

發生次數記為occurance,應驗記為valid,為了方便統計,不應驗記為invalid:

from collections import defaultdict

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

else:

num_occurances[premise] += 1

for conclusion in range(4):

if premise == conclusion:

continue

else:

if sample[conclusion] == 1:

valid_rules[(premise, conclusion)] += 1

else:

invalid_rules[(premise, conclusion)] += 1

support = valid_rules

confidence = defaultdict(float)

for premise, conclusion in valid_rules.keys():

rule = (premise, conclusion)

confidence[rule] = valid_rules[rule] / num_occurances[premise]

這裡的原理就是:遍歷x中的每乙個樣本,然後針對每個樣本再做2層遍歷,把所有發生的可能性找一遍,記錄每個場景發生的次數(支援度)以及應驗的次數(即購買了a的樣本中購買b的數量,置信度)

接下來構建列印函式從資料中獲取結果:

from operator import itemgetter #類似迭代器的東西

#規則排序

sorted_support = sorted(support.items(), key=itemgetter(1), reverse=true)

sorted_confidence = sorted(confidence.items(), key = itemgetter(1), reverse = true)

#列印規則表的規則(通過依賴的商品id)

def print_rule(premise, conclusion, support, confidence, features):

premise_name = features[premise]

conclusion_name = features[conclusion]

print("rule: if a person buys they will also buy ".format(premise_name, conclusion_name))

print("--support: ".format(support[(premise, conclusion)]))

print("--conclusion: ".format(confidence[(premise, conclusion)]))

#列印前5條支援度

for index in range(5):

print("rule #".format(index + 1))

(premise, conclusion) = sorted_support[index][0]

print_rule(premise, conclusion, support, confidence, features)

#列印前5條置信度

for index in range(5):

print("rule #".format(index + 1))

(premise, conclusion) = sorted_confidence[index][0]

print_rule(premise, conclusion, support, confidence, features)

得到的結果如下:

資料探勘入門系列教程(一)之親和性分析

該教程為入門教程,為博主學習資料探勘的學習路徑步驟。教程為入門教程,從最簡單的開始。使用的程式語言為python3.8.1,使用jupyternotebook作為開發環境 使不使用jupyternotebook都沒有關係 在學習本教程之前,你需要 什麼是資料探勘,相信點選進入這篇部落格的人都應該知道...

親和性分析

小編最近在看 robert layton 的資料探勘,寫隨筆一方面為了加深印象,一方面為了以後方便看。通常 為了增大需求,常常把顧客願意一起買的東西放在一起。這樣顧客買的機率較大,能夠刺激消費。最簡單的例子就是,你買了羊肉卷,那你肯定也想買墨魚丸,買了墨魚丸,想到了火鍋底料,如果你沒有想到的化,那麼...

工作筆記 CPU親和性

近日看春華兄的 發現在每個執行緒中在處理具體事務前都呼叫乙個set cpu 的方法。深感不解,直到看了set cpu的原始碼和查了一些資料才明白,原來是進行cpu繫結,或者說cpu親和性。就是程序 執行緒要在指定的 cpu 上盡量長時間地執行而不被遷移到其他處理器,這樣做最直觀的好處就是提高了cpu...