Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth

30 1.1K 5
Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tiểu luận:“Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth” MỤC LỤC  LỜI NHẬN XÉT HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 1 Tiểu luận:“Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth” LỜI MỞ ĐẦU  Môn học: “Khai Phá Tri Thức” đã mở rộng hơn việc tìm hiểu, khám phá các tri thức tiềm ẩn trong các cơ sở dữ liệu (CSDL) khổng lồ và phân tích khai thác hiệu quả nguồn thông tin từ các CSDL đó, hỗ trợ cần thiết cho tiến trình trích lọc, sản sinh những tri thức hữu ích mang tính khái quát, tính quy luật cho việc ra quyết định thông minh nhất giúp nhà sản xuất và kinh doanh giảm thiểu chi phí và gia tăng lợi nhuận trong tương lai. Trong tiểu luận này, tôi xin trình bày khái quát một trong các kỹ thuật khai phá dữ liệu là: Tìm ra quy luật giữa các thông tin để biến chúng thành những tri thức, một trong HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 2 Tiểu luận:“Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth” những cách tìm ra các quy luật này là kỹ thuật “Khai thác tập phổ biến và luật kết hợp”. Có rất nhiều thuật toán tìm luật kết hợp như Apriori, Apriori cải tiến, sử dụng hash… Các thuật toán này đóng góp vai trò rất quan trọng cho quá trình tìm kiếm luật kết hợp. Trong hầu hết các bài toán tìm luật kết hợp thì công đoạn phát sinh tập phổ biến là làm hao tốn nhiều tài nguyên của máy tính nhất. Do đó để cải tiến bài toán theo cách tốt hơn, trước tiên chúng ra hãy đặt vấn đề làm giảm chi phí cho công đoạn tìm tập phổ biến này. Dùng các thuật toán liên quan đến Tree thường cho kết quả rất tốt, vì bản thân tree nói lên phương pháp thực hiện phân hoạch thông tin, chia để trị. Ở đây, để minh họa cho kỹ thuật khai phá tập phổ biến và luật kết hợp, tôi xin trình bày “TÌM HIỂU VÀ CÀI ĐẶT THUẬT TOÁN PHÁT SINH TẬP PHỔ BIẾN BẰNG GIẢI THUẬT FP-GROWTH””. Tôi chân thành cảm ơn Thầy PGS.TS.Đỗ Phúc đã truyền đạt những kiến thức quý báu về khái niệm, ý nghĩa, các tài liệu và ứng dụng của môn học này, mở ra nhiều hướng nghiên cứu chuyên sâu vào từng lĩnh vực ứng dụng đặc thù với những đặc trưng riêng./. Chương I: Cơ Sở Lý Thuyết I.1 Giới thiệu: Khai thác tập phổ biến và luật kết hợp là tiến trình khám phá các tập giá trị thuộc tính xuất hiện phổ biến trong các đối tượng dữ liệu.Từ tập phổ biến có thể tạo ra các luật kết hợp giữa các giá trị thuộc tính trong tập các đối tượng. Luật kết hợp là tri thức quan trọng nhất tiềm ẩn trong CSDL. Một luật kết hợp X -> Y phản ánh sự xuất hiện của tập X dẫn đến sự xuất hiện đồng thời tập Y. Luật kết hợp giúp các nhà hoạch định hiểu rõ xu hướng thị trường, xu thế bán hàng, tâm lý khách hàng… từ đó đưa ra các chiến lược bố trí mặt hàng, kinh doanh, tiếp thị, tồn kho…phù hợp. Ví dụ các luật kết hợp tiêu biểu như sau: HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 3 KH mu a tôm cầu tre KH mua cả 2 KH mua Beer 333 Tiểu luận:“Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth” - Có 78% khách hàng mua sữa hộp Vinamilk thì mua tra Lipton - Có 67% khách hàng mua bia 333 thì mua bánh tôm Cầu Tre. I.2 Các khái niệm cơ bản: I.2.1 Khái niệm: Cho I = {i1, i2, i3, …, in} là tập hợp các trường gọi là items D: tập các giao tác có các giao tác Ti mà Ti ⊆ I T chứa X nếu X ⊆ T (X là tập có các phần tử ⊆ I). Mỗi giao tác Ti có chỉ danh là TID. Luật kết hợp là một mối liên hệ điều kiện giữa hai tập các hạng mục dữ liệu X và Y theo dạng sau: Nếu X thì Y, và ký hiệu là X ⇒ Y. Chúng ta có luật kết hợp X ⇒ Y, nếu X ⊂ I, Y ⊂ I và X ∩ Y = ∅ Thước đo giá trị của một luật kết hợp là độ tác động và độ tin cậy (support là s và confidence là c). I.2.2 Độ tác động (Support): Thể hiện phạm vi ảnh hưởng của luật trên tòan bộ CSDL. Luật X=>Y có độ support là s nếu s% số giao tác trong D có chứa X∪Y. Hay là : Support(X=>Y) = Support(X ∪ Y) = Card(X ∪ Y) / Card(D)% = s% Với : Card(X ∪ Y) tập các giao tác trên CSDL có chứa cả vế trái lẫn vế phải của luật. Card(D) : Tập tất cả các dòng trên CSDL. HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 4 Tiểu luận:“Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth” I.2.3 Độ tin cậy (Confidence): Thể hiện độ chính xác, tính đúng đắn, hay khả năng tin cậy của luật trong phạm vi ảnh hưởng của luật (xác định bởi độ đo support). Luật X=>Y có độ tin cậy là c (confidence) nếu có c% số giao tác trong D chứa X ∪ Y so với tổng số giao tác có trong D chỉ chứa X. Khi đó ta có : Confidence(X=>Y) = Card(X ∪ Y) / Card(X)% = c% Với : Card(X ∪ Y) tập các giao tác trên CSDL có chứa cả vế trái lẫn vế phải của luật. Card(X) : Tổng số dòng chứa vế trái của luật trên CSDL. Tập các hạng mục dữ liệu gọi là ItemSet có độ support lớn hơn hay bằng giá trị ngưỡng nhỏ nhất (gọi là minsupp) được gọi là Large ItemSet. Các ItemSet còn lại được gọi là các Small ItemSet . Với mỗi một Large ItemSet - L, và A là một tập con khác rỗng của L, nếu tỉ lệ phần trăm giữa support của L so với support của A lớn hơn hay bằng độ tin cậy nhỏ nhất. (gọi là minconf) thì ta có luật kết hợp A ⇒ (L\A). => Tóm lại tìm luật kết hợp là đi tìm những luật X=>Y trong CDSL sao cho luật thỏa những giới hạn tối thiểu support và confidence cho trước. II.2.4 Ví dụ: (minh họa 2 đại lượng minsupp và minconf) TID Age Married NumCars 100 23 No 1 200 25 Yes 1 300 29 No 0 400 34 Yes 2 500 38 Yes 2 Người ta đưa ra minsupp = 40% và mincon f = 50 %. HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 5 Tiểu luận:“Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth” Tìm ra được 2 luật kết hợp thỏa mãn minsupp và minconf (1): Age (30 39) and (Married: Yes) ⇒ NumCars = 2 (s = 40%, c = 100%) (2): NumCars(0 1) ⇒ Married = No (s = 40%, c = 66,6%). II.3 Ý tưởng về thuật toán tìm luật kết hợp: II.3.1 Ý tưởng: Tìm tất cả các luật R : X → Y; sao cho support(R) > minsup và confidence(R) > minconf. Chỉ những luật nào có độ support lớn hơn minsup và độ confidence lớn hơn minconf mới được quan tâm. Để rút ra được luật trong CSDL cần tiến hành 5 bước sau: B1: Xác định khoảng phân chia của mỗi thuộc tính khi cần phân tích. B2: Kết hợp mỗi khoảng thuộc tính đã phân chia ở bước B1 với một số nguyên để thực hiện các thuật toán được nhanh, dễ dàng. B3: So sánh các support của các item với minsupp, tạo tập Largeitemset. B4: ABCD và AB là Large itemset ta rút ra được luật AB ⇒ CD khi support(ABCD)/support(AB) >= minconf B5: Xác định chọn những luật phù hợp . II.3.2 Vậy có thể nói thuật toán tìm tập phổ biến được xây dựng 2 bước sau: Bước 1 : Liệt kê tất cả các tập con P của I (tập tất cả các thuộc tính của cơ sở dữ liệu). sao cho P÷ > 1. Bước 2 : Với mỗi tập con P, liệt kê tất cả các tập con X khác trống của P. Luật R được hình thành bởi : R : X → P \ X Chọn các luật R thỏa ngưỡng minsup và minconf. Các tập thuộc tính P thỏa điều kiện support(P) > minsup được gọi là các large item set. HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 6 Tiểu luận:“Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth” II.3.3 Ví dụ: Bài toán tìm luật kết hợp Cho CSDL bán hàng của siêu thị như sau: Mã hóa đơn Các mặt hàng 100 1,3,4 200 2,3,5 300 1,2,3,5 400 2,5 - Gọi I (viết tắt của Items) là tập tất cả các thuộc tính ( tập gồm tất cả "mặt hàng" ) có thể có trong cơ sở dữ liệu (trong cơ sở dữ liệu trên thì I = {1,2,3,4,5}). - Tính giá trị 2 độ đo là support (độ hỗ trợ) và confidence (độ đáng tin cậy) để thẩm định giá trị của một luật kết hợp. * Chẳng hạn luật {1, 2 } → {3} trên cơ sở dữ liệu đã cho có độ support là 25% vì chỉ có 1 dòng (300) trên tổng số 4 dòng có chứa đủ cả {1,2,3}. Còn luật {2} → {5} thì có độ support đến 75% vì có 3 dòng (200,300,400) trên 4 dòng chứa đủ cả {2, 5} * Chẳng hạn luật {1,2} → {3} có độ confidence là 100% vì có 1 dòng (300) chứa {1,2,3} trên tổng số 1 dòng (300) chứa {1,2}. Trong khi đó, luật {3} → {5} có độ confidence là 66,67% vì có 2 dòng chứa {3,5} trên tổng số 3 dòng chứa {3}. - Ta đã biết cách tính support và confidence của một luật có sẵn. Vấn đề tiếp theo là liệt kê tất cả các luật có thể có từ tập hợp I (tập tất cả các thuộc tính của cơ sở dữ liệu). Quá trình liệt kê tất cả các luật được diễn ra trong 2 bước HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 7 Tiểu luận:“Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth” Chương II: Cải tiến thuật toán tìm tập phổ biến II.1 Nguyên lý chính: Để tăng tốc thuật toán, ta cần phải tìm cách giải quyết hai "điểm nóng" (các điểm tiêu tốn nhiều thời gian thi hành của máy tính) trong thuật toán ở trên là số lần lặp (2 n ) và thời gian duyệt cơ sở dữ liệu để tính support và confidence. - Loại bỏ nhanh các tập thuộc tính có support < minsup theo quy tắc nhánh cận. - Tính support dựa vào thông tin từ những lần tính trước. - Xây dựng cơ sở dữ liệu tương đương nhưng có tốc độ truy xuất nhanh hơn. II.2 Thuật toán Apriori: II.2.1Trình bày thuật toán: Trong ý tưởng thuật toán tìm tập phổ biến trên, có thể thấy rằng ở bước 2 là tốn kém nhiều chi phí nhất trong những cơ sở dữ liệu lớn trong thực tế. Thuật toán Apriori và một số cải tiến tốc độ cũng có thể nói góp phần giảm chi phí đáng kể khi các giao dịch có nhiều các mẫu (giá trị) thường xuyên và ngưỡng minsupport thấp. HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 8 Tiểu luận:“Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth” Dưới đây là phần trình bày thuật toán tìm Tập Phổ Biến tổng quát cho trong thuật toán Apriori Bước 1: Duyệt tất cả các giao tác (transactions) và dựa vào ngưỡng minsupport để tìm ra tập ban đầu. Bước 2: Giả sử tại bước k-1, đã có được tập phổ biến F-1 khác rỗng. Tại bước k, phát sinh tập ứng viên Ck (Candidate k-itemset) dựa vào tổ hợp các phần tử trong tập F-1. Tập kết quả chứa các giá trị không bị trùng lắp. Bước 3: Tiếp tục cho bước k, đã có trước tập ứng viên Ck. Duyệt qua tất cả các giao tác (trong CSDL) để cập nhật giá trị support cho các phần tử trong Ck, đồng thời so sánh với minsupport để chọn ra tập phổ biến Fk. Bước 4: Nếu tập phát sinh Fk khác rỗng thì quay lại thực hiện các bước 2 và 3 cho bước k+1… Nếu tập phát sinh Fk là rỗng, thì tập phổ biến kết quả sẽ là tập cuối cùng trước đó. Kết thúc quá trình. II.2.2 Ví dụ: Tìm các luật kết hợp nếu cho minsupp = 0.5(50%) và minconf = 1(100%) Hóa đơn Các mặt hàng 1 Bánh mì, nước ngọt, sữa HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 9 Tiểu luận:“Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth” 2 Bia, bánh mì 3 Bia, nước ngọt, khăn giấy, sữa 4 Bia, bánh mì, khăn giấy, sữa 5 Nước ngọt, khăn giấy, sữa * Độ support: sp(“bánh mì”) = 3/5; sp(“bia”) = 3/5; sp(“nước ngọt”) = 3/5; sp(“sữa”) = 4/5; sp(“khăn giấy”) = 3/5; F1 = {“bánh mì”, “bia”, “nước ngọt”, “sữa”, “khăn giấy”} C2 = { {“bánh mì”,“bia”}, {“bánh mì”,“nước ngọt”}, {“bánh mì” , “sữa”}, {“bánh mì”,“khăn giấy”}, {“bia”,“nuớc ngọt”}, {“bia”,”sữa”}, {“bia”,”khăn giấy”}, {“nuớc ngọt”,”sữa”}, {“nuớc ngọt”,”khăn giấy”}, {“sữa”,”khăn giấy”} } * Tìm F2 từ C2: sp({“bánh mì”, “bia”}) = 2/5 (loại) sp({“bánh mì”,”nuớc ngọt”}) = 1/5 (loại) sp({“bánh mì”,”sữa”}) = 2/5 (loại) … sp({“nuớc ngọt”, “sữa”}) = 3/5 … sp({“sữa”,”khăn giấy”}) = 3/5 F2 = {{“nước ngọt”,”sữa”}, {“sữa”,”khăn giấy”}} C3 = {{“nuớc ngọt”,”sữa”,”khăn giấy”}} * Tìm F3 từ C3: sp({“nuớc ngọt”,”sữa”,”khăn giấy”}) = 2/5 (loại) HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 10 [...]... Tiểu luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth Insert_tree([p|P],T) Root P: (c, a, b, m) T: f:2 Header table f c a m p c:1 a:1 m:1 p:1 Insert_tree([p|P],T) Root f:2 Header table f c a m p P: (a, b, m) T: c:2 a:1 m:1 p:1 HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 15 Tiểu luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth ... luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth II.3.2.2 Tính chất 2: (Prefix path property) Để tìm ra các tập phổ biến từ một nút a i trên đuờng đi P, chỉ cần đến đường đi con trước nút ai trên P Và số lần phổ biến của mỗi nút trên đường đi con này phải bằng với số lần phổ biến của nút ai Dựa trên các tính chất trên, chúng ta có thuật toán tìm các tập phổ biến. .. demo sẽ được tự động phát sinh, button Tìm tập phổ biến sẽ thể hiện: * Với min_support = 50% * Với min_support = 30% HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 27 Tiểu luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth + Theo dữ liệu của ví dụ trên, người dùng nhập các thông tin đầu vào tại “ItemList”, Tìm tập phổ biến minh họa bằng demo FP-Growth với support... FP của p) chỉ có một nhánh là c:3 do đó chỉ tìm được một tập phổ biến là cp:3 Sự tìm kiếm các tập phổ biến có chứa p chấm dứt HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 21 Tiểu luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth - Với nút m, chúng ta có mẫu phổ biến là (m:3) và hai đường đi đến m là (f:4; c:3; a:3;m:2) và (f:4; c:3; a:3; b:1;m:1) Root Header table... tốn kém, nhưng chỉ tạo 1 lần và sử dụng nhiều lần - Khi minsuport càng cao thì thời gian tạo cây dường như càng phí Biểu đồ so sánh FP–growth và Apriori HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 25 Tiểu luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth Chương III: Cài đặt thử nghiệm thuật toán III.1 Mô tả: Để cài đặt thuật toán FP-Growth, Cấu trúc dữ liệu cần... luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth KẾT LUẬN  Do thời lượng của tiểu luận có hạn cho nên nội dung của tiểu luận chỉ mới trình bày tóm tắt những vấn đề cơ bản nhất, nhằm mục đích tìm hiểu về khai phá dữ liệu, điển hình là thuật toán tìm tập phổ biến dựa trên FP-Tree Tìm ra những mối liên hệ giữa các trường mô tả đối tượng trong cơ sở dữ liệu và xây... 10 Phát sinh mẫu = ai ; 11 support_count ()=ai.support_count 12 F=F 13 Xây dựng cơ sở có điều kiện của 14 Xây dựng FP-Tree có điều kiện của HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 24 Tiểu luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth 15 if != 16 call FP_growth(, ); 17 } 18 } } Thuật toán FP-Growth phát triển là để khắc phục một số nhược điểm của các thuật. .. } // Tăng biến count của p trong bảng header thêm 1 HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 19 Tiểu luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth 12 H[p].count ++; 13 If (P-p) != null then 14 Call Insert_Tree(P-p, N) ; } II.3.2 Thuật toán FP-Growth (Dựa vào tính chất của FP-Tree): II.3.2.1 Tính chất 1: (Node-link property) Với mỗi phần tử phổ biến ai,... c:3 Tiểu luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth f c a Cây điều kiện FP của "m" Cây điều kiện FP của "am" Cơ sở điều kiện của "cm:3": (f:3) Cơ sở điều kiện của "cam:3": (f:3) root root f:3 f:3 Cây điều kiện FP của "cm" Cây điều kiện FP của "cam" Đầu tiên chúng ta nhận được tập phổ biến (am:3), và gọi "mine(|am)" chúng ta có tập phổ biến (cm:3),... b:1 m:1 Trang 20 Tiểu luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth Trên cơ sở tính chất 1, chúng ta thu thập tất cả các tập phổ biến mà có chứa nút a i bắt đầu từ nút đầu ai trong header table và các nút liên kết tiếp theo Chúng ta xem xét bắt đầu từ nút cuối cùng trong header table - Với nút p, chúng ta thu được mẫu phổ biến (p:3) và hai đường đi trên FP-tree . luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth Chương II: Cải tiến thuật toán tìm tập phổ biến II.1 Nguyên lý chính: Để tăng tốc thuật toán, ta cần phải tìm. Trang 8 Tiểu luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth Dưới đây là phần trình bày thuật toán tìm Tập Phổ Biến tổng quát cho trong thuật toán Apriori Bước. luận: Tìm hiểu và cài đặt thuật toán phát sinh tập phổ biến bằng giải thuật FP-Growth MỤC LỤC  LỜI NHẬN XÉT HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 1 Tiểu luận: Tìm hiểu và cài đặt thuật

Ngày đăng: 09/04/2015, 22:52

Từ khóa liên quan

Mục lục

  • LỜI NHẬN XÉT

  • LỜI MỞ ĐẦU

  • Chương I: Cơ Sở Lý Thuyết

  • I.1 Giới thiệu:

  • I.2 Các khái niệm cơ bản:

    • I.2.1 Khái niệm:

    • I.2.2 Độ tác động (Support):

    • I.2.3 Độ tin cậy (Confidence):

    • II.2.4 Ví dụ: (minh họa 2 đại lượng minsupp và minconf)

    • II.3 Ý tưởng về thuật toán tìm luật kết hợp:

      • II.3.1 Ý tưởng:

      • II.3.2 Vậy có thể nói thuật toán tìm tập phổ biến được xây dựng 2 bước sau:

      • II.3.3 Ví dụ: Bài toán tìm luật kết hợp

      • Chương II: Cải tiến thuật toán tìm tập phổ biến

      • II.1 Nguyên lý chính:

      • II.2 Thuật toán Apriori:

        • II.2.1Trình bày thuật toán:

        • II.2.2 Ví dụ:

        • II.3 Thuật toán tìm tập phổ biến FP-Growth:

          • II.3.1 Thuật toán FP-Tree:

            • II.3.1.1 Khái niệm:

            • II.3.1.3 Bổ sung phần tử vào tree dựa trên nguyên tắc:

            • II.3.1.4 Các bước xây dựng FP-Tree:

            • II.3.1.5 Xét ví dụ tạo FP-Tree dưới đây

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan