Cấu trúc các lớp chương trình

Một phần của tài liệu Khai phá luật dữ liệu trên bảng dữ liệu có thuộc tính thay đổi (Trang 47 - 61)

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.

Một phần của tài liệu Khai phá luật dữ liệu trên bảng dữ liệu có thuộc tính thay đổi (Trang 47 - 61)

Tải bản đầy đủ (PDF)

(61 trang)