Cho bảng quyết định đầy đủ và nhất quán sau:
U A1 a2 A3 D U a1 a2 a3 D u1 1 1 1 0 U7 2 2 2 2 u2 1 2 1 0 U8 2 3 3 2 u3 1 2 1 0 U9 2 3 3 2 u4 1 2 1 0 U10 2 3 3 2 u5 1 2 2 1 U11 3 3 3 3 u6 2 2 1 1 U12 3 3 3 3
Trong đó, C = {a1, a2, a3} là tập các thuộc tính điều kiện, D = {d} là thuộc tính quyết định.
Giả sử tiến trình thay đổi của các giá trị thuộc tính thay đổi diễn ra trong hai trường hợp sau:
+ Trường hợp 1: Các giá trị {2, 3} của thuộc tính a1 được làm thô thành giá trị mới là {2} (ta ký hiệu trường hợp này diễn ra từ thời điểm t đến thời điểm t+1).
+ Trường hợp 2: Giá trị {2} của thuộc tính quyết định d được làm mịn thành hai giá trị mới {2’, 2’’} thỏa mãn f(x7, d) = f(u8, d) = 2’ và f(u9, d) = f(u10, d) = 2’’ (ký hiệu trường hợp này diễn ra từ thời điểm t+1 đến t+2).
Tại thời điểm t, ta có: U/C = {C1, C2, …, C7} với
C1 = {u1}, C2 = {u2, u3, u4}, C3 = {u5}, C4 = {u6}, C5 = {u7}, C6 = {u8, u9, u10}, C7 = {u11, u12};
U/D = {D1, D2, D3, D4} với D1 = {u1, u2, u3, u4}, D2 = {u5, u6}, D3 = {u7, u8, u9, u10}, D4 = u11, u12}.
Dễ dàng tính ngay được ma trận độ hỗ trợ Sup(t)(C, D) là:
Sup(t)(C, D) = 2 0 0 0 0 3 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 3 0 0 0 1
Ma trận độ hỗ trợ tại thời điểm t+2 là:
Sup(t+2)(C, D) = 2 2 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 3 0 0 0 0 1
Ta cũng tính ngay được ma trận độ chính xác và ma trận độ phủ của tất cả các luật sau khi làm thô a1, sau đó làm mịn d như sau:
Acc(t+2)(C, D) = 4 . 0 4 . 0 2 . 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 Ma trận độ phủ : Cov(t+2)(C, D) = 1 1 5 . 0 0 0 0 0 5 . 0 0 0 0 0 0 5 . 0 0 0 0 0 5 . 0 0 0 0 0 0 75 . 0 0 0 0 0 25 . 0 2.4. Kết luận chƣơng 2
Trong chương này đã trình bày các khái niệm về làm thô, làm mịn các giá trị thuộc tính. Các luật quyết định có ý nghĩa trên bảng dữ liệu động khi làm thô, làm mịn các giá trị thuộc tính điều kiện và khi làm thô, làm mịn các giá trị thuộc tính quyết định. Trình bày và chứng minh một số thuật toán, định lý, hệ quả làm cơ sở toán học đã được nghiên cứu trong thời gian qua theo tiếp cận gia tăng để phát hiện các luật quyết định có ý nghĩa trên bảng dữ liệu động khi làm thô, làm mịn các giá trị thuộc tính quyết định. Trong cách tiếp cận này có ưu điểm là chỉ cần tổ chức lưu trữ và cập nhật lại ma trận độ hỗ trợ, qua đó tính ma trận độ chính xác và ma trận độ phủ sau đó sinh luật.
CHƢƠNG 3:
CÀI ĐẶT VÀ THỬ NGHIỆM 3.1. Cài đặt
3.1.1. Yêu cầu hệ thống
Chương trình “Thuật toán trích rút luật quyết định khi làm mịn, làm thô thuộc tính” đượ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:
- Cài đặt .Net Framework phiên bản 4.0 trở lên.
- Hệ điều hành tối thiểu Windows XP SP2
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.
3.1.2. Cấu trúc các lớp chương trình
Chương trình được tổ chức theo các lớp có chức năng rõ ràng, tối ưu cho việc đọc và xử lý của các lớp khác. Việc tổ chức theo lớp giúp dễ dàng theo dõi mã nguồn và xử lý khi xảy ra lỗi. Sau đây sẽ mô tả chi tiết về cấu trúc lớp chương trình và chức năng của chúng.
Hình 3.1: Mối liên hệ giữa các lớp trong chương trình
Hình 3.2: Mối quan hệ các lớp trong DecisionRules
Chương trình thiết kế bao gồm các lớp sau:
* DecisionRules: Đây là lớp xử lý giao diện chương trình, gọi tới các lớp con xử lý và hiển thị kết quả lên giao diện.
*DecisionTable: Lớp này lưu trữ các thông tin về bảng quyết định bao gồm: số hàng, số cột, giá trị của thuộc tính, lớp tương đương điều kiện và lớp tương đương quyết định.
* SupportMatrix: Lớp chính xử lý tính toán và lưu trữ giá trị của ma trận độ hỗ trợ, ma trận độ chính xác, ma trận độ phủ và lớp tương đương khi áp dụng thay đổi trong quá trình làm mịn, làm thô giá trị thuộc tính. Lớp này chứa toàn bộ các phương thức xử lý của 7 thuật toán (từ 2.1 đến 2.7).
Hình 3.4: Mối quan hệ các lớp trong SupportMatrix
SqlHelper: Lớp hỗ trợ tạo kết nối với cơ sở dữ liệu SQL Server, lớp này có thể đóng gói thành thư viện để sử dụng cho các mục đích tương tự.
Hình 3.5: Mối quan hệ trong lớp SqlHelper
* Ultilities: Lớp tiện ích bao gồm các phương thức hỗ trợ tính toán trên tập hợp và đọc dữ liệu từ bảng cơ sở dữ liệu.
Hình 3.7: Trong lớp AlgoCharn
3.2. Thử nghiệm chƣơng trình
3.2.1. Hướng dẫn chạy chương trình
Dữ liệu đầu vào là bảng quyết định nhất quán được lưu trữ trong một bảng dữ liệu. Mỗi bảng sẽ được lưu trữ các thông tin về bảng đó vào
một bảng trung gian là TableMetaData. Cấu trúc của bảng dữ liệu minh
họa như sau:
Hình 3.8. Cấu trúc bảng DS1
Các cấu trúc sử dụng để lưu trữ ma trận độ hỗ trợ là List. Nó là một mảng vô hướng trong C#, rất linh hoạt khi xử lý dữ liệu dạng mảng động. Để lưu trữ được các lớp tương đương, chương trình dùng đối tượng Dictionary, mỗi phần tử của Dictionary là một list chứa các chỉ số của đối tượng.
Một vài giao diện chính của chương trình:
Hình 3.10: Giao diện chương trình nạp bảng quyết định
Hình 3.12: Minh họa tính toán với dữ liệu khi tính toán 3.2.2. Mô tả 7 thuật toán
Dưới đây là các phương thức trong chương trình mô tả cho một vài thuật toán
// Tính ma trận độ hỗ trợ:
public void calcSupportMatrix() {
List<int> tmpSupport;
for (int i = 0; i < numOfCondition; i++) {
tmpSupport = new List<int>();
for (int j = 0; j < numOfDecision; j++) {
tmpSupport.Add(calcSupport(decisionTable.conditionList[i], decisionTable.decisionList[j]));
supportMatrix.Add(tmpSupport); }
}
// Tính ma trận độ hỗ trợ tại thời điểm làm thô thuộc tính điều kiện
public void unrefinedCondition(string attr, int w, int y) {
List<List<int>> listCs = newList<List<int>>(); List<int> Cs;
List<PairEquiv> pairEquivList = new List<PairEquiv>(); PairEquiv pairEquiv;
DataTable database = decisionTable.database; int valueCp = 0;
int valueCq = 0; int check;
for (int p = 0; p < numOfCondition; p++) {
for (int q = p + 1; q < numOfCondition; q++) { valueCp = Int32.Parse(database.Rows[decisionTable.conditionList[p][0]- 1][attr].ToString()); valueCq = Int32.Parse(database.Rows[decisionTable.conditionList[q][0]- 1][attr].ToString());
if ((valueCp == w && valueCq == y) || (valueCp == y && valueCq == w)) {
for (int k = 0; k < decisionTable.numOfColumn-1; k++)
{
valueCp = Int32.Parse(database.Rows[decisionTable.conditionList[p][0]- 1]["a"+(k+1)].ToString()); valueCq = Int32.Parse(database.Rows[decisionTable.conditionList[q][0]- 1]["a"+(k+1)].ToString()); if (!("a" + (k + 1)).Equals(attr) && valueCp != valueCq) { check = 0; break; } } if (check == 1) { pairEquiv.Cp = p; pairEquiv.Cq = q; pairEquivList.Add(pairEquiv); } } } }
foreach (PairEquiv item in pairEquivList) {
Cs = new List<int>(); for (int j = 0; j < numOfDecision; j++) {
Cs.Add(supportMatrix[item.Cp][j] + supportMatrix[item.Cq][j]); }
listCs.Add(Cs); }
// Tính ma trận độ hỗ trợ tại thời điểm làm mịn thuộc tính điều kiện
public void refinedCondition(string attr, List<int> listW,int w, List<int> listY, int y, int z)
{
List<List<int>> listCs = newList<List<int>>(); DataTable database = decisionTable.database; List<ListPair> listPair = newList<ListPair>(); List<int> Cs = newList<int>();
List<int> Cp; List<int> Cq;
List<int> track = newList<int>();
for (int s = 0; s < numOfCondition; s++) {
Cs = decisionTable.conditionList[s];
int valueCs = Int32.Parse(database.Rows[Cs[0] - 1][attr].ToString());
if (valueCs == z && calcSupport(Cs, listW) > 0 && calcSupport(Cs, listY) > 0)
{
track.Add(s);
Cp = newList<int>(); Cq = newList<int>();
{ if (listW.Contains(item)) { Cp.Add(item); } elseif (listY.Contains(item)) { Cq.Add(item); } }
ListPair list = newListPair(); list.Cs = s;
list.indexCp = Cp; list.indexCq = Cq;
list.listCp = new List<int>(); list.listCq = new List<int>();
for (int i = 0; i < numOfDecision; i++) {
int sup = calcSupport(Cp, decisionTable.decisionList[i]); list.listCp.Add(sup); list.listCq.Add(calcSupport(Cs,decisionTable.decisionList[i])-sup); } listPair.Add(list); } }
// Tính ma trận độ hỗ trợ tại thời điểm làm thô thuộc tính quyết định
public void unrefinedDecision(int w, int y) {
int tmpW = -1; int tmpY = -1;
DataTable database = decisionTable.database; for (int i = 0; i < numOfDecision; i++)
{ int value = Int32.Parse(database.Rows[decisionTable.decisionList[i][0] - 1]["d"].ToString()); if (value == w) { tmpW = i; } if (value == y) { tmpY = i; } }
List<int> Dz = new List<int>();
for (int i = 0; i < numOfCondition; i++) {
Dz.Add(supportMatrix[i][tmpW] + supportMatrix[i][tmpY]); }
3.3. Đánh giá thuật toán
Chương trình chỉ lựa chọn một giá trị hoặc là làm thô hoặc là làm mịn thuộc tính trên cùng một lớp điều kiện hoặc lớp quyết định. Bên cạnh nhược điểm đó chương trình có ưu điểm, không gây thay đổi về cơ sở dữ liệu lưu trữ trên bảng quyết định mà chỉ cần tính lại các lớp tương đương.
3.4. Kết luận chƣơng 3
Trong chương này, đã trình bày được mô hình mối quan hệ giữa các lớp và viết mã cho các thuật toán để phát hiện các luật quyết định có ý nghĩa khi làm thô hay làm mịn đối tượng.
KẾT LUẬN
Luận văn đã trình bày được mối quan hệ giữa độ đo hỗ trợ với độ đo chính xác và độ phủ của luật quyết định.
Trình bày được các thuật toán theo tiếp cận gia tăng phát hiện các luật quyết định mới khi các giá trị thuộc tính trong bảng dữ liệu thay đổi. Ưu điểm của thuật toán là chỉ cần cập nhật lại ma trận độ hỗ trợ dựa trên đó tính ma trận độ chính xác và ma trận độ phủ rồi sinh luật.
Trình bày các định lý và hệ quả làm cơ sở toán học cho tính đúng đắn của thuật toán theo tiếp cận gia tăng phát hiện các luật quyết định khi làm thô, làm mịn các giá trị thuộc tính điều kiện và khi làm thô, làm mịn các thuộc tính quyết định. Trình bày các mệnh đề đánh giá độ phức tạp của thuật toán. Ngoài các kết quả nói trên, còn một số kết quả đến trích rút luật quyết định, độ đo của luật, tập thô.
Tuy nhiên, vì thời gian hạn hẹp nên luận văn cũng chưa tìm hiểu được một số vấn đề sau:
Trình bày thuật toán trên bảng dữ liệu đầy đủ khi tập thuộc tính thay đổi. Trình bày thuật toán phát hiện các luật quyết định trên bảng dữ liệu không đầy đủ trong các trường hợp như đối tượng thay đổi, tập thuộc tính thay đổi và tập các giá trị thuộc tính thay đổi.
TÀI LIỆU THAM KHẢO
[1]. Hoàng Thị Lan Giao (2006), Khía cạnh đại số và loogic phát hiện luật theo tiếp cận tập thô, Luận án Tiến sĩ toán học, Viện Công nghệ Thông tin, Viện Khoa học và Công nghệ Việt Nam.
[2]. Nguyễn Quang Khanh, Nguyễn Bá Tường (2011), Một cách tiếp cận mới
để học gia tăng các luật quyết định, Tạp chí Công nghệ thông tin và Truyền thông, các công trình nghiên cứu, phát triển và ứng dụng công nghệ thông tin và Truyền thông 2011; tr.72 - 80.
[3]. http://www.cs.waikato.ac.nz/ml/weka/
[4]. Han J. and Kamber (2000), Data mining Concepts and Techniques,
Morgan Kanufmann.
[5]. Hà Quang Thuỵ (1996). Một số vấn đề về không gian xấp xỉ, tập thô đối với hệ thông tin. Luận án Phó tiến sĩ Khoa học Toán Lý. ĐHKHTN, 1996 [6]. Nguyễn Viết Cường, Phùng Thị Thu Hiền, Phạm Quang Dũng (2009),
“Một đẳng thức kép của tập thô”, Tạp chí nghiên cứu khoa học kỹ thuật và công nghệ quân sự, (26) tr.68-71.
[7]. Nguyễn Bá Tường (2008), “Thuật toán mới để rút trích các luật từ hệ thông tin đầy đủ dựa trên mô hình phủ tập thô”, Tạp chí Công nghệ thông tin & truyền thông 3(19) tr.119-123.
[8]. Vũ Đức Thi “Một số vấn đề tính toán liên quan đến cơ sở dữ liệu và khai phá dữ liệu” Tạp chí Khoa học và Công nghệ 50(6) (2012) 679-703.