TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TINCHƯƠNG TRÌNH ĐÀO TẠC THẠC SĨ CNTT QUA MẠNG TẬP THÔ TRONG KHAI PHÁ DỮ LIỆU TÌM TẬP RÚT GỌN SỬ DỤNG MA TRẬN PHÂN BIỆT ĐƯỢC Bộ môn: Khai phá dữ liệu và kho
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHƯƠNG TRÌNH ĐÀO TẠC THẠC SĨ CNTT QUA MẠNG
TẬP THÔ TRONG KHAI PHÁ DỮ LIỆU TÌM TẬP RÚT GỌN SỬ DỤNG MA TRẬN PHÂN BIỆT ĐƯỢC
Bộ môn: Khai phá dữ liệu và kho dữ liệu Giáo viên hướng dẫn: PGS.TS Đỗ Phúc Sinh viên: Trần Hoài Phong
MSSV: CH1101027
Trang 2Mục lục
Lời mở đầu 3
1 Các khái niệm và thuật ngữ 4
1.1 Hệ thông tin 4
1.2 Quan hệ bất khả phân biệt 5
1.3 Xấp xỉ tập hợp 6
1.4 Rút gọn và lõi 6
1.5 Ma trận bất khả phân biệt 7
2 Các thuật toán tìm rút gọn 8
2.1 Tìm rút gọn dựa trên hàm phân biệt 8
2.2 Tìm rút gọn dựa trên chiến lược Johnson 9
3 Cài đặt thuật toán Johnson 12
3.1 Các hàm để nhập, xuất dữ liệu phục vụ cho bài toán 12
3.2 Các hàm chính được sử dụng trong thuật toán Johnson 15
3.3 Chạy và thực thi kết quả: 21
3.4 Nhận xét: 23
4 Kết luận 25
Tài liệu tham khảo 26
Trang 3Lời mở đầu
Việc khám phá tri thức trong cơ sở dữ liệu đã được phát triển như là một trong những lĩnh vực quan trọng và năng động nhất vì những thách thức gặp phải trong lý thuyết cũng như các ứng dụng thực tế có liên quan đến vấn đề khám phá hoặc rút trích
ra những thông tin thú vị và kiến thức chưa biết từ một tập cơ sở dữ liệu rất lớn của thếgiới thực Lý thuyết Tập thô là một hình thức toán học để biểu diễn các thông tin không chắc chắn Nó được xem như là một công cụ để giảm số chiều đầu vào và xử lý các dữ liệu mơ hồ không chắc chắn Trong những năm trở lại đây, đã có những sự phát triển nhanh chóng trong lý thuyết tập thô và các ứng dụng của nó trong nhiều lĩnh vực nghiên cứu khách nhau bao gồm các vấn đề liên quan đến máy học theo quy nạp và rút trích tri thức trong các hệ thống tri thức Mục tiêu chính của bài báo cáo này sẽ đưa ra một số khái niệm cơ bản về tập thô Trong đó tập trung phần lớn vào bài toán tìm ma trận tập rút gọn sử dụng ma trận phân biệt được để quá đó cho chúng ta thấy rõ tại sao việc phân tích tập thô lại có thể được sử dụng hiệu quả để rút trích ra kiến thức từ một tập lớn cơ sở dữ liệu
Trong bài báo cáo em sẽ đưa ra một thuật toán cũng như một ứng dụng áp dụng thuật toán được nêu ra để giúp hiểu rõ hơn về quá trình rút trích tri thức từ tập dữ liệu thực tế Việc cài đặt thuật toán hoàn toàn là do cá nhân lập trình, do tính phức tạp của thuật toán cũng như một số hạn chế về thời gian cài đặt cũng như kiến thức nên phần ứng dụng có thể chưa phải là bản hoàn chỉnh nhất có thể
Cuối cùng em xin cám ơn thầy đã rất nhiệt tình hướng dẫn trong quá trình giảng dạy Thầy đã cung cấp cho em nhiều kiến thức quý báu qua đó giúp em có thể nghiên cứu sâu hơn trong nhiều lĩnh vực trong tin học mà trước đây mình chưa từng nghĩ đến
Trang 41 Các khái niệm và thuật ngữ
Tập thô dùng để phân tích sự không chắc chắn trong dữ liệu Chúng được sử dụng để xác định các đặc trưng quan trọng của các đối tượng và xây dựng các tập xấp
xỉ trên và xấp xỉ dưới của tập đối tượng Trong thế giới thực các dữ liệu khác nhau về kích thước và độ phức tạp do đó rất khó để phân tích cũng như quản lý trên quan điểm toán học Mục tiêu quan trọng nhất của phân tích tập thô là giảm kích thức dữ liệu và
xử lý vấn đề không đồng nhất trong dữ liệu Phần tiếp theo sẽ nêu ra các khái niệm chính của tập thô được dùng cho các thông tin không nhất quán, gần đúng để xử lý các
dữ liệu dư thừa
1.1 Hệ thông tin
Trong mô hình dữ liệu của tập thô, thông tin được lưu trữ trong bảng nơi một sựkiện hoặc một đối tượng được thể hiện tương ứng với một dòng Các thông tin về đối tượng trong thế giới thực được thể hiện bởi dòng tương ứng trong bảng Mỗi cột trong bảng được dùng để thể hiện các đặc trưng (một giá trị, một đặc điểm, …) mà có thể đo đạc được cho đối tượng đó Một bảng như vậy được gọi là một hệ thông tin
Nó có thể được biểu diễn như là một cặp IS=(U,A) trong đó U={x1, x2,…,xn}
là tập hữu hạn khác rỗng các phần tử A={a1, a2, …, am} là tập hữu hạn khác rỗng cácthuộc tính sao cho a:U->Va, a A Tập Va được gọi là tập giá trị của a Chúng ta sẽ chia tập giá trị này thành hai tập con C A và D = A – C, tương ứng là tập thuộc tính
và thuộc tính quyết định Tập thuộc tính đại diện cho các đặc trưng có thể đo lường được của đối tượng trong khi thuộc tính quyết định là một thuộc tính dùng để phân lớp
Một ví dụ của bảng thông tin:
Các cột của bảng được đánh nhãn bởi các thuộc tính Outlook, Temperature, Humidity, Windy và Play Các dòng được đánh nhãn bởi các đối tượng p1, p2, p3,
…,p5
Trang 5Mỗi dòng trong bảng có thể được xem là thông tin về một đối tượng cụ thể Ví
dụ đối tượng p3 có thể được đặc trưng trong bảng bởi các tập giá trị thuộc tính sau đây {(Outlook,overcast),(Temperature,83),(Humidity,86), (Windy, False),(Play, Yes)}
1.2 Quan hệ bất khả phân biệt
Đây là điểm khởi đầu của lý thuyết tập thô, nó thể hiện thực tế do thiếu một số tri thức làm cho chúng ta không thể phân biệt được vài đối tượng với những thông tin sẵn có Đây là một dạng của sự dư thừa trong dữ liệu Cho hệ thông tin IS = (U, A) đối với mỗi tập thuộc tính B A một quan hệ bất khả phân biệt được ký hiệu là INDB
được định nghĩa như sau:
INDB(U) = {(x,y) U2 | a B a(x) = a(y)} trong đó B là quan hệ bất khả phân biệt
Nếu (x,y) INDisthì đối tượng x và y là bất khả phân biệt với nhau bởi thuộc tính B Chúng ta có thể dễ dàng chứng minh quan hệ bất khả phân biệt là một quan hệ tương đương Chúng ta kí hiệu lớp bất khả phân biệt B của x là [x]B Quan hệ tương đương sẽ làm cho tập đối tượng bị chia thành các phân mãnh lớp tương đương và hội các tập hợp này sẽ tạo ra lại tập đối tượng
Chúng ta hãy quan sát mỗi tập con các thuộc tính đã chia tập hợp các đối tượng
Trang 6của các thuộc tính sẽ tạo ra một nhóm các tập đối tượng có cùng các đặc trưng Các nhóm này được xem như tập cơ sở là khối xây dựng cơ bản của lý thuyết tập thô.
BX = {x U: [x] B X}
BX = {x U: [x] B X }
BNB = BX - BX
Trong đó BNB gọi là biên B của X chứa các đối tượng không thể phân lớp theo
B Nêu biên B là một tập hợp rỗng người ta nói tập này là rõ, ngược lại nếu biên B khác rỗng người ta nói tập này là thô
Tập thô có thể được đặc trưng bởi một con số
Trang 7có thể được coi như là một tập đầy đủ các thuộc tính có nghĩa là nó có thể đại diện cho cấu trúc của lớp.
Cho C,D A là một tập các thuộc tính điều kiện và quyết định Chúng ta sẽ gọiC’ C là D-Rút gọn của C (rút gọn tương ứng của D), nếu C’ là một tập con nhỏ nhất của C thỏa
Cho hệ thông tin T = (U, C, D) với U={u1, u2, …., un}, ma trận phân biệt của
nó M là một ma trận n x n, trong đó mỗi phần tử m cho một cặp (x,y) được định nghĩa như sau
mij =λ, ui(D) = uj(D)
={c C | ui(c) uj(c)} , ui(D) uj(D)}
Ý nghĩa của phần tử m là các đối tượng x, y có thể được phân biệt bởi bất kì thuộc tính nào trong m Nếu mij= λ hàm ý các đối tượng x, y không phân biệt được trên tập thuộc tính quyết định D Nếu mij= thì bảng quyết định là không nhất quán (x, y bằng nhau thuộc tính điều kiện nhưng khác nhau trong thuộc tính quyết định)
Ví dụ cho ma trận
Trang 8Ma trận bất khả phân biệt tương ứng là:
2 Các thuật toán tìm rút gọn
Từ các khái niệm và thuật ngữ đã được tìm hiểu ở trên chúng ta đi vào một số thuật toán để thấy được bản chất của vấn đề rút gọn các tập thuộc tính và đây là cơ sở
để hiểu được phần nào các thuật toán tìm tập rút gọn trong một hệ thông tin
1.6 Tìm rút gọn dựa trên hàm phân biệt
Cho hệ thông tin T = (U, C, D) với U={u1, u2, …., un} có ma trận phân biệt M
= “mij”, hàm phân biệt ft của T được xây dựng như sau
Trang 9Ta có hàm phân biệt sau:
ft = (a c ) b c (a b )
Sử dụng các tính chất trong đại số Boolean ta có thể đưa về các dạng chuẩn tắc,
từ đó ta sẽ tìm ra được các rút gọn của hệ thông tin
Sau khi rút gọn ta được ft = b c từ đó ta tìm được một rút gọn của hệ thông tin
là {b, c}
1.7 Tìm rút gọn dựa trên chiến lược Johnson
Trong thuật toán trên đòi hỏi một độ phức tạp rất lớn về thời gian và không gianlưu trữ Để khắc phục nhược điểm trên Johnson đưa ra một thuật toán vẫn dựa vào ý nghĩa của ma trận bất khả phân biệt nhưng không cần phải lưu trữ ma trận bất khả phânbiệt Thay vào đó là xác định số cặp phân biệt được đối với từng thuộc tính điều kiện
Xét hệ thông tin T = (U, C, D) với U={u1, u2, …., un}, Với bất kì B C và X
U, quan hệ tương đương IND(B) giới hạn trên tập X được ký hiệu là INDx(B) và tập các lớp tương đương tạo bởi quan hệ này là [INDx(B)]
Với thuộc tính a A, giả sử [INDx(a)] = {X1, X2, …., Xm} Đặt x = |X| và xi
= |Xi|, i = 1,…, m Số Wx(a) các cặp đối tượng trong X phân biệt nhau tại thuộc tính a được tính từ công thức:
Trang 102 2 1
Tính WU
R(cj) = Wx 1(cj) + … + Wx m(cj) End
Trang 11Dừng
Ngược lại thực hiện lại bước 2
Ví dụ
Cho hệ thông tin sau:
Đặt c1= Đau đầu, c2= Đau cơ, c3= Thân nhiệt
Trang 127 Do WL
R (c3) 0 hoặc R C Lặp lại bước 2
1 R = { c3}; L = {{u1, u4}, {u2, u5}{u3, u6}}
2 Repeat
3
[INDx 1(c1)] = {{u1}, {u4}} Wx 1(c1) = 0
[INDx 2(c1)] = {{u2}, {u5}} Wx 2(c1) = 0
[INDx 3(c1)] = {{u3}, {u6}} Wx 3(c1) = 0
WL
R(c1) = 0 + 0 + 0 = 0
[INDx 1(c2)] = {{u1, u4}} Wx 1(c2) = 0
[INDx 2(c2)] = {{u2}, {u5}} Wx 2(c2) = 0
[INDx 3(c2)] = {{u3, u6}} Wx 3(c2) = 0
=> Sau khi thuật toán kết thúc ta được R = { c3, c1} hoặc R = { c3, c2}
3 Cài đặt thuật toán Johnson
Ứng dụng minh họa được lập trình trên nền net Ngôn ngữ lập trình c# được viết trên bộ công cụ visual studio 2008
1.8 Các hàm để nhập, xuất dữ liệu phục vụ cho bài toán
Trang 13- Hàm này để thay đổi số thuộc tính đầu vào, từ thuộc tính đầu vào sẽ tạo ra giao
diện nhập hệ thông tin
private void txtA_TextChanged(object sender, EventArgs e) {
- Hàm này thêm vào một gridview để người dùng nhập các thông tin của hệ thông
tin làm đầu vào cho bài toán
private void XayDungBangQuyetDinh() {
Trang 15}
}
}
}
1.9 Các hàm chính được sử dụng trong thuật toán Johnson
- Hàm “btnTimRutGon_Click” thực hiện các bước 1, 4, 5, 6, 7 trong thuật toán
Mô tả hàm
Ban đầu hàm khởi tạo các giá trị cho R, L, Y ban đầu từ các giá trị đầu vào Lưu
ý ở đây ta có thêm tập Y dùng để lưu các giá trị WU
R(cj) phục vụ cho việc kiểm tra xem có bằng 0 hay không cũng như để loại các trường hợp có WU
R(cj) không phải là nhỏ nhất
Tập R sẽ có nhiều trường hợp vì đôi khi thuật toán chạy sẽ cho ra hai giá trị WU
R
(cj) bằng nhau và đều nhỏ nhất, do đó sẽ có trường hợp R = “{c1, c2}” hoặc R = “{c1, c3}” Do đó ta phải lặp trong R trước tiên lấy ra mọi trường hợp để tiến hành tính toán
WU
R(cj) trên các trường hợp khác nhau
Với mỗi trường hợp trong R ta có các L tương ứng, từ R với L tương ứng đó ta đưa vào hàm “GetMinY” Hàm “GetMinY” mô tả lại các bước thực hiện trong 2 và 3
Sau khi đã chạy hàm GetMinY ta sẽ được các giá trị sau đây: giá trị WU
R(cj) nhỏ nhất, các vị trí của thuộc tính gây ra giá trị WU
R(cj) nhỏ nhất, các thuộc tính gây ra giá trị WU
Trang 16_bangQuyetDinh.Columns.Count > 1)
{
ArrayList TapR = new ArrayList();
TapR.Add(new ArrayList());
ArrayList TapXTemp = new ArrayList();
ArrayList TapL = new ArrayList();
for (int i = 0; i < _bangQuyetDinh.Rows.Count - 1; i++) {
ArrayList TapRTemp = (ArrayList)TapR.Clone();
ArrayList TapLTemp = (ArrayList)TapL.Clone();
ArrayList TapHopYTemp = (ArrayList)TapHopY.Clone(); TapR.Clear();
TapHopY.Clear();
TapL.Clear();
for (int i = 0; i < TapRTemp.Count; i++)
{
ArrayList CacTHR = (ArrayList)TapRTemp[i];
ArrayList CacTHL = (ArrayList)TapLTemp[i];
GetMinY(CacTHR, CacTHL, out minY, out minYIndex, out arrMinC, out TapHopIndC, out TapHopYTemp); for (int j = 0; j < arrMinC.Count; j++)
{
Trang 17ArrayList CacTHRTemp =
(ArrayList)CacTHR.Clone();
CacTHRTemp.Add(arrMinC[j]); TapR.Add(CacTHRTemp); TapHopY.Add(TapHopYTemp[(int)minYIndex[j]]); CacTHLTemp = new ArrayList();
foreach (ArrayList lTemp in (ArrayList)TapHopIndC[(int)minYIndex[j]]) {
foreach (ArrayList tapX in lTemp) {
if (tapX[0] is ArrayList) {
foreach (object tapXX in (ArrayList)tapX) {
CacTHLTemp.Add(tapXX); }
}
else {
CacTHLTemp.Add(tapX); }
}
}
TapL.Add(CacTHLTemp);
}
}
if (minY == 0) {
break; }
bool iBreak = false;
Trang 18Ban đầu hàm nhận giá trị R, L vào Lặp tất cả thuộc tính cj, nếu thuộc tính đó
đã có trong R thì ta sẽ không xét nữa Tiếp theo lặp các X thuộc L
Trong mỗi vòng lặp ta tính ra được các [INDx i(cj)] và Wx i(cj) Đồng thời có một biết y để lưu tổng các Wx i(cj) vừa tìm được
Sau khi hàm được chạy xong ta trả lại kết quả cho hàm “btnTimRutGon_Click”
để hàm này tính toán điều kiện dừng
Lập trình hàm
private void GetMinY(ArrayList TapR, ArrayList TapL,
out int minY, out ArrayList minYIndex, out ArrayList minC,
out ArrayList TapHopIndC, out ArrayList TapHopY)
{
TapHopIndC = new ArrayList();
TapHopY = new ArrayList();
minY = int.MinValue;
minYIndex = new ArrayList();
Trang 19minC = new ArrayList();
for (int i = 0; i < _iCCount; i++)
ArrayList excluseU = new ArrayList();
ArrayList IndCX = new ArrayList();
for (int j = 0; j < tapX.Count; j++)
Trang 20ArrayList tempDel = new ArrayList();
int w = temp.Count * temp.Count;
int row0Index = (int)temp[0];
int rowlIndex = (int)temp[l];
if
(_bangQuyetDinh.Rows[row0Index].Cells[i].Value.ToString().Equals(_bangQuyet Dinh.Rows[rowlIndex].Cells[i].Value.ToString()) &&
_bangQuyetDinh.Rows[row0Index].Cells[_bangQuyetDinh.Columns.Count -
1].Value.ToString().Equals(_bangQuyetDinh.Rows[rowlIndex].Cells[_bangQuyetD inh.Columns.Count - 1].Value.ToString()))
Trang 211.10 Chạy và thực thi kết quả:
Người dùng nhập số lượng thuộc tính C của hệ thông tin Sau đó nhập các giá trị
c tương ứng trong từng ô Sau khi nhập xong nhấn nút tìm rút gọn Chương trình sẽ đưa ra tập rút gọn tìm được
Dữ liệu thứ 1:
Trang 22Dữ liệu thứ 2:
Trang 23Dữ liệu thứ 3:
Trang 241.11 Nhận xét:
Ưu điểm
- Thuật toán đã cài đặt thành công và thu được kết quả chính xác trong trường
hợp có nhiều tình huống phức tạp như có nhiều Wx i(cj) giống nhau Điều chưa được xử lý đầy đủ trong phần thuật toán
- Không cần phải tốn không gian lưu trữ để lưu ma trận bất khả phân biệt
- Người dùng có thể nhập động hoàn toàn các thuộc tính cũng như các đối tượng
để đưa vào bài toán
- Phần cài đặt đã được đi đúng với các bước của thuật toán, đồng thời có những
bước tinh chỉnh để giúp cho thuật toán tìm được đầy đủ nhất, đồng thời có những hàm tinh chỉnh kết quả giúp tránh tình trạng dư thừa dữ liệu
Trang 25- Từ các trường hợp khác nhau trong R đã nêu trên sau khi đã cài đặt và xử lý
được, ta lại gặp trường hợp một số R lại cho ra kết quả đi hết các thuộc tính nhưng Wx i(cj) lại không bằng không và không giống nhau Đòi hỏi chúng ta phải qua một bước xử lý kết quả đối với các trường hợp như vậy để có thể nhận được kết quả chính xác nhất
- Một số khuyết điểm nhỏ như thực hiện việc lặp hết các thuộc tính sẽ tạo ra các
kết quả ví dụ R = {{c1, c2}, {c2, c1}} nghĩa là hai cặp trên thực tế là giống nhau nhưng lại có trong kết quả cũng đã được xử lý
- Cũng vì thời gian thực tế có hạn nên chưa thể test được nhiều trường hợp, có thể
trong quá trình lập trình các trường hợp phức tạp kể trên sẽ gây một số sai sót cóthể gây ra lỗi chương trình đồng thời phần lập trình chưa được tối ưu và gọn nhẹnhất có thể mong thầy có thể thông cảm