.4 Giao diện kết quả sinh các luật tin cậy

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Vấn đề về luật kết hợp mờ và các toán tử có ngưỡng trong khai phá dữ liệu Luận văn ThS. Công nghệ thông tin 1 01 10 (Trang 49)

KẾT LUẬN

Những vấn đề đã đƣợc tìm hiểu và giải quyết trong luận văn

Hiện nay, khai phá dữ liệu là một lĩnh vực rất được quan tâm, nó bao gồm nhiều lĩnh vực và nhiều kỹ thuật khác nhau trong đó khai phá luật kết hợp và khai phá luật kết hợp mờ là các mục tiêu quan trọng trong lĩnh vực khai phá dữ liệu. Vì vậy, tôi đã cố gắng tìm tòi nhiều tài liệu để nghiên cứu những vấn đề cơ bản nhất về khai phá dữ liệu bằng luật kết hợp mờ. Sau đây là những điểm chính mà luận văn đã tập trung giải quyết:

Chương 1: Trong chương này ngoài việc phát biểu các khái niệm, định nghĩa một cách hình thức còn trình bày các thuật toán điển hình để giải quyết bài toán khai phá luật kết hợp do R. Agarawal đề xuất năm 1993.

Chương 2: Thực tế là các dữ liệu thường ở dạng thuộc tính số và hạng mục. Chính vì vậy bài toán tìm luật kết hợp với thuộc tính số và hạng mục đã được đề cập một cách sơ lược để đánh giá ưu và nhược điểm của chúng. Lý thuyết cơ bản về tập mờ được đề cập để chỉ ra tính ưu việt của tập mờ và việc gắn tập mờ với bài toán khai phá luật kết là một vấn đề tất yếu. Trong chương này cũng đề xuất việc đưa vào các toán tử phù hợp để xác định độ ủng hộ chứ không chỉ dùng các toán tử lấy min và tích đại số. Và khái niệm toán tử có ngưỡng [12] có thể đưa vào bài toán luật kết hợp mờ cũng làm cho việc khai phá dữ liệu đạt kết quả tốt hơn. Hay nói cách khác, ta có thể sử dụng các toán tử có ngưỡng cho bài toán khai phá dữ liệu bằng luật kết hợp mờ.

Chương 3: Đây là phần cài đặt thử nghiệm cho bài toán đưa ra ở chương 2. Dữ liệu của chương trình là về thời gian và các loại dịch vụ sử dụng internet ADSL. Chương trình này góp phần thực hiện một cách trực quan nhất các bước mà thuật toán ở chương 2 đã đưa ra.

Hƣớng mở rộng nghiên cứu trong tƣơng lai

Khai phá dữ liệu lĩnh vực được nhiều nhà nghiên cứu quan tâm vì nó ứng dụng rộng rãi trong đời sống xã hội ngày nay và vì vậy có rất nhiều hướng nghiên cứu mở rộng khác nhau.

Trong luận văn này tôi chỉ chọn một vấn đề nhỏ để nghiên cứu, khi có điều kiện tôi sẽ mở rộng hướng nghiên cứu ra một số hướng sau:

- Nghiên cứu, đánh giá các thuật toán cải tiến tối ưu hơn để từ đó gắn với các toán tử mờ có ngưỡng.

- Ngiên cứu các thuộc tính đa mức để đưa vào bài toán tìm luật kết hợp mờ

của các toán tử sao cho tối ưu với từng loại bài toán cụ thể.

- Ứng dụng các kết quả nghiên cứu vào thực tiễn như ngân hàng, thị trường chứng khoán, bệnh viện, kinh doanh.

Trong quá trình thực hiện luận văn mặc dù đã cố gắng tìm hiểu nhiều tài liệu tuy nhiên do trình độ và thời gian có hạn không tránh khỏi những sai sót. Rất mong các thầy cô, bạn bè, đồng nghiệp thông cảm.

TÀI LIỆU THAM KHẢO

Tiếng Việt

[1]. Bùi Công Cường, Nguyễn Doãn Phước (2001), Hệ mờ, mạng Nơron và ứng dụng, Nhà xuất bản Khoa học và Kỹ thuật.

[2]. Nguyễn Thanh Thủy (8/2001), Khai phá dữ liệu - Kỹ thuật và ứng dụng, Bài giảng Trường thu Hệ mờ và ứng dụng, Hà Nội

[3]. Bùi Công Cường, Lê Chí Ngọc (2005), Mấy vấn đề về luật kết hợp mờ và t- chuẩn có ngưỡng.

Tiếng Anh

[4]. Rakesh Agrawal Ramakrishnan Srikant (1994), Fast Algorithms for Mining Association Rules in Large Database, IBM Research Report RI9839, IBM Almaden Research Center San Jose, Califorlia.

[5]. Jiawei Han, Jian Pei, and Yiwen Yin (2000), Mining Frequent Patterns without Candidate Generation, Proceedings of the 2000 ACM SIGMOD International Cinference on Manaement of Data, volume 29(2) of SIGMOD Record, pages 1- 12

[6]. Gosta Grahne and Jianfei Zhu (2003), Efficiently Using Prefix-trees in Mining Frequent Itemsets, In Proceedings of FIMI’03, Concordia University Montreal, Canada

[7]. Chan Man Kuok, Ada Fu, Man Hon Wong, (1998) Mining Fuzzy Association Rules in Databases, Department of Computer Science and Engineering The Chinese University of Hong Kong Shatin, New Territories, Hong Kong

[8]. Zahra Farzanyar, Moharnrnadreza Kangavari, Sattar Hashemi (2006), A New Algorithm for Mining F'uzzy Association Rules in the Large Databases Based on Ontolog, Workshops Proceedings of the 6th IEEE International Conference on Data Mining, Hong Kong, China. IEEE Computer Society 2006

[9]. Weining Zhang (1999), Mining Fuzzy Quantitative Association Rules, Proceedings of IEEE International Conference on Tools with Artificial Intelligence 1999 Piscataway, NJ, IEEE Press

[10]. David L. Olson, Yanhong Li (1/2007), Mining Fuzzy Weighted Association Rules, 40th Hawaii International International Conference on Systems Science (HICSS-40 2007), CD-ROM / Abstracts Proceedings, Waikoloa, Big Island, HI, USA. IEEE Computer Society 2007

Quantitative Association Rules Mining Algorithm and Its Simulation, Fourth International Conference on Fuzzy Systems and Knowledge Discovery (FSKD 2007)

[12]. Bui Cong Cuong, Some computing procedures in fuzzy systems Institute of Mathematics

[13]. Attila Gyenesei (3/2000), A Fuzzy Approach for Mining Quantitative Association Rules, Turku Centre for Computer Science TUCS Technical Report, No 336

PHỤ LỤC

Public Sub Mohoa(ByVal CSDL_goc As String)

Dim i As Long Dim j As Long Dim sql As String

Dim RS As New ADODb.Recordset Dim rs1 As New ADODb.Recordset Dim rs2 As New ADODb.Recordset

sql = "select * from tt_mo order by id" clsConn.GetRs connQLPK, sql, RS

If Not (RS.BOF And RS.EOF) Then

sql = "create table " & Trim(tblMO) & "(TID long " i = 1

Do While Not RS.EOF

sql = sql & "," & RS!ma & " Double " i = i + 1 RS.MoveNext Loop sql = sql & ")" clsConn.ExecQuery connQLPK, sql End If RS.Close

sql = "select * from " & CSDL_goc clsConn.GetRs connQLPK, sql, RS sql = "select * from Mo"

clsConn.GetRs connQLPK, sql, rs1 If Not (RS.BOF And RS.EOF) Then Do While Not RS.EOF

rs1.AddNew rs1.Fields(0).Value = RS.Fields(0).Value rs1.Update RS.MoveNext Loop For i = 1 To rs1.Fields.Count - 1 RS.MoveFirst rs1.MoveFirst

sql = "select * from tt_mo where ma='" & rs1.Fields(i).Name & "'"

clsConn.GetRs connQLPK, sql, rs2 If Not (rs2.EOF And rs2.BOF) Then Do While Not RS.EOF

' Loai nhi phan

If rs2!id_loaitm = 1 Then If rs2!hsa = 1 Then

rs1.Fields(i).Value = RS.Fields("" & rs2!ttgoc & "").Value

Else

rs1.Fields(i).Value = IIf(RS.Fields("" & rs2!ttgoc & "").Value = 0, 1, 0)

End If ' Loai tam giac

ElseIf rs2!id_loaitm = 2 Then

rs1.Fields(i) = Tamgiac(RS.Fields("" & rs2!ttgoc & "").Value, rs2!hsa, rs2!hsb, rs2!hsc)

' Loai hinh thang

rs1.Fields(i) = Hinhthang(RS.Fields("" & rs2!ttgoc & "").Value, rs2!hsa, rs2!hsb, rs2!hsc, rs2!hsd)

End If rs1.Update rs1.MoveNext RS.MoveNext Loop End If rs2.Close Next End If RS.Close rs1.Close End Sub

' Dua vao bang CK voi k = 1 Public Sub CK1()

Dim sql As String

Dim RS As New ADODb.Recordset Dim rs1 As New ADODb.Recordset Dim rs2 As New ADODb.Recordset Dim rs3 As New ADODb.Recordset Dim i As Integer

Dim k As Integer ' Cap thu nhat

sql = "select * from tt_mo" clsConn.GetRs connQLPK, sql, RS If Not (RS.BOF And RS.EOF) Then sql = "select "

i = 1

Do While Not RS.EOF

If i + 1 > RS.RecordCount Then

sql = sql & " sum(" & RS!ma & ") as " & RS!ma Else

sql = sql & " sum(" & RS!ma & ") as " & RS!ma & ", " End If

RS.MoveNext i = i + 1 Loop

sql = sql & " from " & tblMO clsConn.GetRs connQLPK, sql, rs1 sql = "select * from Ck"

clsConn.GetRs connQLPK, sql, rs2 If Not (rs1.EOF And rs1.BOF) Then For i = 0 To rs1.Fields.Count - 1

sql = "select id from tt_mo where ma ='" & rs1.Fields(i).Name & "'"

clsConn.GetRs connQLPK, sql, rs3 rs2.AddNew

rs2!TT = rs1.Fields(i).Name

rs2!dohotro = rs1.Fields(i).Value / RecNum rs2!cap = 1

rs2!ck_truoc = 0

If (rs1.Fields(i).Value / RecNum) > fminsupp Then rs2!phobien = True

Else

rs2!thichhop = True

If Not (rs3.EOF And rs3.BOF) Then rs2!id_ttmo_tiep = rs3!id End If

rs2!tt_mo = rs1.Fields(i).Name rs2.Update

rs3.Close

sql = "insert into Ck_TTMo values(" & rs2!id & "," & rs2!id_ttmo_tiep & ")" clsConn.ExecQuery connQLPK, sql Next End If rs1.Close rs2.Close End If End Sub ' --- ' Cac ham bo tro cho viec tinh toan

Public Function max(ByVal x As Double, ByVal y As Double) As Double If x >= y Then max = x Else max = y End If End Function

Public Function min(ByVal x As Double, ByVal y As Double) As Double If x >= y Then min = y Else min = x End If End Function

Public Function min2(ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double

Dim t As Double t = min(x, y) min2 = min(t, z) End Function

Public Function T1(ByVal x As Double, ByVal y As Double) As Double If x >= y Then T1 = y Else T1 = x End If End Function

Public Function T2(ByVal x As Double, ByVal y As Double) As Double If (x + y - x * y) = 0 Then T2 = 0 Else T2 = (x * y) / (x + y - x * y) End If End Function

T3 = x * y End Function

Public Function T4(ByVal x As Double, ByVal y As Double) As Double If (2 - (x + y - x * y)) = 0 Then T4 = 0 Else T4 = (x * y) / (2 - (x + y - x * y)) End If End Function

Public Function T5(ByVal x As Double, ByVal y As Double) As Double If (x + y) >= 1 Then Tl = x + y - 1 Else Tl = 0 End If End Function

Public Function T6(ByVal x As Double, ByVal y As Double) As Double If max(x, y) = 1 Then Td = min(x, y) Else Td = 0 End If End Function

Public Function NhiphanA(ByVal z As Double, ByVal a As Double, ByVal b As Double) As Double If b = 1 Then NhiphanA = 0 Else NhiphanA = 1 End If End Function

Public Function Tamgiac(ByVal z As Double, ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double

Dim t As Double Dim T1 As Double If b - a = 0 Then t = (z - a) / (b - a) Else t = 1 End If If c - b = 0 Then T1 = 1 Else T1 = (c - z) / (c - b) End If Tamgiac = max(min2(t, 1, T1), 0) End Function

Public Function Hinhthang(ByVal z As Double, ByVal a As Double, ByVal b As Double, ByVal c As Double, ByVal d As Double) As Double

Dim t As Double Dim T1 As Double

t = 1 Else t = (z - a) / (b - a) End If If d - c = 0 Then T1 = 1 Else T1 = (d - z) / (d - c) End If Hinhthang = max(min2(t, 1, T1), 0) End Function

Public Function F1(ByVal colname As String, ByVal tblname As String) As Double

Dim sql As String

Dim RS As New ADODb.Recordset Dim t As Double

Dim T1 As Double Dim T2 As Double

sql = "select sum(" & colname & " ) as tong from " & tblname End Function

'Dua dieu kien vao de fuc vu cho tinh do ho tro - Thuc hien sau khi Joint Public Sub Dieukien(ByVal cap As Integer)

Dim sql As String

Dim RS As New ADODb.Recordset Dim rs1 As New ADODb.Recordset Dim rs2 As New ADODb.Recordset Dim rs3 As New ADODb.Recordset Dim rs4 As New ADODb.Recordset Dim rs5 As New ADODb.Recordset Dim i As Integer

Dim bien1 As String

sql = "select * from " & tblMO & " order by TID " clsConn.GetRs connQLPK, sql, RS

If cap = 1 Then

sql = "select * from tt_mo order by id " clsConn.GetRs connQLPK, sql, rs1

If Not (RS.EOF And RS.BOF And rs1.EOF And rs1.BOF) Then Do While Not RS.EOF

rs1.MoveFirst

Do While Not rs1.EOF

If RS.Fields("" & rs1!ma & "").Value >= rs1!nguong Then sql = "insert into dieukien(cot,TID,giatri)

values('" & rs1!ma & "'," & RS!TID & ",True)" Else

sql = "insert into dieukien(cot,TID,giatri) values('" & rs1!ma & "'," & RS!TID & ",False)"

End If clsConn.ExecQuery connQLPK, sql rs1.MoveNext Loop RS.MoveNext Loop End If rs1.Close

Else

Dim cot1 As String Dim cot2 As String

Dim value_cot1 As Boolean Dim value_cot2 As Boolean Dim value_cuoi As Boolean

sql = "select * from ck where cap = " & cap clsConn.GetRs connQLPK, sql, rs2

If Not (rs2.EOF And rs2.EOF) Then Do While Not rs2.EOF

RS.MoveFirst

Do While Not RS.EOF

sql = "select * from dieukien where (cot ='" & rs2!tt_truoc & "' or cot ='" & rs2!tt_mo & "' ) and TID=" & RS!TID clsConn.GetRs connQLPK, sql, rs3

If Not (rs3.EOF And rs3.BOF) Then If rs3.RecordCount = 2 Then rs3.MoveFirst

value_cot1 = rs3!giatri rs3.MoveNext

value_cot2 = rs3!giatri

value_cuoi = value_cot1 And value_cot2 sql = "insert into

dieukien(cot,TID,giatri,id_ck) values('" & rs2!TT & "'," & RS!TID & "," & value_cuoi & "," & rs2!id & ")"

clsConn.ExecQuery connQLPK, sql End If End If rs3.Close RS.MoveNext Loop rs2.MoveNext Loop End If rs2.Close End If End Sub

' Thay doi cau truc bang Mo de dua them cac truong du lieu la tap phobien Public Sub Alter_tbl_Mo(ByVal cap As Integer)

Dim sql As String

Dim RS As New ADODb.Recordset Dim rs1 As New ADODb.Recordset Dim rs2 As New ADODb.Recordset Dim temp As String

Dim cot As String Dim tt1 As String Dim tt2 As String

sql = "select * from Ck where cap = " & cap & " and thichhop =true order by id "

clsConn.GetRs connQLPK, sql, RS If Not (RS.EOF And RS.BOF) Then Do While Not RS.EOF

cot = RS!TT tt1 = RS!tt_mo

sql = "alter table MO add column [" & cot & "] Double " clsConn.ExecQuery connQLPK, sql

sql = "select * from Mo"

clsConn.GetRs connQLPK, sql, rs1 If Not (rs1.EOF And rs1.BOF) Then Do While Not rs1.EOF

sql = "select * from dieukien where cot='" & RS!TT & "' and TID =" & rs1!TID

clsConn.GetRs connQLPK, sql, rs2 If Not (rs2.EOF And rs2.BOF) Then If rs2!giatri Then

rs1.Fields("" & cot & "") = Result_F(id_F1, rs1.Fields("" & Trim(tt1) & ""), rs1.Fields("" & Trim(tt2) & ""))

Else

rs1.Fields("" & cot & "") = Result_F(id_F2, rs1.Fields("" & Trim(tt1) & ""), rs1.Fields("" & Trim(tt2) & ""))

End If End If rs2.Close rs1.Update rs1.MoveNext Loop End If rs1.Close RS.MoveNext Loop End If RS.Close End Sub

' Thuc hien noi cac tap lai voi nhau Public Sub Joint(ByVal cap As Integer) Dim sql As String

Dim sql2 As String

Dim RS As New ADODb.Recordset Dim rs1 As New ADODb.Recordset Dim rs2 As New ADODb.Recordset Dim rs3 As New ADODb.Recordset Dim rs4 As New ADODb.Recordset Dim rs5 As New ADODb.Recordset Dim id_ttmo As Long

Dim Ma_tt_mo As String Dim tt_goc As String Dim id_ck_goc As Long Dim id_ck2 As Long Dim id_ck_new As Long

sql = "select * from ck where cap =" & cap & " and phobien =true order by id"

clsConn.GetRs connQLPK, sql, RS If Not (RS.EOF And RS.BOF) Then Do While Not RS.EOF

tt_goc = RS!TT id_ck_goc = RS!id

sql = "select * from ck where cap = " & cap & " and id >" & id_ck_goc & " and phobien=true order by id"

clsConn.GetRs connQLPK, sql, rs1 If Not (rs1.EOF And rs1.BOF) Then

Do While Not rs1.EOF id_ck2 = rs1!id

id_ttmo = Check(id_ck_goc, id_ck2, cap) If id_ttmo > 0 Then

' Insert vao bang Ck

Ma_tt_mo = Ma_ttmo(id_ttmo) sql = "select * from ck" clsConn.GetRs connQLPK, sql, rs2 rs2.AddNew rs2!cap = cap + 1 rs2!ck_truoc = id_ck_goc rs2!tt_truoc = tt_goc

rs2!TT = tt_goc & "," & Trim(Ma_tt_mo) rs2!id_ttmo_tiep = id_ttmo

rs2!tt_mo = Ma_tt_mo rs2.Update

id_ck_new = rs2!id rs2.Close

' Insert vao bang Ck_ttmo

' sql = "select Ck_TTMo.id_tt_mo,tt_mo.ma from Ck_TTMo,tt_mo where tt_mo.id=ck_ttmo.id_tt_mo and Ck_TTMo.id_ck=" & rs!id sql = "select id_tt_mo from Ck_TTMo where id_ck=" & id_ck_goc

clsConn.GetRs connQLPK, sql, rs3 If Not (rs3.EOF And rs3.BOF) Then Do While Not rs3.EOF

'sql2 = "insert into

ck_ttmo(id_ck,id_tt_mo) values(" & rs2!id & "," & rs3!id_tt_mo & ")"

sql2 = "insert into ck_ttmo(id_ck,id_tt_mo) values("

sql2 = sql2 & id_ck_new & "," sql2 = sql2 & rs3!id_tt_mo & ")" clsConn.ExecQuery connQLPK, sql2 rs3.MoveNext

Loop End If rs3.Close

sql2 = "insert into ck_ttmo(id_ck,id_tt_mo) values("

sql2 = sql2 & id_ck_new & "," sql2 = sql2 & id_ttmo & ")" clsConn.ExecQuery connQLPK, sql2 End If rs1.MoveNext Loop End If rs1.Close RS.MoveNext Loop End If RS.Close End Sub

' Kiem tra dieu kien de tap1 noi voi tap2

Public Function Check(id_tap1 As Long, id_tap2 As Long, cap As Integer) As Long

Dim rs1 As New ADODb.Recordset Dim rs2 As New ADODb.Recordset Dim rs3 As New ADODb.Recordset Dim i As Integer, j As Integer Dim Result As Boolean

Dim find As Boolean Dim id_tt_mo As Long Result = False id_tt_mo = 0 find = False

'sql = "select id_tt_mo from ck_ttmo where id_ck=" & id_tap1 & " order by id_tt_mo"

sql = "select ck_ttmo.id_tt_mo,tt_mo.ttgoc from ck_ttmo,tt_mo where tt_mo.id = ck_ttmo.id_tt_mo and ck_ttmo.id_ck=" & id_tap1 & " order by id_tt_mo"

clsConn.GetRs connQLPK, sql, RS

sql = "select ck_ttmo.id_tt_mo,tt_mo.ttgoc from ck_ttmo,tt_mo where tt_mo.id = ck_ttmo.id_tt_mo and ck_ttmo.id_ck=" & id_tap2 & " order by id_tt_mo"

clsConn.GetRs connQLPK, sql, rs1

If Not (RS.EOF And RS.BOF And rs1.EOF And rs1.BOF) Then

If (RS.RecordCount = rs1.RecordCount) And (RS.RecordCount = cap) Then

i = 1

RS.MoveFirst rs1.MoveFirst

For i = 1 To cap - 1

If RS!id_tt_mo = rs1!id_tt_mo Then RS.MoveNext rs1.MoveNext Result = True Else Exit For Result = False End If Next If i = cap Then

' Kiem tra cung thuoc tinh goc khong If (RS!ttgoc = rs1!ttgoc) Then

Result = False

' Kiem tra xem q.Ik-1 <p.Ik-1

ElseIf RS!id_tt_mo < rs1!id_tt_mo Then ' Kiem tra co ban ghi nao trung ko

sql = "select * from ck where cap=" & cap + 1 & " and ck_truoc = " & id_tap1

clsConn.GetRs connQLPK, sql, rs2 If Not (rs2.EOF And rs2.BOF) Then

' Da co ban ghi truoc cung thuoc tinh goc Do While Not rs2.EOF

sql = "select id_tt_mo from ck_ttmo where id_ck = " & rs2!id & " and id_tt_mo not in (select id_tt_mo from ck_ttmo where id_ck = " & id_tap1 & ")"

clsConn.GetRs connQLPK, sql, rs3 If Not (rs3.EOF And rs3.BOF) Then

If rs3!id_tt_mo = rs1!id_tt_mo Then find = True

End If End If rs3.Close

If Not find Then rs2.MoveNext Else

rs2.MoveLast End If

Loop

If Not find Then

id_tt_mo = rs1!id_tt_mo Result = True End If Else id_tt_mo = rs1!id_tt_mo Result = True End If rs2.Close End If Else Result = False End If End If End If RS.Close rs1.Close Check = id_tt_mo End Function

' Tinh do ho tro va xem no pho bien hay ko Public Sub Do_HT(ByVal cap As Integer) Dim sql As String

Dim RS As New ADODb.Recordset Dim rs1 As New ADODb.Recordset Dim rs2 As New ADODb.Recordset Dim dohotro As Double

sql = "select * from ck where cap = " & cap & " and thichhop =true" clsConn.GetRs connQLPK, sql, RS

If Not (RS.EOF And RS.BOF) Then Do While Not RS.EOF

sql = "select sum([" & RS!TT & "]) as AA from Mo" clsConn.GetRs connQLPK, sql, rs1

If Not (rs1.EOF And rs1.BOF) Then dohotro = rs1!AA / RecNum RS!dohotro = dohotro

RS!phobien = IIf(dohotro >= fminsupp, True, False) End If rs1.Close RS.Update RS.MoveNext Loop End If RS.Close End Sub

Public Function Ma_ttmo(id_ttmo As Long) As String Dim sql As String

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Vấn đề về luật kết hợp mờ và các toán tử có ngưỡng trong khai phá dữ liệu Luận văn ThS. Công nghệ thông tin 1 01 10 (Trang 49)