Решая задачу машинного обучения, мы зачастую используем все признаки, что у нас есть, надеясь, что дополнительные признаки дадут классификатору дополнительную информацию. Однако существуют признаки, которые, будучи добавлены в классификатор (дерево решений), существенно ухудшают точность классификации. Предлагаю назвать такие признаки отравляющими. На сайте опубликована статья, посвящённая этой теме.
Бритва Оккама
— А где же изобретатель очередной теории суперструн?
— Он не придёт; порезался бритвой Оккама.
C++: не инициализируйте объекты символом “=” ›››
Всё сказанное здесь не относится к Visual Studio. В этой системе, вопреки стандартам, инициализация равенством эквивалентна инициализации скобками (кроме случая explicit-конструкторов).
Часто можно встретить код, в котором конструируемый объект инициализируется символом «=»:
Такая запись называется инициализацией копии (copy-initialization).
На сайте govnokod.ru к этой статье отнеслись достаточно негативно (цитирую: «автор ебанулся»). В оправдание скажу, что с тех пор статья была сильно доработана.
Привычка использовать инициализацию копии пошла, видимо, из «сишных» времён, когда классов и конструкторов не было, а указанная запись была единственным способом инициализации. Вместо этого следует, где только можно, использовать вариант со скобками:
Эта запись называется прямой инициализацией (direct-initialization).
Давайте разберёмся со всеми «за» и «против». Читать дальше ›››
Функция — конопля ›››
На Хабре появилась тема, упоминающая мою давнюю работу — функцию, график которой напоминает лист конопли. К сожалению, в связи с неотвратимым наступлением нового года я сейчас не могу уделить этой проблеме достаточно внимания, поэтому просто публикую некоторые материалы Читать дальше ›››
Почему я до сих пор программирую ›››
Недавно Дэниел Лимайр (профессор Университета Квебека в Монреале) разместил в своём блоге замечательную статью «Why I still program». Публикую с согласия автора перевод статьи на русский язык.
Люди ожидают, что, как только ты становишься старше, ты бросаешь практические занятия, такие, как программирование, ради более достойных вещей — управления коллективом и поиска финансирования. Это особенно верно в научной среде, где «настоящие учёные» не вникают в детали, занимаясь лишь «общей картиной происходящего». Другими словами, организации нацелены на вертикальное сотрудничество — иерархическую структуру, в которой люди наверху руководят другими (более дешёвыми) работниками. В исследовательской среде это означает, что старшие научные сотрудники дают идеи, а молодые сотрудники их реализовывают. Со временем старшие сотрудники могут разучиться делать то, что делают молодые, но зато они становятся специалистами в области добывания денег. Масштаб такой модели может расти: старший учёный руководит учёными среднего звена, а те, в свою очередь, молодыми сотрудниками, и так далее. Джордж Чем назвал такую модель «профессорской пирамидой», так как она работает лучше всего, когда финансирование обильное и постоянно возрастает Читать дальше ›››
Презентация TeX, LaTeX, и всего, что с ними связано ›››
Когда-то я делал для магистрантов Высшей школы экономики презентацию системы компьютерной вёрстки текста TeX и других относящихся к ней программ. Сегодня наткнулся на эту презентацию и подумал, чего добру пропадать.
В презентацию вошли следующие темы:
- система компьютерной вёрстки TeX и её модификации;
- система описания и растеризации шрифтов METAFONT;
- набор макрорасширений LaTeX;
- программное обеспечение, необходимое для использования LaTeX под Windows.
Сама презентация сделана в LaTeX с использованием пакета Beamer. Изучив её исходный код, вы сможете разобраться с тем, как создавать презентации в LaTeX:
- скачать презентацию (PDF-файл, 1.9 Мбайта, скачан 293 раза);
- скачать презентацию и её исходные файлы (ZIP-архив, 1.7 Мбайта, скачан 367 раз).
Также вы можете посмотреть презентацию прямо здесь. Читать дальше ›››
Как преподавать Си? ›››
Когда пару лет назад передо мной стала задача научить первокурсников МФТИ программировать на Си, я столкнулся со следующей трудностью: как подобрать такую последовательность подачи материала, чтобы каждая новая тема опиралась на предыдущие темы, и при этом не требовала использования ещё не изученного материала?
В этом плане хороши Паскаль и Питон: в них ввод-вывод осуществляется операторами языков (не функциями), а для написания простейших программ не нужно создавать функции и использовать указатели.
Язык Си как будто специально создан так, чтобы иметь зависимость своих концепций друг от друга. Хотите написать программу, выводящую «Hello, world»? Будьте добры, включите заголовочный файл stdio.h (используется препроцессор), создайте функцию main (для этого нужно знать функции), создайте строковый литерал "Hello, world" (указатель на строку символов, оканчивающуюся нулём), вызовите функцию printf, и так далее (рисунок 1).
Решения задач по программированию ›››
Недавно я опубликовал несложные задачи по программированию и получил несколько просьб привести также решения. Что-ж, пожалуйста. Начну с простых задач; дополнительные задачи требуют подробного описания, поэтому я рассмотрю их в следующий раз.
Смотреть решения ›››Контрольная работа по программированию ›››
Сегодня провёл у своих оболтусов (магистранты, 5-й курс ТТИ ЮФУ) контрольную работу по программированию. Правила игры были следующие:
Каждый студент тянет билет с задачей. Если билет ему не нравится, он может решить одну из дополнительных задач, на своё усмотрение.
Основные задачи оцениваются в 10 баллов каждая. За неоптимальное решение задачи предусмотрено снижение оценки; это оговорено в условии каждой задачи.
Дополнительные задачи оцениваются в 11 баллов каждая. Они в полтора раза сложнее основных, но оцениваются всего на бал дороже, так как студент может выбрать себе дополнительную задачу по вкусу.
В общем, дополнительные задачи так никто и не решил. Основные задачи были решены, но очень туго. Год назад я давал подобные задачи первокурсникам МФТИ, там всё это шло влёт.
Смотреть условия задач ›››Операция запятая в C++ ›››
Как ни странно, программисты редко уделяют внимание изучению и использованию операции запятая (comma operator) в языке C++. Я опубликовал на сайте статью с подробным описанием того, что я знаю о запятых. Читайте.