Cài đặt Thuật giải Cây ID3

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Cài đặt Thuật giải Cây ID3

Bài gửi by nth on 21/02/10, 10:09 am

woa.. thế là gần 1 tuần mất ăn mất ngủ, không đi chơi tết (hix).. mình đã cài xong thuật giải ID3, nhưng mới chỉ là 1 số bước đầu minh họa cho các ví dụ thôi. Với 1 ví dụ nhỏ thì thuật giải chạy good, nhưng mình chưa thử với 1 lượng dữ liệu lớn. Nhất là mình demo bằng tay, chứ chưa kết hợp lưu trữ dữ liệu trên sql (hix, mới bước đầu thôi mà. Chặng tới còn gian nan lém)

Dưới đây là code của cây ID3, hẳn nhiên mình chỉ đưa code chính, còn các code nhỏ thì mọi ng xem rồi tự viết nha, hoặc là mình sẽ đưa sau. Vì chủ yếu là mình đưa code minh họa thuật giải ID3, chứ mình không đưa nguyên bài.

Có phần cũng chưa hay lắm, là mình dùng độ entropy. Thực tế hum trước nhóm mình đã thảo luận là sẽ dùng gini. Thực ra, mình cũng chưa test kĩ vấn đề này, nên tạm thời dùng chuẩn enropy đã, sau đó rồi đổi sang gini sau.

Code (hàm chính)
private TreeNode CayCon(DataTable dulieu, string thuoctinhMuctieu, 
Attribute[] thuoctinh)
{
if (dulieuYes(dulieu, thuoctinhMuctieu) == true)
return new TreeNode(new Attribute(true));

if (dulieuNo(dulieu, thuoctinhMuctieu) == true)
return new TreeNode(new Attribute(false));

if (thuoctinh.Length == 0)
return new TreeNode(new Attribute(LayGTThongThuong(dulieu,
thuoctinhMuctieu)));

mTong = dulieu.Rows.Count;
mThuocTinhMucTieu = thuoctinhMuctieu;
mTongTichCuc = TinhTongTichCuc(dulieu);

mEntropy = TinhEntropy(mTongTichCuc, mTong - mTongTichCuc);

Attribute ttTotnhat = ThuoctinhTotNhat(dulieu, thuoctinh);

TreeNode goc = new TreeNode(ttTotnhat);

DataTable dlieu = dulieu.Clone();

foreach (string gtri in ttTotnhat.giatri)
{
dlieu.Rows.Clear();

DataRow[] dg = dulieu.Select(ttTotnhat.TenThuocTinh + " = "
+ "'" + gtri + "'");

foreach (DataRow r in dg)
{
dlieu.Rows.Add(r.ItemArray);
}
ArrayList mthuoctinh = new ArrayList(thuoctinh.Length - 1);
for (int i = 0; i < thuoctinh.Length; i++)
{
if (thuoctinh[i].TenThuocTinh != ttTotnhat.TenThuocTinh)
mthuoctinh.Add(thuoctinh[i]);
}

if (dlieu.Rows.Count == 0)
{
return new TreeNode(new Attribute(LayGTThongThuong(dlieu,
thuoctinhMuctieu)));
}
else
{
TreeID3 tId3 = new TreeID3();
TreeNode NodeCon = tId3.GanCay(dlieu, thuoctinhMuctieu,
(Attribute[])mthuoctinh.ToArray(typeof(Attribute)));
goc.AddTreeNode(NodeCon, gtri);
}
}
return goc;
}

public TreeNode GanCay(DataTable dulieu, string thuoctinhMuctieu,
Attribute[] thuoctinh)
{
mDuLieu = dulieu;
return CayCon(mDuLieu, thuoctinhMuctieu, thuoctinh);
}

ngoài ra, còn có thêm các hàm hỗ trợ sau:
public class Attribute
{
public Attribute(string ten, string[] giatri)
public Attribute(object nhan)
public string TenThuocTinh
public string[] giatri
public bool GiaTriHopLe(string gtri)
public int GiaTriHienTai(string gtri)
public override string ToString()
}

public class TreeNode
{
public TreeNode(Attribute thuoctinh)
public void AddTreeNode(TreeNode tn,
string tengiatri)
public int TongNodeCon
public TreeNode LayCon(int hientai)
public Attribute thuoctinh
public TreeNode LayNhanhCon(string nhanhCon)
}

public class TreeID3
{
private int TinhTongTichCuc(DataTable dulieu)
private double TinhEntropy(int yes, int no)
private void LayGiaTriThuocTinh(DataTable dulieu, Attribute thuoctinh,
string gtri, out int yes, out int no)
private double GTDatDuoc(DataTable dulieu,
Attribute thuoctinh)
private Attribute ThuoctinhTotNhat(DataTable dulieu,
Attribute[] ttinh)
private bool dulieuYes(DataTable dulieu, string thuoctinhMuctieu)
private bool dulieuNo(DataTable dulieu, string thuoctinhMuctieu)
private ArrayList DulieuKhacBiet(DataTable dulieu,
string thuoctinhMuctieu)
private object LayGTThongThuong(DataTable dulieu,
string thuoctinhMuctieu)
}

===== Thành viên Forum Thien Than CNTT ====
Nothing!

(~~/)
(~'.'~)
(_(__)~~

nth
Admin
Admin

Tổng số bài gửi : 550
Số điểm : 1113
Số lần được cám ơn : 33
Ngày đến diễn đàn: : 01/08/2009
Tuổi : 28
Đến từ : Thiên Đường

Xem lý lịch thành viên http://thuhuong.hot4um.com

Về Đầu Trang Go down

Re: Cài đặt Thuật giải Cây ID3

Bài gửi by nth on 21/02/10, 10:33 am

Đây là bản debug, mọi người xem thử nha. với bộ test dữ liệu Đi Bơi là:

bầu trời, nhiệt độ, độ ẩm, gió, kết quả

nắng, cao, cao, không, có
nắng, cao, cao, có, không
mây, cao, cao, không, có
mưa, cao, cao, không, có
mưa, thấp, bình thường, không, có
mưa, thấp, bình thường, có, không
mây, thấp, bình thường, có, có
nắng, trung bình, cao, không, không
nắng, thấp, bình thường, không, có
mưa, trung bình, bình thường, không, có
nắng, trung bình, bình thường, không, có
mây, trung bình, cao, có, không
mây, cao, bình thường, không, có
mưa, trung bình, cao, có, không

và đây là bản debug:
http://www.mediafire.com/?iamqyzmtklt
nó chỉ có tác dụng tham khảo thôi ^^

===== Thành viên Forum Thien Than CNTT ====
Nothing!

(~~/)
(~'.'~)
(_(__)~~

nth
Admin
Admin

Tổng số bài gửi : 550
Số điểm : 1113
Số lần được cám ơn : 33
Ngày đến diễn đàn: : 01/08/2009
Tuổi : 28
Đến từ : Thiên Đường

Xem lý lịch thành viên http://thuhuong.hot4um.com

Về Đầu Trang Go down

nhan xet cai đặt

Bài gửi by minhlap on 23/02/10, 09:21 am

khi tính entropy, duyệt dữ liệu như vậy là rất dở, nên chuyển sang dang truy vấn để tính, những gì liên quan đến dữ liệu thì để cho SQL làm.

minhlap
Member
Member

Tổng số bài gửi : 7
Số điểm : 24
Số lần được cám ơn : 5
Ngày đến diễn đàn: : 11/11/2009

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Cài đặt Thuật giải Cây ID3

Bài gửi by trangcntt2010 on 01/09/10, 11:23 pm

Ban oi minh dang co bai tap tim hieu ve thuat toan nay. Minh rat mong duoc su giup do cua cac ban. Neu co the ban gui code thuat toan ID3 ve cho minh theo dia chi huyentrangcntt@gmail.com cam on ban rat la nhieu. No se giup ich cho phan bai tap cua minh rat la nhieu mong cac ban giup minh.

trangcntt2010
New Member
New Member

Tổng số bài gửi : 2
Số điểm : 2
Số lần được cám ơn : 0
Ngày đến diễn đàn: : 01/09/2010

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Cài đặt Thuật giải Cây ID3

Bài gửi by trangcntt2010 on 01/09/10, 11:24 pm

Minh se tim hieu ve thuat toan nay. Chac rang se co rat nhieu van de minh thac mac. Rat mong cac su phu chi gium nha

trangcntt2010
New Member
New Member

Tổng số bài gửi : 2
Số điểm : 2
Số lần được cám ơn : 0
Ngày đến diễn đàn: : 01/09/2010

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Cài đặt Thuật giải Cây ID3

Bài gửi by minhlap on 02/09/10, 07:43 pm

Chào bạn, ID3 chỉ là một trong các thuật giải của cây quyết định, nó có tên là ID3 vì nó sử dụng độ entropy, code cài đặt trên chỉ chạy demo thôi (áp dụng cho dữ liệu nhỏ), không thể áp dụng cho file dữ liệu lớn, có vấn đề j thì bạn gui qua minhlapb@gmail.com, thân chào.

minhlap
Member
Member

Tổng số bài gửi : 7
Số điểm : 24
Số lần được cám ơn : 5
Ngày đến diễn đàn: : 11/11/2009

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Cài đặt Thuật giải Cây ID3

Bài gửi by Sponsored content Today at 10:34 pm


Sponsored content


Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết