Yapay Zeka-Karar Ağaçları(Decision Trees)

turkish_adanali0142

Uzman üye
17 May 2009
1,112
0
Adana
Kod Rekürsif olarak yazılmıştır.. dileyen kodu deneyebilir.

Kod:
using System;
using System.Collections.Generic;
using  System.ComponentModel;
using System.Data;
using System.Drawing;
using  System.Linq;
using System.Text;
using System.Windows.Forms;
using  System.Collections;
namespace kararagac
{
    public partial  class Form1 : Form
    {
        agac bas,yeni;
        int x,  y, ylb, c, kac ;
        ComboBox[] cb;
        ArrayList[] prmtr;
        
        public class agac
        {
            public  string ad;
            public int pr;
            public int cs;
            public agac[] cocuk;
            public agac()
             {
                this.cs = 0;
                this.cocuk =  new agac[5];
            }                                  
         }

        public agac ekle_agac(int eb,agac son)
        {
            int i;
            agac cocukek;
            yeni =  new agac();
            yeni.pr = eb;
            yeni.ad=  cb[eb].Name;
            yeni.cs = cb[eb].Items.Count;
             if (son == null)
            {
                bas = yeni;
                 son = bas;
            }
            else
             {
                son.cs =1;
                son.cocuk[0] =  yeni;
                son = son.cocuk[0];
            }
             for (i = 0; i < son.cs; i++)
            {
                 cocukek=new agac();
                cocukek.pr=eb;
                 cocukek.ad=cb[eb].Items[i].ToString();
                cocukek.cs =  0;
                son.cocuk[i] = cocukek;

            }
             return son;
        }
        public agac  ekle_agac(string eh, agac son)
        {
            yeni=new  agac();
            yeni.ad = eh;
            yeni.pr = -1;
             yeni.cs = 0;
            if (son == null)
            {
                bas = yeni;
                son = bas;
             }
            else
            {
                son.cs = 1;
                son.cocuk[0] = yeni;
                son =  son.cocuk[0];
            }
            return son;
        }

        public Form1()
        {
             InitializeComponent();
            x = -100;
            y = 50;
            ylb = 300;
            c = -1;

        }
         public int agacgoster(agac node,int xagac, int yagac,double b)
         {
            int ynxagac;
            for (int i = 0; i <  node.cs; i++)
            {

                Label lb = new  Label();
                lb.Text = node.cocuk[i].ad;
                 lb.Size = new Size(70, 20);
                if (node.cs == 1)
                     ynxagac = xagac;
                else
                 {
                    if (i == node.cs / 2 )
                     {
                        if( node.cs % 2 == 0)
                             ynxagac = xagac + Convert.ToInt32(400 / b);
                         else
                            ynxagac = xagac;
                     }
                    else
                    {
                        if (i < (node.cs / 2) )
                             ynxagac = xagac -  (i+1) * Convert.ToInt32( 400 / b);
                         else
                            ynxagac = xagac +  (i - (node.cs / 2))  * Convert.ToInt32( 400 / b);
                     
                    }
                }
                 lb.******** = new Point(ynxagac, yagac);
                lb.Font =  new Font("Times New Roman", 12f, FontStyle.Bold);
                 lb.BackColor = Color.ForestGreen;
                lb.ForeColor =  Color.WhiteSmoke;
                this.Controls.Add(lb);
                 agacgoster(node.cocuk[i], ynxagac, yagac + 30,b+0.8);
             }
            return 0;
        }

        private ****  button1_Click(object sender, EventArgs e)
        {
             ArrayList gunler = new ArrayList();
            for (int i = 0; i  < prmtr[kac].Count; i++)
                gunler.Add(i);
             karar(null, gunler);
            gstrBtn.Visible = true;
             tstBtn.Visible = true;
            egtbtn.Visible = false;
        }

        private **** kbtn_Click(object sender,  EventArgs e)
        {
            kac =  Convert.ToInt32(ktxt.Text);
            hzrBtn.Visible = false; 
             plbl.Visible = true;
            prmtxt.Visible = true;
            eklebtn.Visible = true;
            klbl.Visible = false;
            ktxt.Visible = false;
            kbtn.Visible = false;             
            cb = new ComboBox[kac];
            prmtr =  new ArrayList[kac + 1];
            for (int i = 0; i < kac + 1;  i++)
            {
                prmtr[i]=new ArrayList();
             }
        }

        private ****  eklebtn_Click(object sender, EventArgs e)
        {

             if (prmtxt.Text != "")
            {
                c++;
                 plbl.Visible = false;
                prmtxt.Visible =  false;
                eklebtn.Visible = false;
                 drekbtn.Visible = true;
                drmtxt.Visible = true;
                 dlbl.Visible = true;
                tmbtn.Visible =  true;
                x = x + 150;
                Label lb = new  Label();
                lb.Text = prmtxt.Text.ToUpper();
                 lb.Size = new Size(125, 20);
                lb.******** =  new Point(x, 10);
                lb.Font = new Font("Times New  Roman", 12f, FontStyle.Bold);
                lb.BackColor =  Color.Transparent;
                lb.ForeColor = Color.DarkGreen;
                this.Controls.Add(lb);
                cb[c] = new  ComboBox();
                cb[c].Name = prmtxt.Text;
                 cb[c].Size = new Size(125, 30);
                cb[c].******** =  new Point(x, 40);
                this.Controls.Add(cb[c]);
             }

        }

        private ****  drekbtn_Click(object sender, EventArgs e)
        {
            if  (drmtxt.Text != "")
            {
                 cb[c].Items.Add(drmtxt.Text);
                drmtxt.Text = "";
             }
        }

        private **** tmbtn_Click(object  sender, EventArgs e)
        {
            if (kac > c+1 )
             {
                plbl.Visible = true;
                 prmtxt.Visible = true;
                eklebtn.Visible = true;
                 prmtxt.Text = "";
            }
            else
             {

                plbl.Visible = false;
                 prmtxt.Visible = false;
                eklebtn.Visible = false;
                egtbtn.Visible = true;
            }
             drekbtn.Visible = false;
            drmtxt.Visible = false;
             dlbl.Visible = false;
            tmbtn.Visible = false;
         }

        private **** egtbtn_Click(object sender,  EventArgs e)
        {
            int i;
            String  egt = null ;

            for (i = 0; i < kac; i++)
             {
                prmtr[i].Add(cb[i].Text);
                 egt = egt +" , "+ cb[i].Text;
            }
             prmtr[kac].Add (cbcks.Text);
            egt = egt +" , "+  cbcks.Text;
            Label lb = new Label();
             lb.Text = egt;
            lb.Size = new Size(500, 20);
             lb.******** = new Point(50, ylb);
            lb.ForeColor =  Color.DarkSalmon;
            lb.BackColor = Color.Transparent;
             lb.Font = new Font("Times New Roman", 12f, FontStyle.Bold);
            this.Controls.Add(lb);
            ylb = ylb + 20;
             krrBtn.Visible = true;
        }
        public double  Entropy(int p, ArrayList gunler)
        {
            int i, j,  k, nt;
            double snc =0.0;
            ArrayList  nitelik=new ArrayList();
            ArrayList ntlsy=new ArrayList();
            ArrayList ygun=new ArrayList();
            double topn =  gunler.Count;
            for (i = 0; i < topn; i++)
             {
                k = Convert.ToInt32(gunler[i]);
                 if (!nitelik.Contains(prmtr[p][k].ToString()))
                {
                    nitelik.Add(prmtr[p][k].ToString());
                     ntlsy.Add(1);
                }
                else
                 {
                    nt =  nitelik.IndexOf(prmtr[p][k].ToString());
                     ntlsy[nt] = Convert.ToInt32(ntlsy[nt])+1;
                }
             }
            for (i = 0; i <nitelik.Count; i++)
             {
                for (j = 0; j < topn; j++)
                 {
                    k = Convert.ToInt32(gunler[j]);
                     if (String.Compare(prmtr[p][k].ToString(),  nitelik[i].ToString()) == 0)
                    {
                         ygun.Add(k);
                    }
                }
                 snc = snc + (double)(Convert.ToInt32(ntlsy[i]) / topn )*  Dentropy(ygun);
                ygun.Clear();
               
             }
            return snc;
        }
        public  double Dentropy(ArrayList gunler)
        {
            int i,k =  0, e = 0, h = 0;
            double r,t;
            for (i = 0; i  < gunler.Count; i++)
            {
                k =  Convert.ToInt32(gunler[i]);
                if  (String.Compare(prmtr[kac][k].ToString() ,"evet")==0)
                     e++;
                else
                    h++;
             }
            t = e + h;
            r = 0.0;
             if(e/t!=0)
                 r = -(e / t) * Math.Log((e / t), 2.0);
            if(h /t!=0)
                r = r- (h / t) * Math.Log((h /  t), 2.0);

            return r;
        }

         public int karar(agac son, ArrayList gunler)
        {
             double D;
            double[] gain;
            int k,p,i,eb=0;
            ArrayList ygun=new ArrayList();
            D =  Dentropy(gunler);
            if (D == 0)
            {
                 k = Convert.ToInt32(gunler[0]);

                 ekle_agac(prmtr[kac][k].ToString(), son);
                return 0;
            }
            gain=new double[kac];
            for (i  = 0; i < kac; i++)
            {
                 gain[i]=D-Entropy(i,gunler);
                if (gain[i] >  gain[eb])
                    eb = i;
            }
             son = ekle_agac(eb, son);
            p=son.pr;
            for  (i = 0; i < son.cs; i++)
            {
                for (int  j = 0; j < gunler.Count; j++)
                {
                     k = Convert.ToInt32(gunler[j]);
                    if  (String.Compare(prmtr[p][k].ToString(), son.cocuk[i].ad)==0)
                         ygun.Add(k);
                }
                 karar(son.cocuk[i], ygun);
                ygun.Clear();
             }
            return 0;
        }

        private ****  hzrBtn_Click(object sender, EventArgs e)
        {
            int  i;
            klbl.Visible = false;
            ktxt.Visible =  false;
            kbtn.Visible = false;
             krrBtn.Visible = true;

            kac = 4;
            cb =  new ComboBox[4];
            prmtr = new ArrayList[5];
             for (i = 0; i < 5 ; i++)
            {
                 prmtr[i] = new ArrayList();
            }
            
             String[] parametreler=new String[4];
             parametreler[0]="OUTLOOK";
            parametreler[1]="TEMP";
             parametreler[2]="HUMIDITY";
             parametreler[3]="WIND";
             for(i=0;i<parametreler.Length;i++)
            {
                 x = x + 150;
                Label lb = new Label();
                 lb.Text = parametreler[i];
                lb.Size = new  Size(125, 20);
                lb.******** = new Point(x, 10);
                 lb.Font = new Font("Times New Roman", 12f, FontStyle.Bold);
                lb.BackColor = Color.Transparent;
                 lb.ForeColor = Color.DarkGreen;
                 this.Controls.Add(lb);
                cb[i] = new ComboBox();
                 cb[i].Name = parametreler[i];
                cb[i].Size  = new Size(125, 30);
                cb[i].******** = new Point(x,  40);
                this.Controls.Add(cb[i]);            
             
            }
            cb[0].Items.Add("Sunny");
             cb[0].Items.Add("Overcast");
             cb[0].Items.Add("Rain");
            cb[1].Items.Add("Hot");
             cb[1].Items.Add("Mild");
            cb[1].Items.Add("Cool");
            cb[2].Items.Add("High");
             cb[2].Items.Add("Normal");
            cb[3].Items.Add("Strong");
            cb[3].Items.Add("Weak");

             prmtr[0].Add("Sunny"); prmtr[1].Add("Hot"); prmtr[2].Add("High");  prmtr[3].Add("Weak"); prmtr[4].Add("hayır");
             prmtr[0].Add("Sunny"); prmtr[1].Add("Hot"); prmtr[2].Add("High");  prmtr[3].Add("Strong"); prmtr[4].Add("hayır");
             prmtr[0].Add("Overcast"); prmtr[1].Add("Hot"); prmtr[2].Add("High");  prmtr[3].Add("Weak"); prmtr[4].Add("evet");
             prmtr[0].Add("Rain"); prmtr[1].Add("Mild"); prmtr[2].Add("High");  prmtr[3].Add("Weak"); prmtr[4].Add("evet");
             prmtr[0].Add("Rain"); prmtr[1].Add("Cool"); prmtr[2].Add("Normal");  prmtr[3].Add("Weak"); prmtr[4].Add("evet");
             prmtr[0].Add("Rain"); prmtr[1].Add("Cool"); prmtr[2].Add("Normal");  prmtr[3].Add("Strong"); prmtr[4].Add("hayır");
             prmtr[0].Add("Overcast"); prmtr[1].Add("Cool"); prmtr[2].Add("Normal");  prmtr[3].Add("Strong"); prmtr[4].Add("evet");
             prmtr[0].Add("Sunny"); prmtr[1].Add("Mild"); prmtr[2].Add("High");  prmtr[3].Add("Weak"); prmtr[4].Add("hayır");
             prmtr[0].Add("Sunny"); prmtr[1].Add("Cool"); prmtr[2].Add("Normal");  prmtr[3].Add("Weak"); prmtr[4].Add("evet");
             prmtr[0].Add("Rain"); prmtr[1].Add("Mild"); prmtr[2].Add("Normal");  prmtr[3].Add("Weak"); prmtr[4].Add("evet");
             prmtr[0].Add("Sunny"); prmtr[1].Add("Mild"); prmtr[2].Add("Normal");  prmtr[3].Add("Strong"); prmtr[4].Add("evet");
             prmtr[0].Add("Overcast"); prmtr[1].Add("Mild"); prmtr[2].Add("High");  prmtr[3].Add("Strong"); prmtr[4].Add("evet");
             prmtr[0].Add("Overcast"); prmtr[1].Add("Hot"); prmtr[2].Add("Normal");  prmtr[3].Add("Weak"); prmtr[4].Add("evet");
             prmtr[0].Add("Rain"); prmtr[1].Add("Mild"); prmtr[2].Add("High");  prmtr[3].Add("Strong"); prmtr[4].Add("hayır");           
        }
        public int test(agac son)
        {
            if (son.ad  == "evet" || son.ad == "hayır")
            {
                 tstBtn.Text = son.ad.ToUpper();
                return 0;
             }
            int knt=son.pr;
            String ara;
             ara = cb[knt].SelectedItem.ToString();
            int bul,i;
            bul = 0;
            for (i = 0; i < son.cs; i++)
             {
                if (String.Compare(son.cocuk[i].ad, ara)  == 0)
                {
                    bul = i;
                     break;
                }
            }
             agac yeni = son.cocuk[bul];
            yeni = yeni.cocuk[0];
             test(yeni);
            return 0;
        }
         private **** tstBtn_Click(object sender, EventArgs e)
        {
             test(bas);
        }

        private ****  gstrBtn_Click(object sender, EventArgs e)
        {
             Label lb = new Label();
            lb.Text = bas.ad;
             lb.Size = new Size(70, 20);
            lb.******** = new Point(800,  100);
            lb.Font = new Font("Times New Roman", 12f,  FontStyle.Bold);
            lb.BackColor = Color.ForestGreen;
             lb.ForeColor = Color.WhiteSmoke;
             this.Controls.Add(lb);
            tstBtn.Visible = true;
             agacgoster(bas, 800, 130, 1);
        }
    
    }
}
 

P@cth

Analist
22 Tem 2013
888
13
güzele benziyo bende düşünüyom vb.nete yapıcam güzel bi yapay zeka uygulaması :)
 

Al Sa Her

Üye
23 Nis 2015
238
1
benim gibi acemiler için kod hakkında biraz daha bilgi verebilir misin hocam.

hangi dil, amacı vb...
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.