Với những kết quả đã phân tích ở phần trên, chúng ta đặt ra một số câu hỏi như: Giá trị của LOF thay đổi như thế nào khi điều chỉnh giá trị Minpts? Khi cho một dãy tăng các giá trị Minpts, thì có tương ứng là một chuỗi các thay đổi một cách đơn điệu của LOF hay không? Điều đó có nghĩa LOF có tăng hay giảm đơn điệu?
Thực tế thì LOF không tăng cũng không giảm một cách đơn điệu, ở hình 3.7 tôi trình bày một trường hợp đơn giản khi tất cả các đối tượng được phân bố theo phân bố Gauss, với mỗi giá trị Minpts giữa 2 và 50 thì giá trị Min, giá trị Max, giá trị trung bình cũng như là độ lệch tiêu chuẩn của LOF được biểu diễn.
Xét cận trên của LOF ở ví dụ trong hình 3.7. Đầu tiên, khi giá trị Minpts = 2, giá trị này quy về sử dụng khoảng cách thực của các đối tượng trong định nghĩa 5, bằng cách tăng dần giá trị Minpts, các dao động thực hiện về các khoảng cách đạt được và giá trị LOF cũng giảm đi. Do đó, giá trị cực
đại của LOF có giảm xuống. Tuy nhiên, nếu giá trị Minpts tiếp tục tăng lên thì giá trị Max của LOF dao động lên xuống và cuối cùng nó ổn định tới một giá trị nhất định.
Nếu giá trị của LOF thay đổi không đơn điệu ngay cả trong phân bố thuần túy như phân bố Gauss thì giá trị LOF sẽ thay đổi rất lớn đối với nhiều trường hợp phức tạp. Trong hình 3.8 mô tả tập dữ liệu trong không gian 2 chiều, có 3 vùng, vùng S1 bao gồm 10 đối tượng, S2 bao gồm 35 đối tượng, S3 bao gồm 500 đối tượng, ở phía bên phải trình bày các biểu đồ cho một đối tượng trong mỗi vùng, các biểu đồ này cho thấy các đồ thị của LOF thông qua Minpts nằm trong miền từ 10 tới 50. Trong khi LOF của đối tượng S3 rất ổn định quanh giá trị 1 thì các giá trị LOF của các đối tượng trong S1 và S2 lại thay đổi rất lớn.
1 6 11 16 21 26 31 36 41 46 51
Hình 3.7: Sự biến thiên của LOF trong phân bố Gauss 3.4.2 Xác định miền của Minpts
Do giá trị của LOF có thể tăng lên hay giảm xuống, vì vậy trong phần này chúng tôi trình bày các hướng dẫn chọn miền giá trị của Minpts trong đó sử dụng MinptsLB (Minpts Lower Bound) và MinptsUB (Minpts Upper Bound) để chỉ cận trên và cận dưới của miền.
0 0.5 1.5 2.5 1 2 3 Đ ặc tr ưng ngo
ại lai LOF
Cực đại Cực tiểu
Độ lệch chuẩn và giá trị trung bình
Đầu tiên, chúng ta đi xác định giá trị có thể của MinptsLB: Rõ ràng, Minpts có thể nhỏ bằng 2, tuy nhiên để loại bỏ các dao động không mong muốn thì Minpts không thể quá nhỏ. Như ở trong ví dụ phân bố Gauss trình bày ở hình 3.7, độ lệch tiêu chuẩn của LOF chỉ ổn định khi Minpts nhỏ nhất là 10. Ví dụ chúng ta giả sử rằng chúng ta thay phân bố Gauss ở hình 3.7 thành phân bố đều, suy ra với Minpts nhỏ hơn 10 có một số đối tượng mà LOF của chúng lớn hơn 1 rất nhiều, điều này có thể tính toán được vì trong phân bố đều không có đối tượng nào được gán như là ngoại lai. Do đó, hướng dẫn đầu tiên để chọn miền giá trị của Minpts là chúng ta cung cấp cách chọn MinptsLB nên ít nhất là 10 để loại bỏ các dao động không mong muốn.
Thứ hai, chúng ta cung cấp cách chọn MinptsLB dựa trên nhiều quan sát tinh tế. Chúng ta đi xét một trường hợp đơn giản của một đối tượng p và một tập hợp C các đối tượng. Giả sử đã xác định được MinptsLB, nếu C chứa ít hơn MinptsLB đối tượng thì tập các lân cận phụ thuộc tham số Minpts của mỗi đối tượng trong C sẽ bao gồm cả p và ngược lại. Do đó, bằng cách áp dụng định lý 1 thì LOF của p và tất cả các đối tượng trong C sẽ rất giống nhau, cho nên không tạo được sự khác biệt của p với các đối tượng khác trong C. Ngược lại, nếu C chứa nhiều hơn MinptsLB đối tượng thì tập các lân cận phụ thuộc tham số Minpts của các đối tượng nằm sâu trong C sẽ không chứa p nhưng hầu hết các đối tượng của C sẽ nằm trong NMinpts(p) . Do đó phụ thuộc vào khoảng cách giữa p với C và mật độ của C, LOF của p có thể khác với LOF của các đối tượng trong C. Nhận xét quan trọng nữa là MinptsLB xem như là số lượng nhỏ nhất của các đối tượng trong một vùng (như vùng C). Vì thế, các đối tượng khác (như p) có thể là phần tử ngoại lai cục bộ liên quan tới vùng này, giá trị này phụ thuộc vào ứng dụng. Hầu hết các tập dữ liệu mà Knorr thử nghiệm thì thường chọn từ 10 tới 20 để thực hiện.
Tiếp theo, chúng ta sẽ lựa chọn các giá trị có thể của MinptsUB là giá trị cận trên của miền giá trị Minpts: Giống như cận dưới MinptsLB, cận trên có ý nghĩa tương tự. Cho C là một tập hợp trên vùng của các đối tượng “close by” thì MinptsUB có thể xem như là lực lượng lớn nhất của tập C với tất cả các đối tượng trong C có khả năng là phần tử ngoại lai, từ “close by” có nghĩa là các giá trị directmax, directmin,indirectmax, indriectmin rất giống nhau. Trong trường hợp này, với các giá trị Minpts lớn hơn MinptsUB thì theo định lý 1 yêu cầu rằng LOF của các đối tượng trong C là gần tới 1 cho nên chúng ta sẽ cung cấp cách chọn MinptsUB là giá trị lớn nhất của các đối tượng gần nhau mà chúng có khả năng là các phần tử ngoại lai cục bộ.
Chúng ta hãy xem lại trường hợp trình bày trong hình 3.8, nêu lại rằng S1 chứa 10 đối tượng, S2 chứa 35 đối tượng và S3 chứa 500 đối tượng. từ các biểu đồ đó, rõ ràng rằng các đối tượng trong S3 không bao giờ là các phần tử ngoại lai và luôn có giá trị LOF của chúng gần bằng 1. Ngược lại các đối tượng trong S1 có các phần tử ngoại lai lớn và giá trị Minpts=10 tới 35, các đối tượng trong S2 là ngoại lai bắt đầu từ Minpts=45. Hai kết quả cuối có được là do bắt đầu Minpts=36 thì tập các lân cận phụ thuộc tham số Minpts của các đối tượng trong S2 sẽ bắt đầu bao gồm cả một số đối tượng trong S1. từ đó, các đối tượng trong S1 và S2 thực hiện cách xử lý giống nhau. Bây giờ, với Minpts=45 các đối tượng trong tập kết hợp các đối tượng S1 vàS2 bắt đầu có các đối tượng từ S3 cũng là lân cận chung của chúng và do vậy, bắt đầu có các phần tử ngoại lai liên quan tới S3, phụ thuộc vào miền áp dụng mà chúng ta muốn xem xét một nhóm gồm 35 đối tượng (như S2) thành một vùng hay một nhóm gồm các phần tử gần như các phần tử ngoại lai cục bộ.
Thực vậy, khi đã xác định được MinptsLB và MinptsUB, chúng ta có thể tính toán giá trị LOF của mỗi đối tượng trong miền này và chúng ta đưa ra một đánh giá của việc sắp xếp các đối tượng theo giá trị LOF lớn nhất trong
miền xác định, có nghĩa là việc sắp xếp các đối tượng dựa vào max{LOFMinpts(p)|MinptsLBMinpts MinptsUB}. Ngoài cách sắp xếp theo giá trị lớn nhất LOF của mỗi đối tượng trong miền giá trị của Minpts, có thể sắp xếp theo giá trị nhỏ nhất hoặc giá trị trung bình. Trường hợp ở trong hình 3.8 chứng tỏ rằng việc đưa ra giá trị nhỏ nhất có thể không phù hợp bởi vì giá trị nhỏ nhất có thể loại bỏ hoàn toàn tính ngoại lai của một đối tượng. Việc sắp xếp theo giá trị trung bình có thể làm giảm đi tính ngoại lai của đối tượng, do đó, sắp xếp theo giá trị lớn nhất để làm nổi bật trường hợp mà đối tượng là mang tính ngoại lai nhất.
Hình 3.8 Miền giá trị LOF của các đối tượng trong các vùng S1, S2 và S3.
3.5 Đánh giá độ phức tạp của thuật toán xác định giá trị LOF.
Khi tính toán các giá trị LOF trong miền giữa MinptsLB và MinptsUB, với n đối tượng trong cơ sở dữ liệu D, chúng ta phải thực hiện hai bước: Bước thứ nhất xác định các lân cận MinptsUB-nearest, và bước thứ hai là tính các giá trị LOF.
Trong bước thứ nhất các lân cận MinptsUB-nearest của mọi điểm p được tìm thấy vùng với khoảng cách của chúng tới p, kết quả của bước này là
do việc thực hiện cơ sở dữ liệu M cỡ n*MinptsUB khoảng cách. Một lưu ý nhỏ là cỡ của kết quả tức thời này phụ thuộc vào số chiều của dữ liệu nguồn. Độ phức tạp thời gian của bước này là O(n*thời gian truy vấn k-nn), với truy vấn k-nn(k-nearest-neighbor) chúng ta có nhiều sự lựa chọn khách nhau: Với dữ liệu có số chiều thấp, chúng ta sử dụng và tiếp cận dựa trên ô để có được truy vấn k-nn trong thời gian hằng số, dẫn đến thời gian chạy là O(n) cho việc thực hiện bước này. Với dữ liệu có số chiều từ trung bình đến trung bình khá thì chúng ta có thể sử dụng một chỉ số, cho ta độ phức tạp trung bình để có được truy vấn k-nn là O(logn), dẫn đến độ phực tạp cho bước này là O(n*logn), với số chiều cao chúng ta nên quét tuần tự, với độ phức tạp là O(n), vì vậy dẫn đến độ phức tạp của cả bước này là O(n2). Trong các thực nghiệm, chúng ta chỉ sử dụng tập dữ liệu với số chiều cỡ trung bình nên độ phức tạp là O(n*logn), đồng thời ta thấy việc thực hiện gần như tuyến tính đối với dữ liệu từ 2 đến 5 chiều nhưng lại suy biến với các tập dữ liệu từ 10 đến 20 chiều.
Trong bước thứ hai, các giá trị LOF được tính toán bằng việc thực hiện cơ sở dữ liệu M, cơ sở dữ liệu nguồn D không cần cho bước này bởi vì cơ sở dữ liệu M có đủ thông tin để tính toán các giá trị LOF và cơ sở dữ liệu M được duyệt 2 lần với một giá trị của Minpts giữa MinptsLB và MinptsUB. Trong lần duyệt đầu tiên các mật độ cục bộ đạt được của mọi đối tượng được tính toán và trong lần duyệt thứ hai các giá trị LOF cuối cùng được tính toán và ghi ra file, các giá trị này sau đó sẽ được sử dụng để sắp xếp các đối tượng theo giá trị lớn nhất của LOF nằm trong MinptsLB và MinptsUB. Do vậy, độ phức tạp thời gian của bước này là O(n).
CHƯƠNG 4: CÀI ĐẶT VÀ THỬ NGHIỆM 4.1 Yêu cầu cài đặt
Chương trình “Thuật toán Nested Loop” được viết bằng ngôn ngữ C# trên bộ Visual Studio 2010 sử dụng phiên bản .Net Framewok 4.0. Yêu cầu tối thiểu của hệ thống khi sử dụng chương trình:
- .Net Framework phiên bản 4.0 trở lên. - Hệ điều hành tối thiểu Windows XP SP2. - Sql Server phiên bản 2000 trở lên.
Phiên bản .Net Framework 4.0 hỗ trợ hệ điều hành Windows XP SP3 trở lên, để cài đặt trên Windows XP SP2, cần cài đặt thêm phần mở rộng Windows Imaging Component (WIC) trước khi cài đặt .Net Framework 4.0.
Mã nguồn đã được biên dịch thành tệp thực thi .exe trên môi trường Windows nên chỉ cần cài đặt bộ thư viện yêu cầu ở trên là có thể chạy được chương trình.
4.1.1 Cấu trúc tệp dữ liệu đầu vào
Chương trình sử dụng file Excel để chứa dữ liệu đầu vào. Cấu trúc file như sau:
+ Tên file excel: Tùy ý theo quy chuẩn đặt tên file của hệ điều hành Windows.
+ Gồm 1 sheet chứa dữ liệu:
Sheet1: Chứa dữ liệu toàn bộ các bản ghi, dòng thứ nhất là tiêu đề cột có cấu trúc: (MaKH; TenKH; SoTienPheDuyet; SoGocDaThu; SoLaiDaThu) lần lượt là tên cột dữ liệu, các dòng tiếp theo là các bản ghi chứa dữ liệu xử lý.
Hình 4.1 Bảng dữ liệu đầu vào excel 4.1.2 Cấu trúc các lớp chương trình
Mối liên hệ giữa các lớp trong chương trình:
Chương trình thiết kế bao gồm các lớp sau:
ImportData: Thao tác với tệp dữ liệu Excel và đưa vào cơ sở dữ liệu
SQL Server. Ngoài ra, nó còn chứa các phương thức để đọc dữ liệu từ cơ sở dữ liệu vào bộ nhớ xử lý.
Hình 4.3 Lớp ImportData trong chương trình
NestedLoopAlgo: Chứa hai phương thức quan trọng sử dụng trong thuật
toán là ProcessSelf đánh dấu phần tử ngoại lai trong một khối và ProcessOther kiểm tra với các bản ghi thuộc khối khác. Đây cũng là lớp chính thực thi thuật toán Nested Loop.
Hình 4.4 Lớp NestedLoopAlgo trong chương trình
Hình 4.5 Lớp SqlHelper trong chương trình
NestedLoopMain: Xử lý giao diện của chương trình. 4.2 Thực hiện chương trình và đánh giá kết quả
4.2.1 Sơ đồ thuật toán Nested Loop
a) Bài toán: Cài đặt thuật toán Nested Loop tìm kiếm phần tử ngoại lai
trên tập dữ liệu khách hàng của ngân hàng
• Dữ liệu đầu vào: File excel chứa dữ liệu khách hàng của ngân hàng Nông nghiệp và Phát triển Nông thôn Agribank
• Tham số đầu vào gồm:
p: Phần trăm tối thiểu các đối tượng trong tập dữ liệu mà các đối tượng không ngoại lai
b) Thuật toán Nested Loop: Đưa 1 khối của T vào mảng A i <— 1 d <— 0 j <— 2 i > số phần tử mảng A d(ti,tj)≤D d <— d+1 j > số phần tử mảng A d > M i <— i+1 Đ S S Đ Đ Ti không ngoại lai i <— 1 d <— 0 Đ i > số phần tử mảng A j <— 1 j > số phần tử mảng B d(ti,tj)≤D d <— d+1
d > M Tngoại lai i không Đưa 1 khối của T
vào mảng B S S i <— i+1 Đ j <— j+1 Đ j <— j+1 S Đ S S S Đ Khối đã đc lưu ở A chưa? Kết thúc và đưa ra phần tử ngoại lai chưa đánh dấu
Đ S Khối xét >số khối? S Đ
4.2.2 Thực hiện chương trình và kết quả
Hình 4.7 Màn hình nạp và hiển thị file dữ liệu
4.2.2.1 Nhập dữ liệu:
Bước 1: Chọn tệp dữ liệu đầu vào là file Excel chứa dữ liệu khách hàng của ngân hàng Nông nghiệp và Phát triển Nông thôn Agribank.
Bước 2: Nạp dữ liệu (Dữ liệu sẽ được nạp vào bộ nhớ trong)
Bước 3: Hiển thị dữ liệu (Hiển thị bảng dữ liệu và các thông số như: Số thuộc tính; số bản ghi; kích thước tệp dữ liệu)
Hình 4.8 Màn hình thực hiện thuật toán
4.2.2.2 Thực hiện thuật toán:
Bước 1: Ước lượng tham số p và D Bước 2: Nhập số bản ghi xử lý cùng lúc Bước 3: Thực hiện
4.2.2.3 Kết quả thực nghiệm:
Bước đầu cài đặt thành công thuật toán Nested_Loop và thử nghiệm thuật toán trên bộ số liệu khách hàng của ngân hàng. Sau khi thực hiện thuật toán ta có kết quả như hình 4.8 bao gồm các thông tin tìm kiếm phần tử ngoại lai (Số phần tử ngoại lai; thông tin chi tiết về phần tử ngoại lai; thời gian xử lý thuật toán và cách thức xử lý từng khối dữ liệu).
4.2.2.4 Thông tin phần tử ngoại lai tìm được sau khi thực hiện thuật toán
Hình 4.9 Phần tử ngoại lai tìm được 4.2.3 Đánh giá tốc độ thực hiện
Với số bản ghi cố định là 1000, thay đổi số bản ghi thực hiện xử lý trong cùng một thời điểm
Ta đưa dữ liệu với số bản ghi cố định là 1000, rồi lần lượt thay đổi số bản ghi xử lý cùng thời điểm. Khi thay đổi số bản ghi xử lý cùng thời điểm như vậy đồng nghĩa với việc số khối dữ liệu sẽ thay đổi và nó tỷ lệ nghịch với nhau tức là khi ta tăng số bản ghi xử lý trong cùng một thời điểm thì đồng thời số khối dữ liệu sẽ giảm. Sau khi thay đổi ta có kết quả như bảng sau: STT Số bản ghi xử lý một lần Số khối dữ liệu Thời gian thực hiện (ms)