Pull to refresh
45
0
Сергей Кокорин @kokorins

User

Send message
Мне очень понравился код, который у вас получился. Жалко, только что без прочтения help по R, не понятно, что он делает. Еще очень плохо, что на R там реализована только проверка параметров, дальше идет вызов внутренней функции bincode (на plain c), cut.R;ln58, в которой кстати реализован не наивный, а дихотомический подход util.c;ln1915.
На самом деле все несколько по другому: у меня был код на c++, которых хотелось бы описать, кстати, я почти уверен, что профессионал c++, точно так же скажет, что код никуда не годится, и в целом будет прав.

Я решил изложить сам алгоритм в виде статьи. В качестве средства создания статьи использую R Markdown. Заодно написал код на R, потому что его синтаксис, в моем представлении соответствует уровню псевдокода. Если вы подскажете, как его поправить будет просто отлично.
По пунктам:
1. Использование в модели плотности непрерывного распределения и использование конечной дискретной функции вероятности приводит к аналогичным функциям расчёта. Согласен, что забыл это уточнить в статье. По поводу того, что использую непрерывное распределение: все мои потуги придумать живой пример с дискретным распределением оказались тщетны. Было бы здорово, если бы кто-нибудь что-нибудь предложил (подбрасывание бракованной монеты или шулерской кости не в счёт).
2. Согласен, сейчас подправлю. По программистской привычке пользуюсь сигнатурой, а не именем.
3. Это не алгоритм оценки параметров, это алгоритм обучения. На самом деле я просто хотел сразу же ответить, откуда мы можем взять начальную модель. То что Вы называете алгоритмом оценки параметров, у меня упоминается как алгоритм Баума-Велша (Он как раз EM-алгоритм, которому все равно нужна 0-ая итерация). Я надеюсь, что оформлю про него отдельную статью.
На эту тему вспомнился случай. Пришлось изучать один старый алгоритм классификации данных, который был реализован, судя по коду, биологом. Человек не зная того, сам заново открыл логистическую регрессию.
Использование Витерби в анализе звука очень распространено, но описания лучше, чем у Рабинера нигде не могу найти.
Нейронные сети все-таки это средство для создания моделей, а не сами модели, но тема сравнения различных подходов лично меня бы очень заинтересовала.
Все чаще ловлю себя на мысли. что в большом сообществе, очень часто находятся те, кто может написать быстрее, лучше или (не исключающее) понятнее.
А шаблоны по ГОСТу будут?
Каким образом можно прикрутить свою библиографическую библиотеку (.bib, jabref)?

Насчёт перевода в облако научных документов стоит упомянуть: R markdown.

А так удачи, полезное дело.
Я вот до сих пор не уверен насколько корректно использовать слово etalon. Более правильное pattern, standard. но pattern уже занято, а использовать standard мне очень не удобно. Ethanol хорошая альтернатива =).
Как раз vm.count(var_name) проверяет встречается ли такой параметр во входных данных, так что не все параметры обязательные.
Отвечу в обратном порядке:

Про статическую типизацию не понял, все равно аргументы все строковые, а значит lexical_cast будет плеваться динамически. функция as статически типизирована

Привязать переменные можно: в примере так обрабатывается task_type. В таком подходе я вижу следующую проблему, так как я описываю все возможные интерфейсы в одном месте, то прямо там нужно инициализировать все переменные. Если групп больше двух, то получается месиво из переменных, большая часть из которых остается не инициализированной.

Я воспринимаю аргументы командной строки как внешний интерфейс: переименовывание/удаление/добавление аргументов означает изменение контракта на интерфейс со всеми вытекающими.

Насчёт, как это сделать DRY и можно ли это — надо подумать.
С boost таких косяков много, но мне он не критичен.
Ручная обработка ошибок на типы аргументов заставляет меня грустить.
Я полностью согласен, что это очень полезная опция и и возможность создания скрытых опции неявно следует из следующего кода. Никто ведь не обязан передавать все группы в --help. Например, так:
desc.add(train_desc).add(recognize_desc);//.add(score_desc); std::cout << desc << std::endl;
Я долго думал, что включить: custom parsers, config files. Решил остановится на том, что качует из проекта в проект и только это. Библиотека не очень большая, и самое тяжёлая задача убедить себя. что её использовать проще, чем написать очередной парсер самому.

Мне было проще было читать код, чем доки, поэтому не очень хорошего о них мнения.
Есть слишком много вещей, которые хочется взять и переписать с нуля, но времени на всё не хватит и значит с чем-то приходётся мириться. Если говорить о Qt, то мне гараздо больше не хватает вменяемых chart-ов.
А задние номера не читает? На 0.36 секунде в противоположную сторону едет машина с номером с985ну/199.
Рад, что пригодилось. В проектах каждый раз заново воспроизвожу эту логику, решил зафиксировать в виде заметки.

Information

Rating
Does not participate
Location
Berlin, Berlin, Германия
Registered
Activity