Алгоритмы ML с нуля на Python
Алгоритмы ML с нуля на Python
  • Видео 22
  • Просмотров 13 139
Истребитель Fw190 A-8. Бумага, сборка.
Сборка из бумаги немецкого истребителя времён Второй мировой войны и фотосессия с другими моделями истребителей. В процессе начитываю рассказ немецкого лётчика об его последнем вылете на этом самолёте.
Рассказ немного мною переработан.
0:00 Что делать, если половина коллектива отвалилось с проекта.
3:15 От винта!
4:35 Кто изобрёл Бутстрап?
6:32 Атака!
8:15 Про парочку статистических методов.
Просмотров: 191

Видео

Истребитель Bf109E-4 Бумага, сборка. +Сказка на ночь
Просмотров 5338 месяцев назад
Модель немецкого истребителя в масштабе 1 к 33 из бумаги. Процесс сборки под задорные песни. Далее идёт короткий расказ с диалогами. На 10:20 у командира эскадрильи в кислородном баллоне оказался гелий. Поэтому можно поржать. 0:00 Эпическое начало 3:00 Делаем крылышки 5:45 Взлёт пары "Цвайн идиотен" 8:20 Полёт эскадрильи над Средиземным морем. Несчастный ублюдок Макс.
Истребитель Як 1. Бумага, сборка.
Просмотров 91010 месяцев назад
Модель советского истребителя в масштабе 1 к 33. Процесс сборки под песню Высоцкого - Як истребитель.
Напишеи алгоритм Probability Calibration Tree
Просмотров 245Год назад
Напишем алгоритмы дерева калибровки вероятности и построения диаграммы надежности (reliability). В листовых узлах дерева обучим логистические регрессии и вычислим ожидаемую ошибку калибровки. Проверим работу дерева на несбалансированной выборке. В конце видео расскажу про более продвинутое решение - класс Probability Calibration Tree. 0:00 Начнём с шутки, которую еще никто не понял 1:00 Импорти...
AB тесты, мощность, ROC кривая p-values.
Просмотров 496Год назад
Проведём статистические тесты на остутствие тренда в данных и сравним выборки. Используя метод Монте Карло узнаем распределение p-values, построим ROC кривую p-values и определим мощности тестов. 0:00 Что будем делать. 1:05 Начнём с чистого листа. Импортируем библиотеки. 2:08 Считываем данные. Описание признаков. 4:33 Тест на отсутствие тренда в данных. 6:12 Когда отвергаем основную гипотезу - ...
Не глядя на клавиатуру напишем алгоритм SoftMax Regression для многоклассовой классификации.
Просмотров 6032 года назад
На Python с нуля напишем линейный алгоритм для многоклассовой классификации. Узнаем, как выглядит функция потерь Log-loss и SoftMax функция и как вычисляется градиент весов. На рисунках увидем результат работы алгоритма. 0:42 Давайте это сделаем. 3:54 Не глядя на клавиатуру пишем класс алгоритма SoftMax Regression 13:00 Написали. Дописываем методы predict и score 14:42 Проверяем. Добавляем вычи...
Напишем алгоритм AdaBoost для регрессии с нуля на Python.
Просмотров 2312 года назад
По статье - "AdaBoost.RT: a boosting algorithm for regression problems" напишем два алгоритма адаптивного бустинга для регресии - RT и R2. Узнаем особенности, проведем их сравнение. 0:30 Статья про алгоритм 2:18 Начинаем писать класс AdaBoost для алгоритма RT 16:35 Кажется всё. Нет, не всё. Дописывем методы, исправляем опечатки. 21:56 Проверяем. Любуемся результатами работы каждой модели в комп...
Напишем алгоритм AdaBoost для классификации
Просмотров 2792 года назад
С нуля напишем алгоритм. В качестве базовой модели будем использовать дерево глубиной 1 (пенёк). Узнаем как пни меняют веса наблюдений. Сравним качество с глубоким деревом решений. Переделаем алгоритм на задачу регрессии - AdaBoost.RT по статье D.P. Solomatine и D.L. Shreshta в следующем видео ролике. 0:14 Вспомнили про нашего коллегу по увлечению 2:08 Что будем использовать в качестве базовой ...
Напишем алгоритм Gradient Boosting Machine по идее Жерома Фридмана
Просмотров 4572 года назад
Напишем с нуля алгоритм композиции GBM на самодельных неглубоких деревьях. Узнаем что такое остатки и как на них обучать модели. Посмотрим как уменьшается (!) ошибка композиции при росте числа базовых моделей. Побыстрому переделаем алгоритм из регрессии в классификацию. Напишем алгоритмы вычисления и построения ROC и PRC кривых. Сравним скорости сходимости Random Forest и Gradient Boosting. 0:0...
Расскажу про алгоритм Случайного поиска с адаптацией для поиска информативных признаков.
Просмотров 2112 года назад
Расскажу про алгоритм Случайного поиска с адаптацией для поиска информативных признаков.
Расскажу про применение генетического алгоритма для выбора информативных признаков.
Просмотров 2222 года назад
Расскажу про применение генетического алгоритма для выбора информативных признаков.
Напишем алгоритм Linear Regression и Logistic Regression. Закодируем градиентный спуск.
Просмотров 8032 года назад
Напишем алгоритм Linear Regression и Logistic Regression. Закодируем градиентный спуск.
Напишем алгоритм Random Forest со слов Лео Бреймана.
Просмотров 3842 года назад
Напишем алгоритм Random Forest со слов Лео Бреймана.
Напишем алгоритм k-nearest neighbors с нуля на Python
Просмотров 8902 года назад
Напишем алгоритм k-nearest neighbors с нуля на Python
Не глядя на клавиатуру напишем алгоритм Decision Tree с нуля на языке Python
Просмотров 2,2 тыс.2 года назад
Не глядя на клавиатуру напишем алгоритм Decision Tree с нуля на языке Python
Змейка под управлением k-nearest neighbors
Просмотров 2702 года назад
Змейка под управлением k-nearest neighbors

Комментарии

  • @danakakhanovich7667
    @danakakhanovich7667 7 месяцев назад

    Здравствуйте. Точно ли, что в методе Моте-Карло именно replase = True делает независимые выборки? Мне кажется независимость достигается сэмплированием без возвращения, это replase = False?

    • @mlpython1089
      @mlpython1089 7 месяцев назад

      Как раз когда не возвращаете взятое значение из выборки, выборка уменьшается в размере, а значит следующее значение, взятое из выборки, будет зависеть от её уменьшенного объёма. А этого нельзя допускать. Поэтому нужно возвращать взятое значение.

    • @danakakhanovich7667
      @danakakhanovich7667 7 месяцев назад

      @@mlpython1089 спасибо! теперь понятно!

    • @danakakhanovich7667
      @danakakhanovich7667 7 месяцев назад

      @@mlpython1089 поясните еще, пж. какой вывод делать (в конце видео), когда мы не отвергаем нулевую гипотезу, а гистограмма неравномерна, FPR показывает 27%...

    • @mlpython1089
      @mlpython1089 7 месяцев назад

      Выводы делаем по р значению, а гистограмма и рок кривая чисто для красоты и понимания где искать мощность в случае отвергания нулевой гипотезы.

  • @ДавидНоустим
    @ДавидНоустим 7 месяцев назад

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

  • @Алексей-у3й8и
    @Алексей-у3й8и 8 месяцев назад

    Как можно приобрести этот журнал я гаворю о ме 109

    • @mlpython1089
      @mlpython1089 8 месяцев назад

      Раньше их было полно на сайте navarin ru, если вы говорите именно об этом журнале (халински). Теперь там таких нет. Но есть другие издательства.

  • @user-snow779
    @user-snow779 8 месяцев назад

    Хорошая работа !

  • @ДавидНоустим
    @ДавидНоустим 8 месяцев назад

    Отличая модель, интересное сопровождение)

  • @svitlanakozyr266
    @svitlanakozyr266 9 месяцев назад

    Доброго времени суток! Как исправить ошибку?

  • @svitlanakozyr266
    @svitlanakozyr266 9 месяцев назад

    AttributeError Traceback (most recent call last) Cell In[9], line 8 1 rs = RSwA(X, y, # передаем признаки и целевую переменную 2 iterations=250, # число итераций 3 manipulations="1000", # какие манипуляции над признаками пробовать 4 model=model, # модель 5 desired_score=None) # желаемое качество 7 for i in tqdm.tqdm(range(rs.iterations)): ----> 8 rs.go_search() 10 if rs.desired_score is not None and rs.desired_score >= rs.score: 11 break Cell In[4], line 110, in RSwA.go_search(self) 107 return 109 if self.cv_all_scores[-1] > self.cv_all_scores[-2] * 1.01: --> 110 self.change_weights(1.1) 111 elif self.cv_all_scores[-1] < self.cv_all_scores[-2] * 0.99: 112 self.change_weights(0.9) Cell In[4], line 94, in RSwA.change_weights(self, adapt) 91 self.weights = np.reshape(a, self.weights.shape) 93 temporary = pd.DataFrame([a], columns=self.d_weights.columns) ---> 94 self.d_weights = self.d_weights.append(temporary, ignore_index=True) File ~\anaconda3\Lib\site-packages\pandas\core\generic.py:5989, in NDFrame.__getattr__(self, name) 5982 if ( 5983 name not in self._internal_names_set 5984 and name not in self._metadata 5985 and name not in self._accessors 5986 and self._info_axis._can_hold_identifiers_and_holds_name(name) 5987 ): 5988 return self[name] -> 5989 return object.__getattribute__(self, name) AttributeError: 'DataFrame' object has no attribute 'append'

  • @was_paraplan
    @was_paraplan 10 месяцев назад

    Ты крут дядька. Очень мощно.

    • @mlpython1089
      @mlpython1089 10 месяцев назад

      Да, мы - дядьки, сама крутость,

  • @dedmazai007
    @dedmazai007 10 месяцев назад

    Мир нашему дому!... Хорошая, аккуратная работа👍

  • @DanilaKasperchuk
    @DanilaKasperchuk 10 месяцев назад

    Вы очень круто разбираете ml алгоритмы, я очень хочу чтобы вы продолжили эту рубрику, можете разобрать K-means

    • @mlpython1089
      @mlpython1089 10 месяцев назад

      Спасибо за оценку. Новые ролики про МЛ не планирую в ближайшее время.

  • @СтаниславКапралин

    Спасибо! Очень понравилось видео!

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

    я тоже сейчас пишу ml-алгоритмы с нуля и кайфую. С удовольствием посмотрел ваши видео)

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

    у вас немного не так выполняется предсказание для AdaBoostR2: нужно использовать взвешенную медиану как в формуле

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

      При взвешивании ответ точнее получается?

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

      @@mlpython1089 да, получается немного точнее. Вот код для метода predict n_samples = len(samples) predictions = np.array([est.predict(samples) for est in self.stumps]).T # Sort the predictions sorted_idx = np.argsort(predictions, axis=1) # Find index of median prediction for each sample weight_cdf = np.array(self.betas)[sorted_idx].cumsum(axis=1) median_or_above = weight_cdf >= 0.5 * np.sum(self.betas) median_idx = median_or_above.argmax(axis=1) median_estimators = sorted_idx[np.arange(n_samples), median_idx] # Return median predictions return predictions[np.arange(n_samples), median_estimators]

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

    аахахахахахахха)))))

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

    Пятикилограммовая гантель добавляет веса этому видео

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

    хех)

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

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

  • @АлексейТаганрогов

    Может ли кто-то пояснить, для чего в начале функции fit() к набору признаков добавляется столбец единичек?

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

      Иначе пришлось бы работать со смещением (self.bias) - искать ему производную db. class LinearRegression(): def __init__(self): self.weights = None self.bias = None self.y_train = None def fit(self, X, y): self.y_train = y self.weights = np.zeros(X.shape[1]) self.bias = 0 for _ in range(0, 1000): predict = X.dot(self.weights) + self.bias dw = X.T.dot(predict - y) / len(y) db = np.sum(predict - y) / len(y) self.weights -= 0.1 * dw self.bias -= 0.1 * db def predict(self, X): return X.dot(self.weights) + self.bias def r2(self, predict, y): return 1 - np.sum((predict - y)**2) / np.sum((y_train.mean() - y)**2)

    • @АлексейТаганрогов
      @АлексейТаганрогов Год назад

      @@mlpython1089 спасибо, понял. Отличные видео на канале! С полгода назад, когда только начинал изучать эти вещи, ничего не понял, подумал, что канал плохой. А сейчас этот материал отлично воспринимается.

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

    Очень крутые и полезные видео для подготовки и углубления понимания разных алгоритмов. Спасибо большое автору канала!

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

    Круто👍👍👍👍

  • @ДмитрийСафронов-р2ъ

    Проблема автора в сухости подхода. Просьба обьяснять не только алгоритмы но и их суть. Какие проблемы решает..+сы и -сы. Сам код можно и гитхабе найти. И былобы здорово алгоритмы на реальных задачах.. не сферических коней в вакууме рассматривать а чтото жизненное. Цель ваших ролков обучать? А не под камеру набирать код.

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

      На просторах есть много ресурсов, которые отлично справляются с задачей - научить. Мне их не переплюнуть. Поэтому цели кого то научить я и не ставил. Открыл канал чтобы узнать на сколько это сложно и начать относиться к другим авторам более лояльно. А на практике ML, в основном, не про алгоритмы ML, а про сбор, подготовку и анализ данных тестами.

    • @ДмитрийСафронов-р2ъ
      @ДмитрийСафронов-р2ъ Год назад

      @@mlpython1089 Я не с целью вас задеть написал. Я даже подписался на вас. Обязательно продолжайте. Я люблю самописные алгоритмы. Просьба развернутее описывать задачу и сами алгоритмы. И если есть возможность то используйтеи не синтетические датасеты в ближе к реальной жизни.

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

    Шикарно👍👍👍👍👍

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

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

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

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

  • @МаксЧерн-х2л
    @МаксЧерн-х2л Год назад

    Спасибо

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

    ахахаххахахахахха

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

    Спасибо большое за урок, очень доходчиво буквально на пальцах разобрали тему. Хотел спросить по поводу АА -теста, вроде кажется очевидным что проводя тест на одной и той же выборке мы не получим статистического отличия, тем не менее он проводится, можете также буквально на пальцах пояснить почему и привести пример когда АА тест проваливается. Спасибо!

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

      Спасибо. АА тест может провалиться если случайная величина распределена крайне несимметрично. В таких случаях говорят, что у распределения тяжелые хвосты или выбросы. Обычно проблема решается усечением выборки, т.е. удалением, например, 1% наблюдений с минимальными и максимальными значениями. Но если это не помогает и АА тест всеравно проваливается (roc кривая р значений не диагональ), то, возможно, в данных есть кластеры или тренд.

  • @CATBARSik..
    @CATBARSik.. Год назад

    Гироскоп надо

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

    Не очень понятно почему в производной берем X.T

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

      Развернуть надо матрицу Х перед умножением на остатки чтобы получить веса. Иначе не получиться - размерности не сойдутся.

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

      Владимир, спасибо за ответ. То что размерности не совпадут если не транспонировать это понятно. Просто смутило, что при перевороте матрицы мы уже перемножаем значения конкретной фичи на вероятности, которые соответствуют примерам.

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

    Подскажите, пожалуйста, а новые видео планируются?

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

      Подготовиться и записать это очень много времени нужно потратить. Да и формат изложения не популярный. Аналитика просмотров говорит, что на просмотр видео тратят минуту, две. Но, вот есть идея записать про алгоритм калибровки вероятностей с использованием стриженных деревьев решений. Будет интересно?

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

      @@mlpython1089 Да, я понимаю, что это трудоёмкий процесс. Возможно, стоит вложиться в рекламу на каких-нибудь русскоязычных каналах про DS/ML, чтобы увеличить число подписчиков. Формат сам по себе полезный, интересно наблюдать, как всё работает "под капотом", а не просто накатывать готовые sklearn-модельки через fit/predict. Для меня это ещё один способ время от времени освежить математику) Да, интересно, хотелось бы посмотреть.

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

    Это был хитрый план с комментарием под лекцией МФТИ с Суффиксным Автоматом) Успехов Вам! Я сам пару лет назад осваивал МЛ - именно по этой книге. Знания и практика - наше все!

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

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

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

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

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

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

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

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

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

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

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

    Отличный видос, спасибо!

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

    Подскажите, 7:17 какая книга?

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

      Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems 2nd Edition, Kindle Edition

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

      @@mlpython1089 спасибо❤️

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

    Добрый день! Учусь по вашим урокам. Очень помогают. А как в данном алгоритме рассчитать значимость признаков на итоговый результат? (Аналог feature_importances_. из sklearn, что бы в таблицу вывести название признака и его влияние). Если вам не трудно, не могли бы помочь с этим делом 🙏Буду очень благодарен за помощь! (Гугл диск: drive.google.com/drive/folders/19vlAf684MpUo8xP1HHUR_JzTl9-uXinq?usp=sharing , так же скиньте туда реквизиты, куда вас можно будет отблагодарить☺)

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

      Приветствую. Приятно слышать, что мои видео кому-то полезны. В случайном лесе признаки в узлах деревьев выбираются случайно. Всё это делается чтобы модели в композиции случайного леса не корелировали между собой. Поэтому важность признаков не так просто оценить и обычный подсчет использованных признаков (как в дереве решений) не сработает. Нужен специальный алгоритм - permutation importance. Он у меня есть в змейке на KNN. Могу попробовать его вставить в случайный лес.

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

      @@mlpython1089 Если получится, было бы здорово. Сам я такое к сожалению не в силах реализовать... (А очень нужно) Остается надежда на вашу помощь...

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

      @@zzzzzz4572 Там идея проста. По этому классу можно её понять. # класс оценки важности признаков (permutation importance) class PermutationImportance(object): def __init__(self, model, X, y, cv=5): self.model = model self.cv = cv self.importance = [] self.f_score = [] def evaluate_it(self): original_score = self.model.cv(X, y, cv=self.cv).mean() for i in range(X.shape[1]): X_new = X.copy() np.random.shuffle(X_new[:, i]) feature_score = self.model.cv(X_new, y, cv=self.cv).mean() self.f_score.append(feature_score) self.importance.append(feature_score - original_score) return self.importance CV = 3 clf = KNN() cv = clf.cv(X, y, cv=CV) print("Cross validation score:", cv, " Its mean:", str(cv.mean())[:4]) print("Starting evaluate feature importance... ") imp = PermutationImportance(clf, X, y, cv=CV) imp_per_feature = imp.evaluate_it() print("Feature importance by Permutation:") for i, score in enumerate(imp_per_feature): if score < 0: print("feature", i, "its importance", str(score * (-1.0))[:4])

  • @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() right_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))

  • @ВладиславГаджиханов-ъ7к

    Можете, пожалуйста, подсказать, как построить GBM над логистическими регрессиями?

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

      Также как и на деревьях. Алгоритм логистической регрессии описан в другом видео. Его можно использовать в GBM в качестве базового алгоритма. Только в методе predict класса GBM нужно задать threshold=0.5, а из метода predict класса LogisticRegression вернуть сигмоиду от предсказания.

    • @ВладиславГаджиханов-ъ7к
      @ВладиславГаджиханов-ъ7к 2 года назад

      @@mlpython1089 но в GBM мы же на каждом шаге решаем задачу регрессии? Как ее решать с помощью логистической регрессии?

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

      @@ВладиславГаджиханов-ъ7к на каждом шаге мы используем базовую модель, которую обучаем на остатки. Логистическую регрессию тоже можно использовать в качестве базовой модели. Только что сам попробовал. Результат хороший.

    • @ВладиславГаджиханов-ъ7к
      @ВладиславГаджиханов-ъ7к 2 года назад

      Понял, спасибо. Подскажите еще, пожалуйста, GBM в случае экспоненциальной ф-ии потерь в задачи классификации полностью эквивалентентен AdaBoost. Происходит ли то же самое для задачи регрессии?

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

      Ничего не могу сказать про эквивалентность данных алгоритмов при экспоненциальной функции потерь.

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

    Классно! В теории можно еще добавить к примеру среднее кол-во очков за 10 запусков каждой змейки , чтобы потом сравнить все Ваши подходы или на одну площадку запускать разных) Классно оформлено, где-то обучались или сами?)

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

      Спаисбо. Все же я думаю, что KNN слабоват для такой задачи. Нужен другой алгоритм и обучение с подкреплением. Да, сам изучаю - по лекциям Евгения Соколова, StatQuest и многое другое.

  • @ДаниилСоловьев-э6ш

    Очень классно сделано. Хорошо оформлен ноутбук. Видно, что вы действительно уже много времени занимаетесь ML. Порадовал ваш способ генерации обучающего подмножества) Надо определенно брать на вооружение :)