Решил портировать just for fun одну небольшую но нетривиальную библиотеку со Scala на Kotlin. Про Kotlin читал и посмотрел несколько презентаций.
Плагин работает достаточно быстро и правильно выделяет места с ошибками, НО сообщения об ошибках плагин выдает как правило глупые и приходится запускать компилятор (сборку проекта), чтобы получить внятное сообщение об ошибке. А вот сборка проекта работает оочень медленно - проект из пяти классов собирается 8 секунд.
Печалька
Ilya Klyuchnikov's Notes
Friday, April 26, 2013
Monday, May 28, 2012
Seven Databases in Seven Weeks
Просто обожаю такие книжки. Прочел за два дня.
Polyglot persistence - это круто и интересно. А в mongodb и couchdb самым гуманным образом сделан mapreduce.
Polyglot persistence - это круто и интересно. А в mongodb и couchdb самым гуманным образом сделан mapreduce.
Tuesday, March 6, 2012
Programming collective intelligence
Programming Collective Intelligence by Toby Segaran.
Давно хотел прочитать эту книгу и вот, наконец, сделал это. Очень жалею, что не прочел раньше. Одна из самых лучших книг по программированию из прочитанных мной за все время.
Достоинства книги:
Почему книга настоятельно рекомендуется к прочтению программистам:
Давно хотел прочитать эту книгу и вот, наконец, сделал это. Очень жалею, что не прочел раньше. Одна из самых лучших книг по программированию из прочитанных мной за все время.
Достоинства книги:
- Книга очень легко читается, автор не страдает болезнью разжевывания. Воды в книге нет.
- Каждая глава является (почти) самодостаточной.
- Примеры закодированы на Питоне: код краток. (Сравните с книгами Collective Intelligence in Action или с Algorithms of the Intelligent Web, где примеры закодированы на Java.)
- Очень хорошо (интуитивно понятно) обосновывается, за счет чего алгоритм работает.
Недостатки (которые не умаляют достоинств):
- В подавляющем случае нет ссылок на первоисточники. (А в книгах Collective Intelligence in Action, Algorithms of the Intelligent Web и Machine Learning in Action такие ссылки есть.)
- В книге отсутствуют (интуитивно понятные) объяснения, как работают метод опорных векторов и как работает алгоритм неотрицательной матричной факторизации ("beyond the scope of this book").
- Некоторые важные трюки описаны, но не подчеркнута их важность. Пример: при иерархической кластеризации, когда две группы сливаются в одну группу, то показатели новой группы вычисляются как среднее между показателями исходных групп. В книге есть еще несколько таких мест.
- В основе большинства алгоритмов искуственного интеллекта (Artificial Intelligence) и машинного обучения (Machine Learning) лежат очень простые трюки (или даже хаки) которые очень хорошо работают в некоторых условиях. Навых понимания того, что очень простой трюк может привести к правильному и эффективному решению, крайне важен для программиста. Основа этих алгоритмов очень проста (не rocket science).
- Чтобы понимать, как работает современный интернет. Алгоритмы описанные в книге, лежат в основе повседневных современных вещей (см. краткое содержание дальше). Все мы ленивые и мало читаем. У всех у нас есть неправильные наивные представления о вещах, про которые мы не знаем наверняка. Однако, стыдимся своего невежества. Очень грустно слышать, когда коллега по работе (например) начинает с легкостью рассуждать, про то, как работают алгоритмы кластеризации, имея превратное и неправильное представление. В общем, надо прочесть, чтобы побороть свое невежество.
Ну теперь краткое содержание книги по главам. Все алгоритмы делятся на обучение с учителем (supervised learning) и обучение без учителя (unsupervised learning):
- Введение. Общие слова.
- Построение рекомендаций. Алгоритмы, лежащие в основе рекомендаций amazon, imdb и т.д.
- User-based recommendations. Среди пользователей ресурса находятся N наиболее близких к вам, а затем делается из их топовых предпочтений делается взвешенная (weighted) рекоммендация для вас.
- Item-based recommendation. Трюк: матрица предпочтений переворачивается. В результате находятся похожие продукты. Этот алгоритм лежит в основе рекоммендации от amazon. Плюс данного алгоритма - требует меньше вычислительных ресурсов.
- Обнаружение групп/структуры в данных.
- Иерархическая кластеризация. Набор данных представляетс в виде древовидной иерархической структуры. Примеры книги - иерархическая классификация блогов. Иерархия строится снизу вверх. Классификация предпочтений. Пример из другой книги (Data mining) - автоматическое построение иерархии видов/классов для животного мира. Как может применяться? Для рекомендации - вам могут порекомендовать купить предметы, которые находятся в той же (достаточно узкой) группе.
- Иерархическая кластеризация столбцов. Применяется трюк, похожий на трюк из предыдущей главы - матрица предпочтений/аттрибутов переворачивается. В результате получается иерархия аттрибутов. Пример в книге - нахождение "главных" слов, которые наиболее употребляются в той или иной группе блогеров.
- Кластеризация на N групп через усреднение (K-means clusterization). Здесь все просто. Говорите: хочу выявить N групп. Группы ищутся через рандомизацию/усреднение.
- Поиск и ранжирование. Реализован небольшой google на Питоне.
- Оптимизация. Минимизируется некоторая целевая функция, зависящая от многих параметров. Рассмотренные методы широко известны. Иллюстрируются на двух примерах: поиск расписания полетов для семейной встречи, расположение связей (социального графа) на плоскости так, чтобы пересекалось как можно меньше связей. Отдельно стоить отметить, что алгоритмы закодированы в обобщенном виде, - и применимы ко многим задачам.
- Случайный поиск.
- Метод спуска (обычного, не градиентного).
- Имитация отжига.
- Генетические алгоритмы.
- Фильтрация документов (спам/не спам).
- Наивный Байесовский классификатор. Каждый взрослый человек должен понимать теорему Байеса!
- Метод Фишера. Основной трюк - тестирование, насколько данная комбинация слов является случайной.
- Деревья принятия решений (decision trees).
- Чем-то похоже на построение иерархической кластеризации из главы 3. Большое отличие - дерево строится сверху вних! Для разбиения можно использовать разные метрики:
- Энтропия.
- Индекc Джини.
- Дисперсия.
- Как и алгоритмы оптимизации, алгоритмы закодированы в обобщенном виде и легко применимы к новым задачам.
- Предсказание численных значений.
- Среднее по K-соседям.
- Поиск масштабирования атрибутов. Для этого множество разбивается на два подмножества: обучающее и тестирующее. Поиск оптимальных масштабирующих параметров происходит алгоритмами оптимизации из главы 5. (Одно из самых красивых мест в книге - когда на помощь одному эвристическому алгоритму приходит другой эвристический алгоритм!)
- Продвинутые методы классификации.
- Метод опорных векторов. - Поиск сложных разбиений между группами.
- Поиск независимых компонент. Пример: формирование заголовков новостей. Похожие алгоритмы применяются сервисами вроде google news или яндекс новости. Суть - данные представляются в виде матрицы и мы пытаемся эту матрицу представить в виде произведения матриц.
- Метод неотрицательной матричной факторизации. - Пожалуй, самые красивый алгоритм из всей книги.
- Эволюционирующие алгоритмы. Построение программы, которая угадывает некоторую функцию.
- Генетические алгоритмы.
- Повторный обзор рассмотренных алгоритмов.
Автор книги Toby Segaran является также соредактором книги Beautiful Data и соавтором книги Programming the Semantic Web. Книга Beautiful Data, судя по оглавлению, очень интересна.
Sunday, November 20, 2011
Metacomputation: Metasystem transitions plus supercompilation
Нелегкая статья для восприятия, так как очень и очень плотная по количеству материала. Одна из последних работ Турчина. Можно даже сказать, что итоговая.
Мне эта статья очень помогла в понимании предыдущих работ В.Ф. По крайней мере здесь очень понятно описаны две вещи, которые встречаются и в более ранних статьях:
Мне эта статья очень помогла в понимании предыдущих работ В.Ф. По крайней мере здесь очень понятно описаны две вещи, которые встречаются и в более ранних статьях:
- Объяснена нотация для графов конфигураций: (x → s.1 x)(s.1 → ‘a’) (y‘b’ ← y) – она используется во многих других работах, но у меня часто от нее оставалось ощущение недопонимания. Здесь еще мешает пониманию стремление Турчина написать (x → s.1 x), а не (x → s.1 x1) - то есть повторно использовать ту же самую переменную, экономя на именах.
- Стало понятно, что же такое walk grammar и почему они лучше получаются для плоского языка (в общем случае walk grammar является context-free, а для плоского языка она regular).
Теперь с новыми силами можно перечитать курантовский отчет.
Saturday, October 29, 2011
Wednesday, October 5, 2011
Groovy
Эклипсовский плагин для Groovy хорош, быстр и не глючит.
Из книжек рекомендую Programming Groovy - из-за размера: всего 300 страниц текста, прочитывается за пару дней.
Дальше, конечно, Groovy in Action (включая второе издание) - однако, данная книжка порой слишком многословна.
Thursday, July 7, 2011
Чтение в городе
Learn You a Haskell for Great Good!
Лучшая книга (из прочитанных мной) по Хаскелю. Основное достоинство - осмысление накопленного опыта (community). Именно в таком порядке и должно быть: Functor, Applicative Functor, Monoid, Monad.
По духу и въедливости напоминает "Thinking in Java". Начинается (как кажется) книжка весьма банально. Однако, не успеваешь оглянуться, как автор уже объясняет type lambda и <:<
Как введение в сам язык R, книжка, возможно, не самая лучшая. Однако, очень хорошо передает "дух" работы с данными в языке R. R очень непохоже на все остальное. Рекомендуется для расширения горизонтов.
Содержание всей книжки рассказывается (и показывается) максимум за 2 часа. Нужно пролистать и попробовать примеры.
Subscribe to:
Posts (Atom)