दिलचस्प पोस्ट
क्या html_entity_decode पर ENT_HTML5, ENT_HTML401, … संशोधक क्या करते हैं? मैं मोबाइल लेआउट पर बूटस्ट्रैप 3 कॉलम ऑर्डर कैसे बदलूं? एक्सओआर परिवर्तनीय काम कैसे करता है? pthread: एक प्रिंटफ़ स्टेटमेंट बाल थ्रेड में दो बार प्रिंट हो जाता है ओपीएसएसएल :: SSL :: हेरोको पर एसएसईएलआरआर Printf में चर टेक्स्ट कॉलम चौड़ाई सेट करें ग्रिड दृश्य छँटाई: क्रमबद्ध दिशा हमेशा बढ़ते जा रहे हैं Google App Engine में मॉड्यूल कैसे आयात करें? दस्तावेज़ से कुछ फ़ील्ड को बाहर कैसे करें ExpressJS कैसे एक आवेदन की संरचना? एनजी-चयनित चयनित तत्व में काम नहीं कर रहा है जावास्क्रिप्ट में HTML संस्थाओं को डिकोड करें? पासवर्ड के लिए स्ट्रिंग के ऊपर चार पसंदीदा क्यों हैं? कोणीय – एकाधिक HTTP कॉल के डेटा तक पहुंच – कैसे वादे को हल करने के लिए OWIN में ओथ बियरर टोकन से आईपी्रीनिस्ट प्राप्त करें

सह-घटना मैट्रिक्स बनाना

मैं सह-मैट्रिक्स मैट्रिक्स होने की समस्या को हल करने की कोशिश कर रहा हूं। मेरे पास लेन-देन और वस्तुओं का डेटाफ़ाइल है, और मैं लेनदेन की संख्या का एक मैट्रिक्स देखना चाहता हूं जहां आइटम एक साथ दिखाई देते हैं।

मैं आर प्रोग्रामिंग में एक नौसिखिया हूँ और मुझे कुछ मज़ेदार हैं जो आर के सभी शॉर्टकट्स खोजते हैं, जो कि विशिष्ट छोरों को बनाने के बजाय (मैं सी साल पहले और सिर्फ एक्सेल मैक्रोज़ और एसपीएसएस में चिपकाता था) का उपयोग करता था। मैंने यहाँ समाधानों की जांच की है, लेकिन कोई काम नहीं करता है (निकटतम समाधान यहाँ दिया गया है: एसएसी का उपयोग करते हुए सह-घटना मैट्रिक्स? – लेकिन जब मैंने प्रोजेक्टिंग_टीएम इस्तेमाल किया तो मुझे एक त्रुटि संदेश मिला, मुझे संदेह है कि cbind wasn ' मेरे मामले में सफल रहे

मूल रूप से मेरे पास निम्न तालिका है:

TrxID Items Quant Trx1 A 3 Trx1 B 1 Trx1 C 1 Trx2 E 3 Trx2 B 1 Trx3 B 1 Trx3 C 4 Trx4 D 1 Trx4 E 1 Trx4 A 1 Trx5 F 5 Trx5 B 3 Trx5 C 2 Trx5 D 1, etc. 

मैं ऐसा कुछ बनाना चाहता हूं:

  ABCDEF A 0 1 1 0 1 1 B 1 0 3 1 1 0 C 1 3 0 1 0 0 D 1 1 1 0 1 1 E 1 1 0 1 0 0 F 0 1 1 1 0 0 

मैंने क्या किया था (और आप शायद मेरे धोखेबाज़ आर दृष्टिकोण पर हंसते हैं):

 library(igraph) library(tnet) trx <- read.table("FileName.txt", header=TRUE) transID <- t(trx[1]) items <- t(trx[2]) id_item <- cbind(items,transID) item_item <- projecting_tm(id_item, method="sum") item_item <- tnet_igraph(item_item,type="weighted one-mode tnet") item_matrix <-get.adjacency(item_item,attr="weight") item_matrix 

जैसा कि cbind से ऊपर वर्णित है शायद असफल रहा था, इसलिए projecting_tm मुझे कोई परिणाम नहीं दे सकता।

किसी भी वैकल्पिक दृष्टिकोण या मेरे विधि में सुधार?

तुम्हारी सहायता को खासा सराहा जाएगा!

वेब के समाधान से एकत्रित समाधान "सह-घटना मैट्रिक्स बनाना"

मैं reshape2 पैकेज और मैट्रिक्स बीजगणित के संयोजन का उपयोग करूँगा:

 #read in your data dat <- read.table(text="TrxID Items Quant Trx1 A 3 Trx1 B 1 Trx1 C 1 Trx2 E 3 Trx2 B 1 Trx3 B 1 Trx3 C 4 Trx4 D 1 Trx4 E 1 Trx4 A 1 Trx5 F 5 Trx5 B 3 Trx5 C 2 Trx5 D 1", header=T) #making the boolean matrix library(reshape2) dat2 <- melt(dat) w <- dcast(dat2, Items~TrxID) x <- as.matrix(w[,-1]) x[is.na(x)] <- 0 x <- apply(x, 2, function(x) as.numeric(x > 0)) #recode as 0/1 v <- x %*% t(x) #the magic matrix diag(v) <- 0 #repalce diagonal dimnames(v) <- list(w[, 1], w[,1]) #name the dimensions v 

शायद ग्राफिंग के लिए …

 g <- graph.adjacency(v, weighted=TRUE, mode ='undirected') g <- simplify(g) # set labels and degrees of vertices V(g)$label <- V(g)$name V(g)$degree <- degree(g) plot(g) 

उपरोक्त उत्तरों में से "dat" का उपयोग करके, crossprod और table प्रयास करें:

 V <- crossprod(table(dat[1:2])) diag(V) <- 0 V # Items # Items ABCDEF # A 0 1 1 1 1 0 # B 1 0 3 1 1 1 # C 1 3 0 1 0 1 # D 1 1 1 0 1 1 # E 1 1 0 1 0 0 # F 0 1 1 1 0 0 

कुशलता के कारणों के लिए, विशेष रूप से स्पार्स डेटा पर, मैं एक विरल मैट्रिक्स का उपयोग करने की सलाह दूंगा।

 dat <- read.table(text="TrxID Items Quant Trx1 A 3 Trx1 B 1 Trx1 C 1 Trx2 E 3 Trx2 B 1 Trx3 B 1 Trx3 C 4 Trx4 D 1 Trx4 E 1 Trx4 A 1 Trx5 F 5 Trx5 B 3 Trx5 C 2 Trx5 D 1", header=T) library("Matrix") # factors for indexing matrix entries and naming dimensions trx.fac <- factor(dat[,1]) itm.fac <- factor(dat[,2]) s <- sparseMatrix( as.numeric(trx.fac), as.numeric(itm.fac), dimnames = list( as.character(levels(trx.fac)), as.character(levels(itm.fac))), x = 1) # calculating co-occurrences v <- t(s) %*% s # setting transactions counts of items to zero diag(v) <- 0 v 

मैं इस समाधान में पोस्ट किए गए प्रत्येक समाधान का प्रयास कर रहा था इनमें से कोई भी बड़े मैट्रिक्स के साथ काम नहीं करता (मैं 1,500 x 2, 000,000 मैट्रिक्स के साथ काम कर रहा था)।

एक छोटा सा ऑफ-विषय : एक सह-घटना मैट्रिक्स की गणना के बाद, मैं आमतौर पर अलग-अलग आइटमों के बीच की दूरी की गणना करना चाहता हूं। कोसाइन समानता / दूरी को इस तरह सह-घटना मैट्रिक्स पर कुशलता से गणना की जा सकती है:

 # cross-product of vectors (numerator) num <- v %*% v # square root of square sum of each vector (used for denominator) srss <- sqrt(apply(v^2, 1, sum)) # denominator den <- srss %*% t(srss) # cosine similarity v.cos.sim <- num / den # cosine distance v.cos.dist <- 1 - v.cos.sim 

मैं इसके लिए xtabs का उपयोग करेगा:

 dat <- read.table(text="TrxID Items Quant Trx1 A 3 Trx1 B 1 Trx1 C 1 Trx2 E 3 Trx2 B 1 Trx3 B 1 Trx3 C 4 Trx4 D 1 Trx4 E 1 Trx4 A 1 Trx5 F 5 Trx5 B 3 Trx5 C 2 Trx5 D 1", header=T) term_doc <- xtabs(~ TrxID + Items, data=dat, sparse = TRUE) co_occur <- crossprod(term_doc, term_doc) diag(co_occur) <- 0 co_occur 

मैंने यह स्पष्ट करने के लिए sparse = TRUE को फेंक दिया कि यह बहुत बड़े डेटा सेट के लिए काम कर सकता है।

यह वास्तव में बहुत आसान और साफ है अगर आप पहली बार द्विपक्षीय ग्राफ़ बनाते हैं, जहां शीर्ष नोड लेनदेन हैं और नीचे नोड आइटम हैं फिर आप नीचे नोड्स के लिए एक प्रोजेक्शन बनाते हैं।

 dat <- read.table(text="TrxID Items Quant Trx1 A 3 Trx1 B 1 Trx1 C 1 Trx2 E 3 Trx2 B 1 Trx3 B 1 Trx3 C 4 Trx4 D 1 Trx4 E 1 Trx4 A 1 Trx5 F 5 Trx5 B 3 Trx5 C 2 Trx5 D 1", header=T) library(igraph) bip <- graph.data.frame(dat) V(bip)$type <- V(bip)$name %in% dat[,1] ## sparse=TRUE is a good idea if you have a large matrix here v <- get.adjacency(bipartite.projection(bip)[[2]], attr="weight", sparse=FALSE) ## Need to reorder if you want it alphabetically v[order(rownames(v)), order(colnames(v))] # ABCDEF # A 0 1 1 1 1 0 # B 1 0 3 1 1 1 # C 1 3 0 1 0 1 # D 1 1 1 0 1 1 # E 1 1 0 1 0 0 # F 0 1 1 1 0 0