Khai phá luật kết hợp với R
I. Giới thiệu
Khai phá luật kết hợp (Association Rule Mining) là kỹ thuật rất quan trọng trong
lĩnh vực khai phá dữ liệu. Mục đích của việc khai phá luật kết hợp là tìm ra các mối
quan hệ, sự kết hợp hay mối tương quan giữa các đối tượng trong khối lượng lớn dữ
liệu. Hiện nay có nhiều phần mềm hỗ trợ việc khai phá dữ liệu như Weka, R (R
programming language), Python…
Trong bài tập này, chúng em sử dụng phần mềm R để khai phá dữ liệu
II. Tải và cài đặt phần mềm R
- Tải phần mềm R programming language theo địa chỉ:
/> />- Cài đặt R, giao diện sau khi cài đặt và chạy
III. Mô tả dữ liệu, nguồn dữ liệu và các bước khai phá luật kết hợp với R
- Data set minh họa: “Titanic Dataset”. Đây là bộ dữ liệu về số phận của 2201
hành khách trên tàu Titanic theo 4 thuộc tính gồm social class (tầng lớp xã hội), sex
(giới tính), age (tuổi), survival (sống sót). Khi nghiên cứu dữ liệu về thảm họa chìm tàu
Titanic vào ngày 14 tháng 04 năm 1912 làm 1514 người chết, một số câu hỏi được đặt
ra là: Trẻ con có tỷ lệ sống sót cao hơn người lớn không? Những đứa trẻ có tầng lớp xã
hội thượng lưu có tỷ lệ sống sót cao hơn trẻ con của các tầng lớp khác không? Tỷ lệ
sống sót có phụ thuộc vào gới tính và độ tuổi không?...
Để trả lời các câu hỏi này, chúng ta đã sử dụng kỹ thuật phát hiện luật kết hợp để
khai phá tri thức tiềm ẩn trong Titanic dataset.
- Tải tập dữ liệu “Titanic Dataset” từ địa chỉ:
/>và code của R: />
- Các bước thực hiện khai phá luật kết hợp với R với dữ liệu vừa tải về (4 bước)
* Bước 1. Nạp và xem dữ liệu
#Đường dẫn đến tập tin Titanic dataset
setwd("D:/Ths_CNTT/Cac_mon/Khai_pha_data/BT_21_10_2020")
#Nạp dữ liệu
load("titanic.raw.rdata")
#Xem nhanh về tập dữ liệu
fix(titanic.raw)
# Xem số lượng và số thuộc tính
dim(titanic.raw)
str(titanic.raw)
#Hiển thị 5 hàng dữ liệu
idx <- sample(1:nrow(titanic.raw),5)
titanic.raw[idx, ]
# Hiển thị tóm tắt tập dữ liệu
summary(titanic.raw)
* Bước 2. Sử dụng thuật toán Apriori trong gói arules để phát hiện luật kết
hợp
Các thiết lập mặc định của thuật toán phát hiện luật kết hợp Apriori:
minimum support: supp=0.1; minimum confidence: conf=0.8; maximum length
of rules: maxlen=10
#Cài đặt gói "arules"
install.packages("arules")
#Thư viện yêu cầu
library(arules)
# Chạy thuật toán APRIORI
rules.all <- apriori(titanic.raw)
# Số luật
length(rules.all)
#Hiển thị số luật (27 luật như hình bên dưới)
inspect(rules.all)
Giả sử rằng chúng ta muốn tìm các luật chỉ chứa "Survived" bên vế phải của luật
(rhs :right- hand side) với ít nhất 2 items (minlen=2), với supp=0.005 và conf=0.8 ta sử
dụng lệnh sau:
# Chạy thuật toán APRIORI một lần nữa để tìm các luật với “rhs” chỉ chứa
"Survived"
rules.surv <- apriori(titanic.raw, control = list(verbose=F), parameter
=list(minlen=2, supp=0.005, conf=0.8), appearance = list(rhs=c("Survived=No",
"Survived=Yes"), default="lhs"))
Xem kết quả các luật phát hiện được
#Định dạng 3 chữ số thập phân
quality(rules.surv) <- round(quality(rules.surv),digits=3)
#Sắp xếp theo thứ tự
rules.surv.sorted <- sort(rules.surv,by="lift")
# In ra các luật
inspect(rules.surv.sorted)
* Bước 3. Loại bỏ các luật thừa
Thông thường các luật được phát hiện từ dataset là rất lớn và có rất nhiều luật
thừa (trùng với các luật khác) vì vậy ta phải loại bỏ các luật thừa trước khi nghiên cứu
các luật.
Xem 2 luật đầu tiên sau khi đã sắp xếp giảm dần theo lift
Với 2 luật trên ta thấy Luật thứ 2 không cung cấp tri thức gì thêm so với Luật 1,
vì theo Luật1 thì tất cả các hành khách thuộc tầng lớp 2nd-class là trẻ con thì sống sót
(Survived =Yes). Cả 2 luật đều có confident và life như nhau. Trong trường hợp này
Luật 2 được xem là thừa. Kiểm tra tất cả các luật được phát hiện, có thể thấy các luật
thừa khi so sánh Luật 4-3, Luật 7-6 và Luật 8-5.
Tìm các luật thừa
# Tìm luật dư thừa
subset.matrix <- is.subset(rules.surv.sorted, rules.surv.sorted)
subset.matrix[lower.tri(subset.matrix, diag = T)] <- F
redundant <- colSums(subset.matrix) >= 1
#Các luật dư thừa (kết quả: Các luật 2, 4, 7 và 8 là các luật thừa)
which(redundant)
Loại bỏ các luật thừa
# Loại bỏ luật dư thừa
rules.surv.pruned <- rules.surv.sorted[!redundant]
# In ra các luật sau khi loại bỏ các luật thừa
inspect(rules.surv.pruned)
# In 1 luật
inspect(rules.surv.pruned[1])
Tìm các luật liên quan đến nhóm tuổi
#Tìm các luật liên quan đến nhóm tuổi
rules.age <- apriori(titanic.raw,control = list(verbose=F),
parameter = list(minlen=3, supp=0.002, conf=0.2),
appearance = list(default="none", rhs=c("Survived=Yes"),
lhs=c("Class=1st", "Class=2nd", "Class=3rd",
"Age=Child", "Age=Adult")))
rules.age <- sort(rules.age, by="confidence")
inspect(rules.age)
# Tỷ lệ sống sót
prop.table(table(titanic.raw$Survived))
* Bước 4. Trực quan hóa các luật kết hợp (Visualizing Association Rules)
Để dễ hình dung và giải thích các luật kết hợp phát hiện được, ta sử dụng gói
arulesViz để biểu diễn các luật dưới dạng trực quan.
# Tải và cài đặt các gói arulesViz
install.packages("arulesViz")
library(arulesViz)
plot(rules.all)
plot(rules.surv,method = "grouped")
{Class=1st, Sex=Female, +1 items}=>{Survived=Yes}
plot(rules.surv,method="graph", control=list(layout=igraph::with_fr()))
plot(rules.surv,method="graph", control=list(layout=igraph::in_circle()))
plot(rules.surv,method="paracoord", control=list(reorder=T))
Tác giả: TT