Chào mừng đến với BIS Đăng nhập | Đăng ký | Trợ giúp
trong Tìm kiếm

Khai phá luật kết hợp với R

Bài cuối 08-04-2017 06:31 PM của chucnv. 0 trả lời.
Trang 1 trong số 1 (1 nội dung)
Sắp xếp bài viết: Trước Tiếp theo
  • 08-04-2017 06:31 PM

    • chucnv
    • 10 thành viên năng nổ nhất
    • Tham gia 12-05-2008
    • Điểm 9,460

    Khai phá luật kết hợp với R

    Khai phá luật kết hợp với R

    Association Rule Mining with R

    chuc1803@gmail.com

     

    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 (xem thêm về luật kết hợp tại http://bis.net.vn/forums/t/389.aspx).

    Bài viết này giới thiệu cách khai phá luật kết hợp với ngôn ngữ 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, người 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 dataset Titanic.

    Download Titanic dataset tại ĐÂY

    Download Code R để thực hiện tại ĐÂY

    Các bước thực hiện khai phá luật kết hợp với R

    Bước 1. Load và xem qua dữ liệu

    #Load the Titanic dataset

    setwd("D:/R")

    load("titanic.raw.rdata")

    #Quick view about the dataset

    fix(titanic.raw)

    dim(titanic.raw)

    str(titanic.raw)

    #Show 5 rows of the dataset

    idx <- sample(1:nrow(titanic.raw),5)

    titanic.raw[idx, ]

    #show summary of the dataset

    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

    #install packages "arules"

    install.packages("arules")

    #load required library

    library(arules)

    rules.all <- apriori(titanic.raw) # run the APRIORI algorithm

    length(rules.all) # Number of rules

    inspect(rules.all) #show the rules

     Có tất cả 27 luật được phát hiện như hình trên.

    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:

    # run APRIORI again to find rules with rhs containing "Survived" only

    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

    #keep three decimal places

    quality(rules.surv) <- round(quality(rules.surv),digits=3)

    #sort rules by lift

    rules.surv.sorted <- sort(rules.surv,by="lift")

    inspect(rules.surv.sorted) # print rules

    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 (Rule #2) không cung cấp tri thức gì thêm so với Rule #1, vì theo Rule #1 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 Rule #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 Rule #4, #7 và #8 có thể xem là thừa khi so sánh với Rule #3, #6 và #5.

     Tìm các luật thừa

    # find redundant rules

    subset.matrix <- is.subset(rules.surv.sorted, rules.surv.sorted)

    subset.matrix[lower.tri(subset.matrix, diag = T)] <- F

    redundant <- colSums(subset.matrix) >= 1

    #which rules are redundant

    which(redundant)

    Các luật #2,#4,#7 và #8 là các luật thừa

     Loại bỏ các luật thừa

    # remove redundant rules

    rules.surv.pruned <- rules.surv.sorted[!redundant]

    inspect(rules.surv.pruned) ## print rules

    Các luật còn lại sau khi loại bỏ các luật thừa.

     inspect(rules.surv.pruned[1]) ## print 1st rules

    Tìm các luật liên quan đến nhóm tuổi

     #Find Rules about Age Groups

    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

     

     

    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.

    #Install and load requirement packages

    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))

     

     XEM CLIP HƯỚNG DẪN KHAI PHÁ LUẬT KẾT HỢP VỚI R Ở ĐÂY

    • Điểm chủ đề: 20
Trang 1 trong số 1 (1 nội dung)
Powered by Community Server (Commercial Edition), by Telligent Systems