Latest News

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

Thứ Bảy, 20 tháng 2, 2010 , Posted by Thiên Thần CNTT at 06:47

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)
}

Currently have 15 nhận xét:

  1. Unknown says:

    Bạn có thể cho mình xin project này của bạn được k? Bài tập của mình có phần cần đến bài của bạn. Thực sự mong reply của bạn : my.cherryx8@gmail.com

  1. project của nó mình viết lung tung lắm, tại thường theo chiều suy nghĩ của mình, nên không biết bạn có hiểu không. Mình có đưa thuật giải lên đó. Bạn thử viết thử xem được không. Ngoài ra, bạn có thể lên forum của mình để đóng góp thêm ý kiến nhé: http://thuhuong.hot4um.com/forum-f4/topic-t76.htm hoặc http://thienthancntt.tk/. Cám ơn bạn đã ghé thăm blog nha. Thân!

  1. Kinhlt says:

    Mình cũng đang gặp phải vấn đề với giải thuật ID3 này.

    Đối tác của công ty mình đang học cao học và học môn Trí tuệ nhân tạo này. Để quan hệ khách hàng công ty mình đã nhận làm hộ bài tập của chị ấy liên quan đến ID3. Do thời gian rất gấp và yêu cầu là có GUI và vẽ ra cây quyết định nên mình muốn xin project của bạn làm về phần này.

    Mail của mình là Kinh_torai89@yahoo.com.vn

    Rất cảm ơn bạn nhiều :).

  1. mình chỉ mới viết ở dạng console trên ngôn ngữ CSharp. chưa dùng ở dạng GUI, nếu bạn đồng ý thì mình gửi cho, còn nếu bạn thấy không được thì thôi. Mong bạn thông cảm

  1. Chào Thiên Thần CNTT. Bạn có thể gửi mình project thuật toán ID3 này không?
    Mình cũng đang nghiên cứu về nó, mình khônquan trọng lắm vấn đề làm trên Console hay Form, quan trọng là ý tưởng thiết kế và cài đặt.
    Mail mình là: nguyenhung1121990@gmail.com
    Cám ơn b!

  1. Nặc danh says:

    Hi.Bạn ơi bạn có thể gửi cho mình xin project thuật toán ID3 của bạn được không?mình đang phải tìm hiểu về thuật toán này.
    Mail:hoahong.hsl@gmail.com
    Cảm ơn bạn nhiều nhé!

  1. Nặc danh says:

    Bạn ơi, mình đang làm chuyên đề về thuật toán này, bạn có thể gửi cho mình project của thuật toán ID3 được ko? Mình đang rất cần, mong bạn có thể giúp mình. Mail của mình là nukhuat.cn4@gmail.com

  1. bexinh says:

    mình cũng đang tìm hiểu về thuật toán id3 này.mình rất cám ơn nếu bạn share cho mình cả project..mail mình là huyenkute124@gmail.com
    rất mong sớm nhận đc hồi âm của bạn..thks bạn nhiều nhá!

  1. quynh thom says:

    ui.bạn làm tài thật đấy.mình cũng đang tìm hiểu về phần này.bạn làm ơn có thể gủi cho mình project của cả bài ko?thank bạn rất nhiều.mail mình là:hoaquynhthom.037@gmail.com

  1. quynh thom says:

    mình cũng đang nghiên cứu phần này.bạn làm ơn có thể gửi cho mình toàn project ko?thank bạn rất nhiều.mail mình là: hoaquynhthom.037@gmail.com

  1. Unknown says:

    Bạn ơi mình đang rất cần thuật toán này để làm bài tập lớn bạn có thể cho mình xin project không.mail của mình là hnhung.ioit@gmail.com. Cám ơn bạn nhiều

  1. News says:

    Chào bạn Thiên Thần CNTT, mình đang tìm hiểu về cây quyết định và thuật toán ID3, bạn có thể gửi cho mình project không? Để mình có thể hiểu rõ hơn về nó. Cám ơn bạn trước nhá!Mail of mình là:kettrinh@gmail.com.

  1. Unknown says:

    Chào anh Thiên Thần CNTT
    a còn project này chạy trên console chứ? Chắc a còn lưu giữ, a có thể cho e tham khảo được không
    mail e là: tainguyenthe91@gmail.com

  1. Nặc danh says:

    Anh ơi có thể cho mình xin project với ạ. mail em là : tra.teenx.xanh350@gmail.com

Leave a Reply

Đăng nhận xét

Nếu có nhận xét gì, hãy ghi vào bên dưới nhé. Mình sẽ trả lời trong thời gian sớm nhất cho bạn. Cám ơn bạn đã thăm blog của mình.