by Anonymous » 25 Aug 2025, 07:32
Ich habe ein binäres 2D -Numpy -Array, das Transaktionen und Elemente darstellt. Für Punkt I (als Spalten dargestellt) möchte ich die Gesamtzahl der Transaktionen (als Zeilen dargestellt) berechnen, die diesen Artikel gekauft haben, alle Artikel, die neben Punkt I gekauft wurden, und alle Transaktionen, die diesen Artikel zugeordnet sind. Dies geschieht, um Unterstützung, Vertrauen und Heben zwischen den Gegenständen zu berechnen. Meine aktuelle Implementierung verwendet eine verschachtelte Schleife, dauert jedoch zu lange für einen großen Datensatz. Gibt es eine Möglichkeit, eine Matrix optimal zu scannen, wenn ich jedes Mal die Gesamtheit scannen muss? < /P>
Hier ist mein Code mit einem Beispielarray.
Code: Select all
import numpy as np
results = []
data = np.array([[0,1,0,1],[1,1,0,1],[0,0,0,1],[1,1,1,1]])
N = data.shape[0] #total transactions
for i in range(4): # for each item i
#transactions% where item i was purchased
mask_i = data[:,i] == 1
support_i = data[mask_i].shape[0]/N
for j in range(4): # check all items j
#transactions where both i and j are purchased
mask_j = data[:,j] == 1
support_j = data[mask_j].shape[0]/N #transactions% where j is purchased
mask_c = np.logical_and(mask_i,mask_j) # mask for where both i and j were purchased
confidence = (data[mask_c].shape[0]/N) / support_i
lift = confidence/support_j
results.append([i,j,confidence,lift]) #store combination
< /code>
Die Ergebnisliste zeigt jede identifizierte Kombination von Elementen mit anderen Elementen an. < /p>
[[0, 0, 1.0, 2.0], [0, 1, 1.0, 1.3333333333333333], [0, 2, 0.5, 2.0], [0, 3, 1.0, 1.0], [1, 0, 0.6666666666666666, 1.3333333333333333], [1, 1, 1.0, 1.3333333333333333], [1, 2, 0.3333333333333333, 1.3333333333333333], [1, 3, 1.0, 1.0], [2, 0, 1.0, 2.0], [2, 1, 1.0, 1.3333333333333333], [2, 2, 1.0, 4.0], [2, 3, 1.0, 1.0], [3, 0, 0.5, 1.0], [3, 1, 0.75, 1.0], [3, 2, 0.25, 1.0], [3, 3, 1.0, 1.0]]
Ich habe ein binäres 2D -Numpy -Array, das Transaktionen und Elemente darstellt. Für Punkt I (als Spalten dargestellt) möchte ich die Gesamtzahl der Transaktionen (als Zeilen dargestellt) berechnen, die diesen Artikel gekauft haben, alle Artikel, die neben Punkt I gekauft wurden, und alle Transaktionen, die diesen Artikel zugeordnet sind. Dies geschieht, um Unterstützung, Vertrauen und Heben zwischen den Gegenständen zu berechnen. Meine aktuelle Implementierung verwendet eine verschachtelte Schleife, dauert jedoch zu lange für einen großen Datensatz. Gibt es eine Möglichkeit, eine Matrix optimal zu scannen, wenn ich jedes Mal die Gesamtheit scannen muss? < /P>
Hier ist mein Code mit einem Beispielarray.[code]import numpy as np
results = []
data = np.array([[0,1,0,1],[1,1,0,1],[0,0,0,1],[1,1,1,1]])
N = data.shape[0] #total transactions
for i in range(4): # for each item i
#transactions% where item i was purchased
mask_i = data[:,i] == 1
support_i = data[mask_i].shape[0]/N
for j in range(4): # check all items j
#transactions where both i and j are purchased
mask_j = data[:,j] == 1
support_j = data[mask_j].shape[0]/N #transactions% where j is purchased
mask_c = np.logical_and(mask_i,mask_j) # mask for where both i and j were purchased
confidence = (data[mask_c].shape[0]/N) / support_i
lift = confidence/support_j
results.append([i,j,confidence,lift]) #store combination
< /code>
Die Ergebnisliste zeigt jede identifizierte Kombination von Elementen mit anderen Elementen an. < /p>
[[0, 0, 1.0, 2.0], [0, 1, 1.0, 1.3333333333333333], [0, 2, 0.5, 2.0], [0, 3, 1.0, 1.0], [1, 0, 0.6666666666666666, 1.3333333333333333], [1, 1, 1.0, 1.3333333333333333], [1, 2, 0.3333333333333333, 1.3333333333333333], [1, 3, 1.0, 1.0], [2, 0, 1.0, 2.0], [2, 1, 1.0, 1.3333333333333333], [2, 2, 1.0, 4.0], [2, 3, 1.0, 1.0], [3, 0, 0.5, 1.0], [3, 1, 0.75, 1.0], [3, 2, 0.25, 1.0], [3, 3, 1.0, 1.0]]
[/code]