การวิเคราะห์ข้อมูลขนาดใหญ่ - กฎการเชื่อมโยง

ให้ฉัน = ฉัน1ฉัน2 , ... , ฉันnเป็นชุดของ n คุณลักษณะไบนารีที่เรียกว่ารายการ ให้D = t 1 , t 2 , ... , t mเป็นชุดของธุรกรรมที่เรียกว่าฐานข้อมูล แต่ละธุรกรรมใน D มีรหัสธุรกรรมที่ไม่ซ้ำกันและมีชุดย่อยของรายการใน I กฎถูกกำหนดให้เป็นนัยของรูปแบบ X ⇒ Y โดยที่ X, Y ⊆ I และ X ∩ Y = ∅

ชุดของรายการ (สำหรับชุดรายการแบบสั้น) X และ Y เรียกว่าก่อนหน้า (ด้านซ้ายมือหรือ LHS) และผลที่ตามมา (ด้านขวามือหรือ RHS) ของกฎ

เพื่อแสดงแนวคิดเราใช้ตัวอย่างเล็ก ๆ จากโดเมนซูเปอร์มาร์เก็ต ชุดรายการคือ I = {นมขนมปังเนยเบียร์} และฐานข้อมูลขนาดเล็กที่มีรายการดังแสดงในตารางต่อไปนี้

รหัสธุรกรรม รายการ
1 นมขนมปัง
2 ขนมปังเนย
3 เบียร์
4 นมขนมปังเนย
5 ขนมปังเนย

ตัวอย่างกฎสำหรับซูเปอร์มาร์เก็ตอาจเป็น {นมขนมปัง} ⇒ {เนย} ซึ่งหมายความว่าหากซื้อนมและขนมปังลูกค้าก็ซื้อเนยเช่นกัน ในการเลือกกฎที่น่าสนใจจากชุดของกฎที่เป็นไปได้ทั้งหมดสามารถใช้ข้อ จำกัด เกี่ยวกับการวัดความสำคัญและความสนใจต่างๆได้ ข้อ จำกัด ที่รู้จักกันดีคือเกณฑ์ขั้นต่ำในการสนับสนุนและความมั่นใจ

การสนับสนุน Supp (X) ของชุดรายการ X ถูกกำหนดเป็นสัดส่วนของธุรกรรมในชุดข้อมูลซึ่งมีชุดรายการ ในฐานข้อมูลตัวอย่างในตารางที่ 1 ชุดรายการ {milk, bread} รองรับ 2/5 = 0.4 เนื่องจากเกิดขึ้นใน 40% ของธุรกรรมทั้งหมด (2 จาก 5 ธุรกรรม) การค้นหาชุดรายการที่ใช้บ่อยสามารถมองว่าเป็นการทำให้ปัญหาการเรียนรู้ที่ไม่ได้รับการดูแลง่ายขึ้น

ความเชื่อมั่นของกฎถูกกำหนด conf (X ⇒ Y) = supp (X ∪ Y) / supp (X) ตัวอย่างเช่นกฎ {นมขนมปัง} ⇒ {เนย} มีค่าความเชื่อมั่น 0.2 / 0.4 = 0.5 ในฐานข้อมูลในตารางที่ 1 ซึ่งหมายความว่า 50% ของธุรกรรมที่มีนมและขนมปังนั้นเป็นกฎที่ถูกต้อง ความเชื่อมั่นสามารถตีความได้ว่าเป็นค่าประมาณของความน่าจะเป็น P (Y | X) ความน่าจะเป็นในการค้นหา RHS ของกฎในธุรกรรมภายใต้เงื่อนไขที่ธุรกรรมเหล่านี้มี LHS ด้วย

ในสคริปต์ที่อยู่ใน bda/part3/apriori.R รหัสที่จะใช้ apriori algorithm สามารถพบได้

# Load the library for doing association rules
# install.packages(’arules’) 
library(arules)  

# Data preprocessing 
data("AdultUCI") 
AdultUCI[1:2,]  
AdultUCI[["fnlwgt"]] <- NULL 
AdultUCI[["education-num"]] <- NULL  

AdultUCI[[ "age"]] <- ordered(cut(AdultUCI[[ "age"]], c(15,25,45,65,100)), 
   labels = c("Young", "Middle-aged", "Senior", "Old")) 
AdultUCI[[ "hours-per-week"]] <- ordered(cut(AdultUCI[[ "hours-per-week"]], 
   c(0,25,40,60,168)), labels = c("Part-time", "Full-time", "Over-time", "Workaholic")) 
AdultUCI[[ "capital-gain"]] <- ordered(cut(AdultUCI[[ "capital-gain"]], 
   c(-Inf,0,median(AdultUCI[[ "capital-gain"]][AdultUCI[[ "capitalgain"]]>0]),Inf)), 
   labels = c("None", "Low", "High")) 
AdultUCI[[ "capital-loss"]] <- ordered(cut(AdultUCI[[ "capital-loss"]], 
   c(-Inf,0, median(AdultUCI[[ "capital-loss"]][AdultUCI[[ "capitalloss"]]>0]),Inf)), 
   labels = c("none", "low", "high"))

ในการสร้างกฎโดยใช้อัลกอริทึม apriori เราจำเป็นต้องสร้างเมทริกซ์ธุรกรรม รหัสต่อไปนี้แสดงวิธีการทำใน R

# Convert the data into a transactions format
Adult <- as(AdultUCI, "transactions") 
Adult 
# transactions in sparse format with 
# 48842 transactions (rows) and 
# 115 items (columns)  

summary(Adult)  
# Plot frequent item-sets 
itemFrequencyPlot(Adult, support = 0.1, cex.names = 0.8)  

# generate rules 
min_support = 0.01 
confidence = 0.6 
rules <- apriori(Adult, parameter = list(support = min_support, confidence = confidence))

rules 
inspect(rules[100:110, ]) 
# lhs                             rhs                      support     confidence  lift
# {occupation = Farming-fishing} => {sex = Male}        0.02856148  0.9362416   1.4005486
# {occupation = Farming-fishing} => {race = White}      0.02831579  0.9281879   1.0855456
# {occupation = Farming-fishing} => {native-country     0.02671881  0.8758389   0.9759474
                                       = United-States}