Не глядя на клавиатуру напишем алгоритм Decision Tree с нуля на языке Python

Поделиться
HTML-код
  • Опубликовано: 16 сен 2024

Комментарии • 12

  • @bogdanns2
    @bogdanns2 Год назад +4

    Это очень круто) и полезно
    Спасибо!
    Надо тоже попрактиковаться

  • @billyalen_ttr8452
    @billyalen_ttr8452 2 года назад +3

    Блин, это же надо так сходу писать код рабочий, круто реально)

    • @mlpython1089
      @mlpython1089  2 года назад +2

      Неделю потратил на изучение этого алгоритма. Недели две писал и переписывал видео. До этого, с нуля, пару месяцев тренировал слепую печать.

  • @sanpavlovich9726
    @sanpavlovich9726 Год назад

    Классное видео! Спасибо! От себя скажу, что вроде бы данную реализацию можно сделать эффективнее. При построении дерева регрессии, перебирая пороги и признаки, мы каждый раз пересчитываем среднее по всем значениям. Среднее можно пересчитывать за o(1), а не за o(n), запоминая прошлые значения среднего. Просто для регрессии даже для небольшой выборки ваша реализация отрабатывала весьма долго, если сравнивать со скоростью работы реализации из sklearn.

  • @hopelesssuprem1867
    @hopelesssuprem1867 Год назад

    За видео, конечно, спасибо, но уже видел один в один такой алгоритм на разных каналах и кэггл. У данной реализации есть 2 недостатка: 1) нужно сделать функцию чтобы определять непрерывные и категориальные переменные т.к. у них порог берется по-разному, 2) обычно порог берется не по всем уникальным значениям признака, а по среднему арифметическому между уникальными соседними значениями признака.
    Также вы сказали, что реализуете коэффициент Джини, но сделали информационный прирост. Хоть у них и схожие результаты, но все же это разные вещи.

  • @billyalen_ttr8452
    @billyalen_ttr8452 2 года назад +1

    Хотелось бы высказать небольшое замечание, что когда считают R^2 коэффициент для задачи регрессии, среднее значение считают именно по обучающей выборке, но это мелочи)

    • @mlpython1089
      @mlpython1089  2 года назад

      Почему Вы так решили?

    • @mlpython1089
      @mlpython1089  2 года назад

      Когда пишем знаменатель, то говорим о модели среднего. А модель строим по тренировочному набору данных. Понял. Спасибо.

  • @zzzzzz4572
    @zzzzzz4572 2 года назад

    Информативное видео! Спасибо за урок. А можно с вами как то связаться? Хотелось бы попросить совет, как использовать свой набор данных для этого алгоритма. Я новичок в этом деле. Как не пробую подключить свои данные - либо ошибки, либо в предикте все 0 0 0 0... Хотя на данных из урока все работает 😞

    • @mlpython1089
      @mlpython1089  2 года назад

      Нужно на данные посмотреть. Они должны быть все числовые. Скинте часть данных в облако, а ссылку оставьте здесь.

    • @zzzzzz4572
      @zzzzzz4572 2 года назад

      @@mlpython1089 drive.google.com/drive/folders/19vlAf684MpUo8xP1HHUR_JzTl9-uXinq?usp=sharing
      Ссылка на диск. Туда же можно прикрепить ответ

    • @mlpython1089
      @mlpython1089  2 года назад

      Скинул туда исправления.
      1. Нужно тип целевой переменной изменить:
      ytall = tall[clDrop].values.astype("int32")
      2. И добавить выход из из метода grow_tree после определения индексов:
      left_indexes = np.argwhere(X[:, best_feature] best_threshold).flatten()
      # добавил выход
      if len(left_indexes) == 0 or len(right_indexes) == 0:
      return Node(value=self.most_comon(y))