Pull to refresh
8
0

Indie game developer

Send message
Советую почитать предыдущую статью автора.
Если кратко, то приоритет одного параметра перед другим четко определяется самой моделью через понятие энтропии. И порядок атрибутов обучающей выборки неважен. В этом, собственно, и состоит весь изюм этой модели: она сама определяет, какой атрибут наиболее важен на данной стадии, и разбивает обучающую выборку на подмножества по значениям этого атрибута. На следующем шаге анализ «важности» происходит снова, и каждое подмножество в свою очередь разбивается. И так до тех пор, пока в очередном подмножестве не окажутся только те объекты, которые принадлежат одному и тому же классу. В этот момент дальнейшее разбиение по этой ветке больше не нужно, потому что мы получили путь, эффективно классифицирующий эту часть изначальной выборки.

Если ваш вопрос касался того, что делать с ситуацией, когда в обучающей выборке могут оказаться противоречивые данные, то ответ прост: представленный алгоритм ID3 не обрабатывает такие ситуации. Дерево он, конечно, построит, но часть объектов из самой же обучающей выборке потом будут классифицироваться им с ошибкой, что естественно. Разумеется, существуют методы предварительной проверки данных на противоречивость, оценка достоверности и так далее. В реальных системах все это должно применяться в комплексе.
Спасибо, весьма интересная статья (а предыдущая — вообще блеск!). В своей диссертации я использовал деревья решений как основную модель для классификации. Тоже писал на javascript построение деревьев, вижу в представленной в статье библиотеке частично свой же по сути код, только лучше оформленный :) Приятно, что деревья решений удерживают определенный интерес. И, на мой взгляд, очень заслуженно.
Для работы с непрерывными значениями Куинлан (создатель ID3) предложил алгоритм C4.5. Дальше другие авторы еще развивали эту тему.
Вообще, ID3 — это алгоритм построения дерева классификации. Для регресии, как сказали выше, лучше смотреть другие вещи.
Разумеется. Инженер является частным случаем специалиста.
Кстати, поздравляю вас :)
Инженер — это квалификация, а не звание.
Да, я его и выбрал, разумеется. Решил несколько разнообразить комментарии :)
Жаль, что автор не заинтересован в том, чтобы комментировать свою статью.
К чему тогда было постить ее на Хабр?
Здравствуйте, я хотел бы задать несколько вопросов.

1. Картинки красивые, но если это ваше научное исследование, тогда вы должны были ответить на вопрос, почему для решения задачи генерации используется дерево? Почему не взять, скажем, массив объектов и пройти его, на каждом элементе выбирая одно из значений?

2. Как выбирается конкретное значение очередного узла? Случайным образом?
Если нет, тогда интересно было бы узнать, как? И надо учитывать, что значения разных узлов могут противоречить друг другу и их надо дополнительно контролировать (пример: купила билет на месяц и за 5 недель сделала столько-то поездок).
Если да, то что делать с таким вариантом: «Аня купила билет на месяц и сделала в течение недели 20 поездок. Сколько она переплатила, если билет стоит 300 рублей, а одна поездка — 25 рублей.»?

И у вас везде должно быть «в течение», конечно же.
Спасибо за пост, интересная штука, стоит глянуть на досуге.
Известная конструкция #! по сути не лучше чем Prerender, так что последний имеет право на жизнь. Причем если используя #!, мы отдаем индексацию на откуп поисковику и потом задаем вопросы типа «а вдруг гугл обработает как-то не так?», то prerender на первый взгляд позволяет решить вопрос самостоятельно и для любого поисковика.
Роскомнадзор только разжигает интерес, я про этот сайт и не знал раньше.

Даешь еженедельную подборку «Лучшие сайты недели по версии Роскомнадзора»!
Эта книга Крокфорда — однозначный must read для всех, кто интересуется JavaScript. После нее становится особенно интересно читать и обсуждать хаб по яваскрипту, например недавние статьи «Нужны ли в JavaScript классы?»

А вот работой издательства Питер я недоволен. Заказал у них бумажную книжку «HTML5 и CSS3», которую они рекламировали неделю назад, с доставкой курьером в Москву. Неделя прошла, а мой заказ №2834 все еще висит в обработке, и никто не звонил.
Должен согласиться с вашим замечанием. Расчет площади по сетке выходит существенно быстрее.

Расчет площади фигуры разными способами

Код расчета через сетку
// Генерация сетки с общим количеством ячеек = p
          p_positive = 0;
          var gridRow = Math.ceil(Math.sqrt(p));
          // Разбить описывающий квадрат на gridRow ячеек по горизонтали и столько же по вертикали
          var cellWidth = (x2_ - x1_)/gridRow;
          var cellHeight = (y2_ - y1_)/gridRow;
          // точку будем ставить в центр каждой ячейки
          for (var y_counter=0; y_counter<gridRow; y_counter++) {

            var yCur = y1_ + y_counter * cellHeight + cellHeight/2;

            for (var x_counter=0; x_counter<gridRow; x_counter++) {

                var xCur = x1_ + x_counter * cellWidth + cellWidth/2;                

                var yes = false;
                for(var j=0; j<circles.length; j++) {
                    if(!yes && (
                          (circles[j].x-circles[j].r) <= xCur &&
                          (circles[j].x+circles[j].r) >= xCur &&
                          (circles[j].y-circles[j].r) <= yCur &&
                          (circles[j].y+circles[j].r) >= yCur )
                      ){
                       yes = true;
                       p_positive++;
                    }
                }

            }
          }



Код расчета через генерацию рандомных точек
// Генерация точек методом Монте-Карло
          var p_positive = 0;
          // генерируем p точек для определения площади фигуры
          for(var i=0; i<p; i++){
              var x_rand = Math.random()*(x2_-x1_)+x1_;
              var y_rand = Math.random()*(y2_-y1_)+y1_;

              var yes = false;
              for(var j=0; j<circles.length; j++) {
                  if(!yes && (
                        (circles[j].x-circles[j].r) <= x_rand &&
                        (circles[j].x+circles[j].r) >= x_rand &&
                        (circles[j].y-circles[j].r) <= y_rand &&
                        (circles[j].y+circles[j].r) >= y_rand )
                    ){
                     yes = true;
                     p_positive++;
                  }
              }
          }



Спасибо, возьму на заметку.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity