Pull to refresh

Comments 19

Ничего не понятно, зачем все это нужно?

Это что-то вроде дерева принятия решений получается, только описанного по-другому? Можно дерево принятия решений в питонью функцию скомпилировать (я когда-то это пробовал для деревьев из scikit-learn). Но это довольно бессмысленое занятие: интерпретировать полученную кашу все равно нельзя, т.к. полученная функция может очень сильно изменяться при небольших изменениях в тренировочных данных. Тут, как мне кажется, то же самое.

Точность, судя по коду, измеряется на том же наборе данных, на котором проводилась тренировка — это позволяет удостовериться, что модель достаточно сложна для того, чтобы описать данные, но ровным счетом ничего не говорит про то, как она работает на практике. Приводить эту оценку в качестве единственной оценки бессмысленно и вредно.
Действительно, я не разделял на выборки и скользящего контроля не проводил. Я лишь показал, то что уже сделано. Хорошо бы вместо слово «кажется» провести тесты. Конечно я мог бы сделать всё в одиночку, но не хотите ли проверить это самостоятельно и показать результаты?
Делать кросс-валидацию или проверку на тестовом подмножестве — это такая базовая штука, на уровне инстинкта должна быть. Если даже этого нет — никто всерьез рассматривать работу не станет. Да и там делов-то, кода-то несколько строк всего будет.

Мне эта модель не кажется интересной и полезной, даже по сравнению с деревьями принятия решений. Деревья принятия решений сами по себе тоже не очень полезные, на практике их в «голом» виде не применяют почти никогда. Если говорить прямо — сейчас это все выглядит как сферический алгоритм в вакууме, мотивированный мутными аналогиями с человеческим мозгом, при этом работающий непонятно как (даже автор этого не проверял), но, скорее всего, хуже существующих алгоритмов. Может, конечно, там и есть какие-то неочевидные интересные свойства, но, по крайней мере, по статьям впечатление складывается негативное, и желания копать дальше не возникает никакого.

А какие модели сейчас обычно применяют на практике? Очень интересно, расскажите, пожалуйста
От задачи зависит, конечно, я всего и не знаю. Из личной практики, для классификации — SVM разнообразные (линейные, с RBF ядрами), Logistic Regression, Random Forest (и варианты вроде AdaBoost). KNN тоже, наверное, хотя я на практике не сталкивался. Часто, если размерность задачи не очень большая, можно все в RandomForest засунуть и получить приемлемый результат «из коробки». Если размерность задачи очень большая (например, при обработке текста так), то обычно линейные классификаторы используются вроде линейных SVM или Logistic Regression, или какая-то предобработка для уменьшения размерности (PCA, например) и более сложный метод (например, SVM с ядром). Для классификации последовательностей — структурные модели — например, CRF и Structured Perceptron. С изображениями свои тонкости. Кроме самого классификатора везде очень большое значение имеет то, какие именно фичи использовать, часто — решающее.

Еще есть нейросети, которых много видов и которые для всего подряд используются, но я с ними дела почти не имел. С задачами регрессии (когда нужно предсказать числовое значение, а не категорию) тоже редко сталкивался, но там вроде все похоже — SVM, простые линейные модели, если данных много; что-то другое, если данные образуют структуру (последовательность, например).

Вот можно картинку глянуть, чтоб какое-то общее представление составить: scikit-learn.org/stable/tutorial/machine_learning_map/index.html
Спасибо больше за развернутый ответ! А используются ли на практике сейчас алгоритмы байесовского вывода? (байесовские сети доверия и т.п.)? Или это совсем другая область?
Сам с ними дела не имел. Хм, ну как сказать — с точки зрения графических моделей можно на те же CRF, например, смотреть. Тут разница, видимо, в том, применяется ли универсальный инструмент, позволяющий описать произвольную графическую модель и использовать ее, или же инструмент, описывающие конкретный класс моделей. На практике, насколько знаю, чаще используют «заточенные» инструменты — например, реализации linear-chain CRF первого порядка. Мне кажется, происходит это по двум причинам:

1) специализированные инструменты проще оптимизировать, они работают быстрее;
2) специализированные инструменты могут требовать меньше знаний для того, чтоб их использовать.

По ощущениям — это все еще не мейнстрим (т.к. медленно и требует знаний), но, похоже, «универсальные» алгоритмы будут использоваться все больше и больше, т.к. появляется больше удобных инструментов, которые позволяют задать графическую модель и нажать кнопку «вывести!». Исследователи их любят в научных статьях использовать, т.к. с ними можно формулировать задачи в более-менее унифицированном виде и решать их, не озираясь на ограничения стандартных пакетов — явно задавать всяческие заранее известные вероятности, например.
вот например скрытые модели Маркова это подвид байесовской сети, соответственно и выводы одноименные, вот гляньте результат трекинга объектов на HMM
Если честно, не могу сопоставить скрытые модели Маркова с видео. Каким образом здесь используется эта модель? Что является наблюдаемыми переменными, а что — искомыми? Каким образом задаются наблюдаемые переменные (вносятся свидетельства в сеть)? (заранее прошу прощения за глупые вопросы, только начинаю интересоваться темой)
ну вот гугл например первой ссылкой у меня выдает такую статью A NEW WAY TO USE HIDDEN MARKOV MODELS FOR OBJECT TRACKING IN VIDEO SEQUENCES на запрос hidden markov model for object tracking, ну можно там дальше по списку идти

но я бы советовал вот эту статью Object detection using HMM, заметьте 1994 год

если все упростить до предела, то скрытые переменные это метки объекта на картинке, а видимые это пиксель и его окружение

сейчас вот курс начался там будет это все рассматриваться https://www.coursera.org/course/artificialvision, я смотрел оглавление, очень не плохо вроде
Видимо, я неправильно интерпретировал видео. Оно не распознаёт образ. Оно отслеживает заранее поставленную оператором метку. Верно?

Спасибо за ссылки!
ага, именно трекинг объектов на видео

я вообще не спец в хмм, но думаю есть и распознавание
раз уж в этом уровне пошла критика, вставлю свои 5 коп

по мне так для хорошего восприятия поста не хватает формул, код это конечно хорошо, но код — это хорошее дополнение к формулам, я например особо не вникал в ваш код,

вот после строки
Итак, к делу. Для начала нужно классифицировать хоть как-нибудь с удовлетворительной точностью.

и спойлером "Обучаем" я бы хотел видеть описание алгоритма, разбор по деталькам, если есть математика то чтобы она была выражена в формулах, а в конце код — как приложение к разбору алгоритма
В итоге у меня, после обучения, получилась структура которая даёт 1.4% ложно негативных и 1.1% ложно положительных ответов, обобщив 241 положительный пример 49-ю логическими группами.

на обучающем множестве или на тестовом?

такую модель просто необходимо проанализировать на переобученность, что то мне подсказывает что так оно и будет
Лет 10 назад попадался на глаза некий алгоритм Trepan, в котором, насколько помню, сначала тренируется нейросетка, а потом из нее извлекается дерево решений
Вот еще бы сравнить с С5.0 или хотя бы с J4.8 из WekaWeka.

Причем именно на k-fold тестах, об этом правда уже написали выше.
А то на тренировочной выборке получить 100% — не проблема, банальный подбор функции можно сделать, типа генетики.

И кстати задачка-то с несимметричной ценой ошибки, ложная детекция опухоли — штука стремная, муж ложно облученной девушки может и по голове настучать и демонстрация ему исходников не поможет…
Таки в следующий раз сделаю скользящий контроль, но насчёт сравнения не обещаю. Данные выбирал по лёгкости преобразования в бинарный вид и не в коем случаи не стоит использовать данный метод на практике так, как он не протестирован, как выше уже указали.
Так а C5.0 или J4.8 — они все текстовые файлы принимают на вход.
Более того, по Вашей же ссылке на датасет — как раз данные в C5.0 формате, все что надо — запустить с командной строки
c5.0 -f breast-cancer-wisconsin -X 4
Только не забыть что он два файла на вход требует — names и data (тот на который линк).
А тот names что лежит в их каталоге, он никакой не names, а список работ почему-то

Вот я сделал нормальный names

2,4. | classes

Sample_code_number: continuous.
Clump_Thickness: continuous.
Uniformity_of_Cell_Size: continuous.
Uniformity_of_Cell_Shape: continuous.
Marginal_Adhesion: continuous.
Single_Epithelial_Cell_Size: continuous.
Bare_Nuclei: continuous.
Bland_Chromatin: continuous.
Normal_Nucleoli: continuous.
Mitoses: continuous.

вот результат на 4-folds

Fold        Decision Tree
----      ----------------
          Size      Errors

   1        10        4.0%
   2         8        4.0%
   3         8        4.6%
   4         8        5.7%

  Mean     8.5        4.6%
  SE       0.5        0.4%


           (a)   (b)    <-classified as
          ----  ----
           441    17    (a): class 2
            15   226    (b): class 4
Sign up to leave a comment.

Articles