Эксперимент с CART, C4.5 и Random Forest.

Вы разработали проект, не зная, почему? Что ж, вы не одиноки. Этот проект состоит из средства проверки подписи, использующего в качестве темы дерево решений. Это была миссия для меня в проекте класса «Интеллектуальные вычисления» для получения степени магистра. Ощущение было:

Зачем? мой текущий проект использует Deep Neural Network с рукописным текстом, ничего с подписями, не говоря уже о деревьях решений.

Признаюсь, я поступил в магистратуру и никогда раньше не пользовался искусственным интеллектом, поэтому в середине процесса возникло много вопросов. Я только понимаю этот проект в конце и делаю вывод, что для этой работы лучше использовать нейронную сеть (спойлер).

Для любителей кода~https://github.com/arthurflor23/decision-tree.

Эй, пойдем

В чем заключается концепция дерева решений? Из Википедии [здесь]:

Дерево решений — это инструмент поддержки принятия решений, использующий древовидную модель решений и их возможных последствий, включая случайные исходы событий, затраты ресурсов и полезность. Это один из способов отображения алгоритма, который содержит только операторы условного управления.

Я знаю, это скучно, поэтому... дерево решений – это набор решений, которые нужно принять, взаимосвязанных условиями. Этот набор решений представлен в виде древовидной диаграммы. А как насчет логики его построения? Можно сказать, что наиболее важными алгоритмами построения являются: CART, C4.5 и Random Forest.

Если будет солнечно и безветренно, я, вероятно, играю в гольф/теннис(самый распространенный пример для дерева решений, конечно, с математикой, таблицами и диаграммами, как на рис. 2).

Набор данных

Набор данных, использованный в этом проекте, был взят из SigComp2009 с 3462 подписями, разделенными на подлинные и поддельные. Вы можете найти здесь.

Предварительная обработка

Был применен порог Otsu, с минимальной ограничивающей рамкой и ресайзом до 512x512, как на рис. 4. Несколько интересных моментов, которые я узнал в процессе:

  1. Изначально я не делал минимальную ограничительную рамку, но этот прием дал мне 10%-ный прирост точности (для опытного это очевидно);
  2. Изменение размера изображения до 512x512 позволило мне использовать конкретный CNN для подписей (мы до этого доберемся).

Особенности извлечения

Особенности каждого изображения будут нашими атрибутами условий на дереве решений. Для этого были опробованы два способа:

  1. Использование Hu Moments, которое возвращает вектор с 7 значениями;
  2. Использование сверточной нейронной сети, CNN (sigver_wiwd), которая возвращает вектор с 2048 значениями.

Алгоритмы

Для построения дерева решений использовались 3 алгоритма:

  1. C4.5, собственная реализация… это важно после;
  2. CART, из реализации sklearn;
  3. Случайный лес, также из реализации sklearn.

Эксперимент

Со всем объяснением было легко реализовать sklearn. Вместо этого C4.5 был сложным с нуля, и да, в этом не было необходимости.

Эксперимент заключался в объединении всех техник, поэтому:

  1. Ху-моменты + С4,5;
  2. Ху момент + ТЕЛЕЖКА;
  3. Ху моменты + Случайный лес;
  4. CNN + C4.5;
  5. CNN + КОРЗИНА;
  6. CNN + случайный лес.

Все это выполняется 30 раз, чтобы получить медиану результатов времени и точности. Почему 30? Волшебное число.

Результаты

Наилучший результат был у CNN + Random Forest с точностью 86,40% (рис. 5). Помните, я сказал, что нейронная сеть лучше? Итак, ну, NN может достигать 99% (я видел после в диссертации здесь). Но давайте перейдем к результатам.

И результаты времени (рис. 6). Это забавно, потому что я думал, что моя реализация C4.5 была «нормальной», но когда я увидел время по сравнению с другими… хахаха…😢

В завершение — график дерева решений из случайного леса (рис. 7).

Это все люди! Спасибо за уделенное время, дорогой читатель. Теперь я могу немного вздохнуть после того, как поделился этим проектом (ха-ха). До встречи.

использованная литература

  1. Конкурс по проверке подписи ICDAR 2009 (SigComp2009)
  2. Как реализовать алгоритм дерева решений с нуля на Python
  3. Деревья решений
  4. Случайный лесной классификатор
  5. Обученное представление для автономной проверки рукописной подписи
  6. Простое объяснение случайного леса
  7. Случайный лес в Python