71704

Решение задачи классификация и регрессии с помощью деревьев решений

Лабораторная работа

Информатика, кибернетика и программирование

Цель работы: изучение алгоритмов построения деревьев решений; создание и исследование классификационных и регрессионных моделей с помощью деревьев решений Индивидуальное задание: seeds Data Set Attribute Information: To construct the data, seven geometric parameters of wheat...

Русский

2014-11-11

136.54 KB

3 чел.

8

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

ДВНЗ «ДОНЕЦЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ»

Кафедра АСУ

Звіт

з лабораторної роботи № 1

з дисципліни «МЕТОДИ ІНТЕЛЕКТУАЛЬНОЇ ОБРОБКИ

ДАНИХ»

з теми: «Решение задачи классификация и регрессии с помощью

деревьев решений»

Варіант №14

                                             Виконала:

ст. гр. ІУС-10Б

Носенко О.О.

                                               Перевірили:

                                                                                                Васяєва Т. О.

   Смирницький Г. О.

Донецьк 2013

Лабораторная работа №1

Тема: решение задачи классификация и регрессии с помощью

деревьев решений.

Цель работы: изучение алгоритмов построения деревьев решений;

создание и исследование классификационных и регрессионных моделей с помощью деревьев решений

Индивидуальное задание:

seeds Data Set

Attribute Information:

To construct the data, seven geometric parameters of wheat kernels were measured:

1. area A,

2. perimeter P,

3. compactness C = 4*pi*A/P^2,

4. length of kernel,

5. width of kernel,

6. asymmetry coefficient

7. length of kernel groove.

All of these parameters were real-valued continuous.

CART

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;

namespace laba1

{

   class CART

   {

       private static int regressioncount = 5;//максимальное число разбиений регрессионного параметра

       private static int maxdeep = 30;//максимальная глубина дерева

       private static SortedSet<IComparable> FounsClassValues(List<Element> elements)

       {

           SortedSet<IComparable> set = new SortedSet<IComparable>();

           foreach (Element e in elements)

           {

               set.Add(e[-1]);

           }

           return set;

       }

       private static double CountQ(List<Element> elements, Uslovie uslovie, SortedSet<IComparable> classvalues)

       {

           int classcount = classvalues.Count;

           int[] left=new int[classcount];

           int[] right = new int[classcount];

           int leftsum=0;

           int rightsum=0;

           int i;

           double Q=0;

           foreach (Element e in elements)

           {

               i = 0;

               while (!e[-1].Equals(classvalues.ElementAt(i))) i++;

               if (uslovie.CheckElement(e) == true) left[i]++;

               else right[i]++;

           }

           for (i = 0; i < classcount; i++)

           {

               Q += Math.Abs((left[i] - right[i]) / (double)(left[i] + right[i]));

               leftsum += left[i];

               rightsum += right[i];

           }

           Q = (leftsum * rightsum * 2 * Q) / (elements.Count * elements.Count);

           return Q;

       }

       private static void CreateNodes(MyNode node, List<Element> elements, BitArray attributetypes, int deep)

       {

           int attributecounts = elements[0].GetAttributeCount();

           int i, j,col;

           Uslovie bestuslovie=null;

           double bestQ=-1;

           double dx;

           double Q;

           Uslovie[] uslovies;

           List<Element> left = new List<Element>();

           List<Element> right = new List<Element>();

           SortedSet<IComparable> classvalues = FounsClassValues(elements);

           //если все элементы в множестве принадлежат одному классу дальнейшее разбиение не целесообразно

           if (classvalues.Count == 1)

           {

               node.SetClass(classvalues.ElementAt(0));

               return;

           }

           //если мы достигли максимальной глубины, то текущий узел обозначается листом.

           //Класс определяеся по максимальному числу элементов

           if (deep >= maxdeep)

           {

               ChooseClass(node, elements, classvalues);

               return;

           }

           for (i = 0; i < attributecounts; i++)

           {

               IComparable[] set = Uslovie.GetValuesInfo(elements, i);

               if (attributetypes[i] == true)//задача классификации

               {

                   uslovies=new Uslovie[set.Length];

                   for(j=0;j<set.Length;j++)

                   {

                       uslovies[j]=new Classification(i,set[j]);

                   }

               }

               else//задача регрессии

               {

                   col = Math.Min(regressioncount, set.Length);

                   uslovies=new Uslovie[col];

                   dx = set.Length / (double)col;

                   for (j = 0; j < col; j++)

                   {

                       uslovies[j]=new Regression(i,set[(int)(dx * j)]);

                   }

               }

               //если аттрибут не меняет свое значение в выборке - нет смысла производить по нему разбиение

               if (uslovies.Count() == 1) continue;

               foreach(Uslovie uslovie in uslovies)

               {

                   Q = CountQ(elements, uslovie,classvalues);

                   if (Q > bestQ)

                   {

                       bestQ = Q;

                       bestuslovie = uslovie;

                   }

               }

           }

           //если в выборке у всех элементов одинаковые значения аттрибутов, но разные значения классов

           if (bestuslovie == null)

           {

               ChooseClass(node, elements, classvalues);

               return;

           }

           foreach (Element e in elements)

           {

               if (bestuslovie.CheckElement(e) == true)

               {

                   left.Add(e);

               }

               else

               {

                   right.Add(e);

               }

           }

           MyNode leftnode = new MyNode(bestuslovie);

           node.Nodes.Add(leftnode);

           CreateNodes(leftnode, left, attributetypes,deep+1);

           MyNode rightnode = new MyNode(bestuslovie.CreateInverse());

           node.Nodes.Add(rightnode);

           CreateNodes(rightnode, right, attributetypes,deep + 1);

       }

       //установка для узла дерева значения класса с максимальным количество элементов в выборке

       private static void ChooseClass(MyNode node, List<Element> elements, SortedSet<IComparable> classvalues)

       {

           int i;

           int[] counts = new int[classvalues.Count];

           foreach (Element e in elements)

           {

               i = 0;

               while (!e[-1].Equals(classvalues.ElementAt(i))) i++;

               counts[i]++;

           }

           int imax = 0;

           for (i = 1; i < classvalues.Count; i++)

           {

               if (counts[i] > counts[imax]) imax = i;

           }

           node.SetClass(classvalues.ElementAt(imax));

       }

       public static MyNode RunAlgorithm(List<Element> elements, BitArray attributetypes)

       {

           MyNode node=new MyNode(null);

           CART.CreateNodes(node, elements,attributetypes,0);

           return node;

       }

   }

}

ELEMENT

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace laba1

{

   class Element

   {

       private IComparable[] attributes;//аттрибуты

       private IComparable classvaue;//имя класса

       //доступ по индексу к значению аттрибута

       //если индекс за границами - возвращает имя класса

       public IComparable this[int i]

       {

           get

           {

               if (attributes == null || classvaue == null) throw new Exception("Элемент не инициализирован!");

               if (i < 0 || i >= attributes.Length) return classvaue;

               else return attributes[i];

           }

       }

       //инициализирующий конструктор

       public Element(IComparable[] _attributes, IComparable _classvalue)

       {

           attributes = _attributes;

           classvaue = _classvalue;

       }

       public int GetAttributeCount()

       {

           if (attributes == null) throw new Exception("Элемент не инициализирован!");

           return attributes.Length;

       }

   }

}

Form1

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.IO;

using System.Collections;

namespace laba1

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       private void button1_Click(object sender, EventArgs e)

       {

           StreamReader sr = new StreamReader(new FileStream("seeds_dataset.txt", FileMode.Open));

           string line;

           int i = 0;

           List<Element> train = new List<Element>();

           List<Element> test = new List<Element>();

           Random r = new Random();

           int count = 0;

           line=sr.ReadLine();

           while(line!=null && line.Length>0)

           {

               String[] parts = line.Split(new char[] { '\t' });

               count = parts.Count() - 1;

               IComparable[] objects = new IComparable[count];

               for (int j = 0; j < count; j++)

               {

                   objects[j] = parts[j];

               }

               test.Add(new Element(objects,parts[count]));

               line = sr.ReadLine();

           }

           for (i = 0; i < 120; i++)

           {

               int j = r.Next(test.Count);

               train.Add(test[j]);

               test.RemoveAt(j);

           }

           treeView1.Nodes.Clear();

           MyNode root = CART.RunAlgorithm(train, new BitArray(count,false));

           root.Text = "корневой узел";

           treeView1.Nodes.Add(root);

           sr.Close();

           int right = 0;

           int wrong = 0;

           foreach (Element el in train)

           {

               if (el[-1].Equals(root.GetClass(el))) right++;

               else wrong++;

           }

           textBox1.Text = String.Format("Точность классификации на обучаещем множестве

равна:{0}\r\n" +

           "Ошибка классификации на обучаещем множестве равна:{1}\r\n", right /

(double)train.Count, wrong / (double)train.Count);

           right = 0;

           wrong = 0;

           foreach (Element el in test)

           {

               if (el[-1].Equals(root.GetClass(el))) right++;

               else wrong++;

           }

           textBox1.Text += String.Format("Точность классификации на проверяющем множестве

равна:{0}\r\nОшибка классификации на проверяющем множестве равна:{1}\r\n", right /

(double)test.Count, wrong / (double)test.Count);

       }

   }

}

Uslovie

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace laba1

{

   //класс, проверяющий принадлежность элемента некоторому условию

   abstract class Uslovie

   {

       protected int i;//номер аттрибута

       protected bool direction;

       protected IComparable etalon;

       //проверка элемента

       public abstract bool CheckElement(Element e);

       //создание клона

       public abstract Uslovie Clone();

       //создание инверсного условия

       public Uslovie CreateInverse()

       {

           Uslovie copy = this.Clone();

           copy.direction = !copy.direction;

           return copy;

       }

       public Uslovie(int _i, IComparable _etalon)

       {

           i = _i;

           etalon = _etalon;

           direction = true;

       }

       //информация о возможных значениях определенного аттрибута выборки

       public static IComparable[] GetValuesInfo(List<Element> elements, int i)

       {

           SortedSet<IComparable> set = new SortedSet<IComparable>();

           foreach (Element e in elements)

           {

               set.Add(e[i]);

           }

           return set.ToArray();

       }

   }

   //класс для задач классификации

   class Classification : Uslovie

   {

       public Classification(int _i, IComparable _etalon)

           : base(_i,_etalon){}

       public override bool CheckElement(Element e)

       {

           return (e[i].CompareTo(etalon) == 0) == direction;

       }

       public override Uslovie Clone()

       {

           return new Classification(i, etalon);

       }

       

       public override string ToString()

       {

           return String.Format("x[{0}]{1}{2}",i,direction?"=":"<>",etalon);

       }

   }

   //класс для задач регрессии

   class Regression: Uslovie

   {

       public Regression(int _i, IComparable _etalon)

           : base(_i,_etalon){}

       public override bool CheckElement(Element e)

       {

           return (e[i].CompareTo(etalon) <1) == direction;

       }

       public override Uslovie Clone()

       {

           return new Regression(i, etalon);

       }

       public override string ToString()

       {

           return String.Format("x[{0}]{1}{2}", i, direction ? "<=" : ">", etalon);

       }

   }

}


 

А также другие работы, которые могут Вас заинтересовать

29593. Понятие индекса в медиапланировании. Расчет индекса 12.65 KB
  Понятие индекса в медиапланировании. Расчет индекса. экономический словарь ИНДЕКС от лат. Индекс исчисляется по отношению к базовому индексу базовой величине соответствующей определенному году принятому в качестве точки отсчета.
29594. Критерии характеристики медианосителя 19.63 KB
  Селективность аудитории избирательность ЦА udience selectivity свойство медианосителя доводить информацию до определенного сегмента потребителей при минимальном охвате незаданного сегмента потребителейт. Потенциал охвата rech potentil способность медианосителя собрать аккумулировать максимальное количество людей в качестве своей аудитории. Скорость аккумулирования аудитории speed of udience ccumultion показатель количества выходов или количества времени необходимых медианосителю для того чтобы охватить всю свою...
29595. Медиапланирование 12.03 KB
  Медианоситель конкретный представитель медиаканала где размещается рекламное сообщение. Медианоситель отбирается по качественным и количественным показателям. Медиамикс размещение рекламных материалов сразу в нескольких СМИ и как правило под типовым набором смеси из СМИ медиамикс понимается комбинация ТВ Радио Пресса Наружка. Долю охваченной и неохваченной аудитории при медиамиксе вычисляем формулам теории вероятности: 1Pb = 1P 1Pb где Pb охваченная медиамиксом аудитория P аудитория охваченная первым медиа Pb...
29596. Технологии нейро-лингвистического программирования (НЛП) 20.25 KB
  Технологии нейролингвистического программирования НЛП Изначально задумывалась как технология совершенствования личности. 5 моделей жизненных стратегий: иметь действовать знать относится к какомуто классу обществу принадлежать к быть кемто Техники НЛП: Мозг лучше справляется с позитивными целями негативные: не упади не пролей не проходите мимо Ярка творческая визуализации поставленной цели визуально запах звук Принцип уподобления приобщиться к карте реальности достичь целей как какойто человек которым...
29597. Психология памяти в медиапланировании. Исследования памяти в рекламе 15.49 KB
  При поступлении новых элементовстарые вытесняются последниезапоминаютсяэффект давности Во и Норман: Первичная система кратковременного хранения обладающая ограниченным объемом где инфо теряется за счет вытеснения старых элементов. Виды хранения: Акустическая Сенсорноеосуществление на этапе без участия сознания фотографичинфо сохраняется с фотографической точностью и не поддается контролю со стороны субъекта. 2 Для долговремен памяти характерно обращение к прошлому опыту поиска там инфо необходимой для понимания настоящего....
29598. Возникновение коммуникации. Социально-экономические факторы развития коммуникации 14.74 KB
  Возникновение коммуникации. Социальноэкономические факторы развития коммуникации. Выделяют два подхода к коммуникации: механистический однонаправленный процесс кодирования и передачи информации от источника и приема информации и получателем сообщения и деятельностныйсовместная деятельность участников коммуникации в ходе которой вырабатывается общий взгляд на вещи и действия с ними. Целями коммуникации являются: обмен и передача информации; формирование умений и навыков развитие профессиональных качеств; формирование отношения к себе к...
29599. Схема и сущность коммуникативного процесса. Виды шумов в коммуникации 44.59 KB
  Схемы Большое распространение получила линейная модель коммуникации разработанная Лассуэлом и включающая 5 элементов: Кто передает сообщение коммуникатор Что передается сообщение Как осуществляется передача канал Кому направлено сообщение аудитория С каким эффектом эффективность Р. К функциональным элементам относятся: источник информации продуцирующий сообщение; отправитель кодирующий сообщение в сигналы; канал проводящий это сообщение; получатель; цель или место назначения. Преимущество данной схемы состоит в...
29600. Виды и уровни коммуникации. Особенности массовой коммуникации 17.78 KB
  декодирование кодированиеобратная связь и тп особенности публичный характер открытость ограниченный и контролируемый доступ к средствам передачи опосредованность контактов множество реципиентов влияние институциональных предписаний особенности смк рассредоточение в пространстве многоконачльность СМК делятся на СМИ слухи и наружную рекламу 1. Слухи оказывают большое влияние на формирование общественного мнения благодаря обсуждению в малых приватных группах без освещения в СМИ. СМИ являются основным видом массовых...
29601. Массовая коммуникация в современном обществе: функциональный подход 15.29 KB
  Если это осуществляется в деятельности СМИ то таким образом ими реализуется важнейшая социальная функция интеграционная.фии МК: 1 обозрение окружающего мира: медиа расширяют горизонты познания индивида информационная функция; 2 корреляция с социальной структурой и ответственностью общества воздействие на него и его познание через обратную связь корреляционная функция проявляющаяся также в объяснении и интерпретации информационных сообщений в обеспечении поддержки существующим властям и господствующим нормам; 3 трансмиссия...