Chương 3: Mô hình mạng chia sẻ đồ vật và khai thác thông tin.
3.5. Thiết kế module gợi ý
Module gợi ý được phát triển nhằm phục vụ cho việc gợi ý những đồ vật đang được chia sẻ cho người dùng. Trong đó làm sau có thể giúp người dùng nhanh chóng tìm được đúng đồ vật mà mình đang cần, hay đồ vật mình chia sẻ đến nhanh nhất tới người đang có nhu cầu.
Các đồ vật được gợi ý dựa trên các tiêu chí:
• Gợi ý theo chủng loại
• Gợi ý theo category
• Gợi ý theo các luật khai thác được
Trong đó tiêu chí thứ 3 chính là tiêu chí quan trọng quyết định tính thông minh của hệ thống. Nó được xây dựng dựa trên các thuật toán kết hợp nhằm mục địch tìm ra các quy luật khi người dùng chia sẻ đồ hay tìm kiếm đồ.
3.5.1. Thiết kế cơ sở dữ liệu cho quá trình phân tích
Quá trình phân tích dữ liệu đòi hỏi một cơ sở dữ liệu có tính đơn giản, chỉ chuyên biệt phục vụ cho quá trình phân tích dữ liệu về luật kết hợp. Dữ liệu sau một thời gian tập hợp sẽ được chuẩn hóa và đưa vào các bảng dữ liệu của cơ sở dữ liệu phân tích.
Đối với cơ sở dữ liệu phân tích sẽ có ba thực thể chính:
• Items: tập mục, được đặc trưng bởi ItemId
• Trans: các giao dịch, được đặc trưng bởi các transid. Một giao dịch chứa nhiều hơn 2 item.
Hình 3.16: Sơ đồ Database phân tích
Mô tả chi tiết dữ liệu của các bảng database: Bảng Items: Lưu dữ liệu về các mục
Tên cột Kiểu dữ liệu Rằng buộc Ý nghĩa
ItemId Int Not Null Id của mục (item)
Bảng 3.7 Bảng mô tả bảng dữ liệu Items
Bảng Trans: Lưu dữ liệu về các giao dịch
Tên cột Kiểu dữ liệu Rằng buộc Ý nghĩa
TransId int Not Null Mã giao dịch
NumberItem int Not Null Số lượng item
Bảng 3.8 Bảng mô tả bảng dữ liệu Trans
Bảng ItemTrans
ItemTransId int Not Null Mã id của bản ghi
ItemId int Not Null Id của Item
TransId int Not Null Id của giao dịch
Bảng 3.9 Bảng mô tả bảng dữ liệu ItemTrans
3.5.2. Quy trình tiền xử lý dữ liệu.
Sau một thời gian hệ thống hoạt động, dữ liệu được thu thập sẽ được xử lý để chuyển sang dữ liệu với định dạng phù hợp để phân tích. Dữ liệu này sẽ được chuyển từ cơ sở dữ liệu phục vụ hoạt động của website sang cơ sở dữ liệu của module phân tích.
Hình 3.17: Quy trình xử lý dữ liệu để phân tích
3.5.3. Thiết kế module tìm các tập mục thường xuyên bằng thuật toán Aprirori
Thuật toán Apriori được sử dụng để tìm kiếm các tập mục thường xuyên. Từ đó tạo cơ sở để xây dựng các luật kết hợp.
a. Cấu trúc dữ liệu
Để tìm ra các tập mục thường xuyên, chương trình cần liên tục duyệt qua tất cả các giao dịch, để kiểm tra trong một giao dịch có chứa một mục nào đó hay không. Thao tác đó cực kỳ tốn kém. Chính vì thế cần phải tối ưu tối đa có thể trong hoạt động duyệt các giao dịch. Có hai giải pháp:
- Mỗi giao dịch lưu một mảng các item thuộc giao dịch đó. Đối với cách này, mỗi thao tác kiểm tra xem item I có thuộc giao dịch T hay không phải mất thời gian duyệt là O(n).
Dữ liệu mong muốn
Lựa chọn
Website Thu thập Raw Data
Tiền xử lý Mining
Knowledge Dữ liệu để Chuyển đổi Dữ liệu sạch
- Mỗi giao dịch chứa một bảng băm lưu trữ các item thuộc về giao dịch đó. Nếu vậy mỗi thao tác kiểm tra xem Item I có thuộc giao dịch đó hay không chỉ mất thời gian O(1).
Dựa trên nhận xét đó cấu trúc dữ liệu của mỗi giao dịch sẽ bao gồm một bảng băm lưu các item với key là id của các item. Từ đó sẽ giúp cải thiện thuật toán khi kiểm tra một item có thuộc một giao dịch nào đó hay không.
b. Sơ đồ lớp
Hình 3.17:Sơ đồ lớp của module phân tịch luật Apriori
3.5.4. Thiết kế module tìm các tập mục thường xuyên bằng thuật toán PHP
a. Cấu trúc dữ liệu
Thuật toán PHP là một thuật toán cải tiến của thuật toán Apriori. Nó được xây dựng với mục tiêu giảm số lần quét database để tính độ hỗ trợ. Điều này được thực hiện bằng cách ở bước thứ k sẽ tính độ hỗ trợ cho các tập ở bước k+1. Và các giá trị này được lưu vào một bảng băm để việc truy nhập được dễ dàng hơn. Sau đó, tiến hành thu gọn database bằng cách loại bỏ các giao dịch, hay các mục không có ý nghĩa cho quá trình sinh luật tiếp theo.
Để thực hiện hàm băm mà không có sự trùng hợp, thuật toán xây dựng một hàm băm dựa trên việc ghép id của các mục. Do id của các mục là duy nhất, và trong mỗi tập mục, các id được sắp xếp tăng dần, nên key sinh ra từ việc ghép sâu các id là duy nhất. Đảm bảo mỗi tập mục không có key không trùng nhau.
So với thiết kết của thuật toán Apriori, thì thiết kế của thuật toán PHP không khác nhiều. Nó chỉ bổ sung thêm một bảng băm để quan lý các tập mục, và một hàm “tỉa” nhằm giảm kích thước database sau mỗi lần sinh tập mục thường xuyên.
b. Thiết kế lớp
Hình 3.18:Sơ đồ lớp của module phân tích luật PHP
3.5.5. Thiết kế module tìm các tập mục thường xuyên bằng thuật toán FP Tree
a. Cấu trúc dữ liệu
Thuật toán FP Tree như đã nói ở trên là một cách tiếp cận khác để tìm kiếm các tập mục thường xuyên. Thuật toán Apriori tìm các tập mục thường xuyên, bằng cách sinh ra tập các ứng viên, từ đó lựa chọn các ứng viên phù hợp. Làm như vậy tương đối đơn giản. Nhưng với một lượng lớn dữ liệu sẽ sinh ra một số lượng rất lớn các ứng viên. Đặc biệt khi ngưỡng hỗ trợ nhỏ. Khi đó dữ liệu sẽ bùng nổ, và thuật toán Priori hoạt động rất kém.
Thuật toán FP Tree sử dụng một cây đa nhánh để biểu diễn các tập mục (itemset). Các giao dịch sẽ được biểu diễn thành các nhánh khác nhau trên cây. Từ đó các tập mục được sinh ra từ quá trình duyệt trên toàn bộ cây. Do không sinh ra tập các ứng viên rồi mới kiểm tra, nên thuật toán FP Tree hoạt động hiệu quả ngay cả khi độ hỗ trợ rất thấp. Quá trình tìm kiếm các tập luật kết hợp được tiến hành qua ba giai đoạn chính:
• Quét toàn bộ database để tính độ hỗ trợ cho từng mục, đồng thời sắp xếp giảm dần theo độ hỗ trợ.
• Xây dựng cây từ tập các giao dịch
• Tiến hành duyệt cây để tìm các tập mục thường xuyên.
b. Thiết kế lớp
Hình 5.19:Sơ đồ lớp của module phân tích luật FP Tree