Thuật toán lặp để tìm luật phân lớp cho từng phân hoạch của tập dữ liệu mẫu. Sau khi xác định được luật, ILA loại bỏ các mẫu liên quan khỏi tập mẫu và thêm luật mới này vào tập luật. Kết quả có được là một danh sách có thứ tự các luật.
Trang 1Mục lục
I.Thuật toán tìm luật phân lớp ILA 2
1.Thuật toán ILA: 2
2 Nhận xét: 3
II Cài đặt thuật toán (minh họa bằng C#) 4
1.Cấu trúc dữ liệu: 5
1.1 Record: 5
1.2 Tập các record của Table: 5
1.3 Tập thuộc tính của Table: 5
1.4 Tập các luật thu được: 5
2.Cài đặt: 5
2.1Thuật toán tách Table thành hai Table con theo giá trị của thuộc tính kết quả: 5
2.2Thuật toán tìm các tổ hợp j phần tử từ tập hợp n thuộc tính của Table: 6
2.3Thuật toán tìm tập giá trị của một tổ hợp thuộc tính: 6
2.4Thuật toán tìm tổ hợp lớn nhất: 7
2.5Thuật toán ILA: 8
III Các Form của chương trình với tập dữ liệu test thử 9
Main Form: 10
Step 1: 12
Step 2: 13
Step 3: 14
Step 4: 15
Step 5: 16
Step 6: 17
Step 7: 18
Step 8: 19
Step 9: 20
IV Nhận xét và kết luận 21
1 Ưu điểm: 21
2 Khuyết điểm: 21
V Hướng phát triển 22
VI Tài liệu tham khảo 22
Trang 2I.Thuật toán tìm luật phân lớp ILA
1.Thuật toán ILA:
Thuật toán lặp để tìm luật phân lớp cho từng phân hoạch của tập dữ liệu mẫu.Sau khi xác định được luật, ILA loại bỏ các mẫu liên quan khỏi tập mẫu và thêm luật mới này vào tập luật
Kết quả có được là một danh sách có thứ tự các luật
Tổ hợp lớn nhất.
Bước 5:
Nếu (số lần xuất hiện của tập giá trị của Tổ hợp lớn nhất) = 0
Trang 3 Theo bảng này thì Tổ hợp lớn nhất luôn có giá trị bằng 0, mà theo
thuật toán thì nếu tổ hợp lớn nhất có giá trị bằng 0 -> tăng số lượng phần
tử của tổ hợp lên 1, nghĩa là j = 2, như vậy thì lại vượt quá (số thuộc tính của bảng–1)=1 Và nếu ta không tăng j và trở lại Bước 3 mà tiếp tục thực hiện Bước 6 và Bước 7 thì ta sẽ thu được các luật giống y như bảng quyết định ban đầu:
Trang 4• R1: If A then Y
• R2: If A then N
Hai luật này không mâu thuẫn nhưng nó là một kết quả vô nghĩa, không
có giá trị gì cả vì khi người ta có được A thì cũng không biết được kết quả là Y hay N
Như vậy thì để tránh mất thời gian thực hiện thuật toán một cách vô ích, chúng ta phải “đánh giá” được tập các giá trị đầu vào để quyết định có hay không thực hiện thuật toán Đối với bảng quyết định có ít thuộc tính
và ít số record thì việc này còn khả thi, còn nhiều thì ta không thể “đánh giá” được và như vậy thì ta phải cho thực hiện thuật toán
Tuy nhiên ta có nhận xét rằng nếu ở tất cả các tổ hợp có số lượng thuộc tính < (số lượng thuộc tính của bảng – 1) mà ta đều thu được tổ hợp lớn nhất có giá trị bằng 0 thì kết luật tập luật = rỗng, không phải thực hiện Bước 6 và Bước 7 để thêm những luật vô nghĩa
II Cài đặt thuật toán (minh họa bằng C#)
Trang 51.Cấu trúc dữ liệu:
1.1 Record:
publicclass MyListViewItem
{
private ArrayList fields;
privateint cardinality;
}
1.2 Tập các record của Table:
publicclass ListViewItemSet
{
private ArrayList items;
privateint cardinality;
}
private ListViewItemSet items;
public ListViewItemSet item1;
public ListViewItemSet item2;
1.3 Tập thuộc tính của Table:
private MyListViewItem columns;
private MyListViewItem colSet; //không kể thuộc tính kết quả
1.4 Tập các luật thu được:
public ListViewItemSet rules;
Trang 6int last = this columns.Cardinality - 1;
for ( int i = 0; i < this items.Cardinality; i++) {
//Add this.item1, this.item2
if ( this items[i][last].Equals( this items[0][last]))
this item1.AddListViewItem( this items[i]);
else
this item2.AddListViewItem( this items[i]);
}//end of for this oldItem1.CopyOf( this item1);
}//end of function
2.2Thuật toán tìm các tổ hợp j phần tử từ tập hợp n thuộc tính của Table:
private ListViewItemSet timtaptohop(MyListViewItem cols, int count) {
ListViewItemSet result = new ListViewItemSet();
ListViewItemSet temp = new ListViewItemSet();
for (j = i; j < (i+count-1); j++)
item.AddField(cols[j]);
temp.AddListViewItem(item);
} }//end of for i while (x < temp.Cardinality) {
for (k = (x + count -1); k < cols.Cardinality; k++) {
MyListViewItem temp1 = new MyListViewItem();
}//end of while return result;
}//end of function
2.3Thuật toán tìm tập giá trị của một tổ hợp thuộc tính:
private ListViewItemSet timtapgiatri(MyListViewItem tohop,
Trang 7ListViewItemSet current) {
int j;
int id;
ListViewItemSet result = new ListViewItemSet();
for ( int i = 0; i < current.Cardinality; i++) {
MyListViewItem item = new MyListViewItem();
for (j = 0; j < tohop.Cardinality; j++) {
id = this colSet.IndexOf(tohop[j]);
item.AddField(current[i][id]);
} result.AddListViewItem(item);
}//end of for i return result;
}//end of function
2.4Thuật toán tìm tổ hợp lớn nhất:
private MyListViewItem timtohoplonnhat(MyListViewItem tohop,
ListViewItemSet tapgiatri, ListViewItemSet current, ListViewItemSet other) {
MyListViewItem result = new MyListViewItem();
ListViewItemSet temp = new ListViewItemSet();
tapgiatri[i].AddField((0).ToString());
} else {
count = 0;
for (j = 0; j < current.Cardinality; j++) {
for (k = 0; k < tohop.Cardinality; k++) {
id = this colSet.IndexOf(tohop[k]);
if (current[j][id]
.Equals(tapgiatri[i][k]) == false ) break ;
}//end of for k
if (k == tohop.Cardinality)
count++;
Trang 8}//end of for j tapgiatri[i].AddField(count.ToString());
}//end of else temp.AddListViewItem(tapgiatri[i]);
}//end of for i result = temp[0];
for (i = 1; i < temp.Cardinality; i++)
if (Convert.ToInt32(result[tohop.Cardinality].Name) <
Convert.ToInt32(temp[i][tohop.Cardinality].Name)) result = temp[i];
return result;
}//end of function
2.5Thuật toán ILA:
public void Algorithm(ListViewItemSet currentSet,
ListViewItemSet otherSet) {
ListViewItemSet taptohop = new ListViewItemSet();
ListViewItemSet taptohoplonnhat = new ListViewItemSet();
//tren currentSet,chia danh sach this.colSet thanh cac to hop co
(this.tohop)thuoc tinh
taptohop = this timtaptohop( this colSet, this tohop);
for (i = 0 ; i < taptohop.Cardinality; i++) {
ListViewItemSet tapgiatri = new ListViewItemSet();
tapgiatri = this timtapgiatri(taptohop[i],currentSet); MyListViewItem tohoplonnhat = new MyListViewItem();
tohoplonnhat = this timtohoplonnhat(taptohop[i],
tapgiatri,currentSet,otherSet);
taptohoplonnhat.AddListViewItem(tohoplonnhat);
}//end of for i max = Convert.ToInt32(taptohoplonnhat[0][ this tohop].Name);
Trang 9taptohop[chisomax] di kem voi taptohoplonnhat[chisomax]
ListViewItemSet tempSet = new ListViewItemSet();
tempSet.CopyOf(currentSet);
for (i = 0; i < currentSet.Cardinality; i++) {
for (j = 0; j < taptohop[chisomax].Cardinality; j++) {
id = this colSet.IndexOf(taptohop[chisomax][j]);
if (currentSet[i][id].Equals
(taptohoplonnhat[chisomax][j]) == false ) break ;
//them luat moi vao this.rules,dua vao taptohop[max] va
rule.AddField(taptohoplonnhat[chisomax][j]);
if (j < (taptohop[chisomax].Cardinality-1)) {
j++;
id = this colSet
.IndexOf(taptohop[chisomax][j]);
} }
Trang 12Step 1:
Trang 13Step 2:
Trang 14Step 3:
Trang 15Step 4:
Trang 16Step 5:
Trang 17Step 6:
Trang 18Step 7:
Trang 19Step 8:
Trang 20R4: Không có bọt biển -> Không có sóng lớn
R5: Biển dao động trung bình và nước rút trung bình -> Không có
sóng lớn
Trang 21IV Nhận xét và kết luận
1 Ưu điểm:
Chương trình có giao diện tiện dụng để tương tác với người sử dụng
Số field của bảng quyết định (Table) được nhập và sửa đổi động khi thực hiện chương trình
Dựa vào đó, tập record của Table cũng được nhập động khi thực hiện chương trình
Chương trình hiển thị cho người sử dụng thấy kết quả của tất cả các bước trong thuật toán giúp cho người sử dụng tiện theo dõi quá trình đi đến tập luật kết quả cũng như có thể kiểm tra tính đúng đắn của thuật toán
Hiển thị các luật thu được dưới dạng bảng là cách hiển thị rõ ràng và ít bị nhầm lẫn! (theo thuật toán, các luật có cùng vế phải sẽ nằm cận nhau)
Vì ngôn ngữ lập trình sử dụng (C#) có hỗ trợ Unicode nên các thuộc tính cũng như giá trị của các record có thể nhập bằng tiếng việt
ưu hơn để sử dụng
Trang 22V Hướng phát triển
Tiếp tục cài đặt thuật toán học dựa trên cây định danh để có cơ sở chọn lựa thuật toán tốt, sử dụng để tìm luật phân lớp cho bảng quyết định có số lượng thuộc tính và record lớn
VI Tài liệu tham khảo
[1] Chuyên đề Công nghệ tri thức và ứng dụng – GS TSKH Hoàng Kiếm
[2] Giải một bài toán trên máy tính như thế nào – GS TSKH Hoàng Kiếm
THE