Pull to refresh

Comments 30

Имеется собранный (размеченный) датасет, существенного размера

Стоит заметить, что transfer learning может помочь с устранением этого недостатка. Правда, не всегда, но все же.

(например, см. вот эту статью)

А при чем тут это?
В этой статье есть ряд примеров, показывающих, что поведение предиктора может быть крайне удивительным для пользователя и внутренние зависимости могут быть крайне не интуитивны.
Понятно, спасибо. На самом деле там же довольно простая математика этого явления, как только разберешься вроде уже и интуитивно.
Немного капитанства:
1) Сбор данных в виде машины времени и инсайда это немного не из области анализа.
2) Логарифмы в НС вносятся или примесью нейронов с другими сжимающими функциями или банальным добавлением каждого параметра в виде двух параметров — параметр и его логарифм. В нашей задаче мысль о логарифме является априорной, и этого может хватить, в других случаях можно дать много разных функций, да увеличив размерность при нетривиальной связанностью данных, но неудачные входы можно "гасить" или анализом получившейся обученной сети или структурой сети.
3) ваш анализ в значительной степени базировался на фильтрации пар входных образов в которых различие входов было минимальным.
В принципе пул таких дельта-образов отфильтрованный по степени схожести (скажем самые схожие 0,01% всех пар) был бы неплохим пулом обучающих данных. Не совсем понятно правда как их подмешивать в основной поток, ведь два независимых пула данных с разной структурой это не очень хорошо (и да, я помню что я уже так логарифм подмешивать предложил). Как вариант считать обычные образы дельтой от нулевого образа (который у нас априорно — все нули дают ноль).

Не спорю с общим выводом статьи, просто накидываю на вентилятор надеясь на интересное обсуждение. Статья интересная, большая благодарность.
Согласен, но получается, что мне сначала нужно угадать про логарифмические дельты (причем не обязательно сразу угадывать, что это правильный ответ), а потом применять алгоритм обучения. В принципе идея неплохая, но в получается, что она бы уже была фактически решена, как только стало понятно какие могут быть факторы реально определяющие зависимость. В общем как ни круты выходит решающим feature engineering.

И ещё нужно было бы сделать модель time-aware, так как плюсы нужно считать во времени. Для подсчета корпоративной кармы у меня фактически одна reliable точка была (ну ок, на самом деле штуки 3-4).
Логарифмы достаточно частое явление и в принципе напрашиваются на этапе нормализации.
Тут нужно экспериментировать, но я бы ожидал что высокая зависимость на низких значениях и низкая зависимость на высоких должна быть заметной, а это явное показание к логарифму. Четко мысль не сформулирую, надо будет подумать на досуге. Но думаю найдутся хорошие эвристики которые можно даже в НС запихнуть.

Что касается разницы, то разница это тоже распространенная стратегия. В модели НС которую я последний год обдумываю (всё никак нет времени дойти до написания и тестов) такое поведение образуется автоматически. Ну и в принципе — близнецовый метод это классика.

Вообще хотелось бы объясниться. По моему мнению, во многом совпадающему с мнением автора статьи — самое сложное в этом анализе это сбор данных и нахождение наиболее информативных данных в этой массе. Добыча данных не формализуется в принципе (без полноценного ИИ способного общаться, выведывать информацию и т.п.). Для второй части можно, и нужно по возможности привлекать автоматику. Я люблю НС, да и в теме они звучат, так что хочется по возможности привлечь их к задаче.

Ну и чуть оффтопа. Сегодня в споре мамочек-педагогов в меня швырнули школьной математической задачкой.
Поскольку задача решалась на слух и на бегу, то решалась она типично для машинного обучения:
По мере получения мною фактов из задачи я выводил новые факты исходя из тех правил которые мне известны.
Цель я узнал уже в конце, когда у меня уже был готов ответ, хотя я и не знал что именно он мне нужен.
Т.е. я не вычислял переменные потому что они мне были нужны, а вычислял их "потому что могу". И это сработало.
Я их дискуссию не особо отслеживал, но если я правильно реверснул их выкладки, то один из способов решения (стратегия а не формула) который новая учебная программа должна давать детям именно в этом и заключается — выписывать факты и по возможности выводить из них новые пока не дойдешь до цели. Вторая стратегия это параллельно двигаться со стороны цели выписывая какие данные тебе бы помогли, т.е. некие подцели.
хм, интересно в эту стратегию укладывается поведения ua-hosting.
Но статьи у них чаще всего интересные, иногда хромает полнота (про советские миниЭВМ, например).
Мне кажется, у них в некотором роде гибридная стратегия, когда могут пишут интересные научно-популярные посты. В остальное время много маленьких статей.

Сейчас посмотрел подробней, мне кажется они все-таки больше тяготеют к первой стратегии.
Статья про машинное обучение, но зачем-то выводятся формулы. ) Что мешало взять в качестве "features" все параметры из таблички, взять в качестве "target" рейтинг. Построить модель, например, с помощью XGBoost. И дальше проверять на ней — увеличил количество статей на единичку, скормил модели, посмотрел рейтинг, увеличил подписчиков на единичку, посмотрел рейтинг и.т.д.
Статья, как раз о том, что не нужно думать, что можно взять какие-то числа и использовать магический алгоритм обучения, который со всем сам разберется. Подробнее:

  • Какие именно числа нужно взять и откуда их взять?
  • Числа из таблички выучат мусор, потому в ней нет ключевых фич
  • Модель должна быть time-aware, здесь ключевой компонент зависит от времени, как это учесть в алгоритме обучения?
  • XGBoost — модель хорошо масштабируемая на данных, тут данных с гулькин хвост, зачем она здесь?
  • XGBoost — алгоритм из семейства ансамблей, у них не слишком хорошо с interpretability, а здесь это с самого начало предполагалось важным условием
Какие именно числа нужно взять и откуда их взять?
Числа из таблички выучат мусор, потому в ней нет ключевых фич

Вы используете показатели из профиля компании, почему бы не взять их?
И еще: почему вы искали единичные примеры, а не построили график зависимости хабраиндекса от каждой переменной?

Модель должна быть time-aware, здесь ключевой компонент зависит от времени, как это учесть в алгоритме обучения?

Собрать данные за несколько периодов времени?

XGBoost — алгоритм из семейства ансамблей, у них не слишком хорошо с interpretability, а здесь это с самого начало предполагалось важным условием

У нейронных сетей тоже с этим "не слишком хорошо", по идее, от этого метода можно отказаться на этапе "Нам нужно, чтобы ты определил ключевые факторы, которые на него влияют"
Вы используете показатели из профиля компании, почему бы не взять их?

Показатели нужно выбрать и как-то превратить в численный вектор, например страница подписчиков и работников содержит пачку показателей — сложить для разных работников, выписать отдельно, посчитать их количество, учитывать общее число плюсов, за все посты? (Это никак не даст фактор кармы полученной на корпоративных постах, например). В этом и состоит feature engineering — понять, что может быть ключевым фактором и смысл статьи во многом в том, что этот важнейший шаг не получает внимания и люди начинают считать, что его можно обойти одним только умным методом обучения.

О времени — тут у нас есть очень сильный background knowledge о границе для пользователей, который естественным образом обобщается на корпоративный индекс.

И еще: почему вы искали единичные примеры, а не построили график зависимости хабраиндекса от каждой переменной?

Есть идеи как это нужно было сделать? Для этого нужно иметь достаточно данных, в которых все остальные параметры равны. Или вы имеете виду, построить регрессию по каждому из параметров и оценить качество?
Какой смысл привязываться к всем остальным факторам, если вы в ручном подходе тоже привязываетесь не ко всем? Например, делая вывод о влиянии кол-ва подписчиков, вы берете две компании, у которых зафиксированы только два других фактора (публикации и сотрудники). Вот интересно проверить: если взять график хабраиндекса от кол-ва подписчиков (без оглядки на другие факторы), будет видна логарифмическая зависимость?
Не будет ничего видно. Шум выше полезного сигнала на порядок, да еще и нехило коррелирует с сигналом.
(рост колва подписчиков связан с популярностью тематики, а значит и популярностью контента и т.п.)
А что мешает? У вас же есть опыт построения графиков для проверки маргинальных теорий датамайнинга. На Хабре 309 компаний. Даже руками это будет не сложно. Да и другим интересно будет я думаю. Не столько график сколько дискуссия на тему подходов которые вы будете использовать при построении и интерпретации.
Я уже вижу как вы найдете логрифм не в графике а в шкале, чем подтвердите мою мысль о нахождении логирифма при нормировке, но будете считать что депутаты это исключение это и есть "видно из графика что зависимость логарифмическая"
Переход на личности без аргументации и с попутным перекладыванием задачи доказательства своей правоты на оппонента — это простой, но неэффективный способ ведения дискуссии. До свидания.
1 ) Переход на личности? Да. Вы опасно некомпетентны в дата-майнинге, и я я стараюсь везде где это возможно подчеркивать.
2 ) Без аргументации? Нет. Аргументы слишком просты и очевидны. И были приведены.
3 ) Перекладывание задачи доказательства… Что простите? Вам захотелось графика. Бессмысленного графика. Что видно из формулы и размера выборки. Даже не нужно смотреть "навскидку" на цифры, чтобы понять весь абсурд. Но вам захотелось. Я здесь причем? Вы мне кто, чтобы я вам ДОЛЖЕН был что-то доказывать? Ну честно, это школьный уровень. Не для каждой школы, но школьный.
4 ) Я действительно не понимаю в чем проблема построить график если вам так уж интересно убедиться в своей неправоте а не понять аргументацию? Вы же умеете строить графики. Не умеете их интерпретировать, но строить то умеете. Возьмите и постройте. Или лень парсить данные? Или не умеете? Ну так попросите. Мне не лень ЗА ВАС сделать работу, чтобы потом понаблюдать за тем что вы будете с этим делать.
5 ) И нет, я не выпендриваюсь, я просто реально не вижу как можно построить график с таким размером выборки, и такой структурой данных, чтобы можно было что-то увидеть. Если бы на порядок-другой больше выборка то ладно… Напарсить за вас могу, но строить график? Увольте.
Я все пытаюсь сообразить как сделать регрессионную модель на основе LSTM, чтобы заранее оценивать рейтинг и количество просмотров статей. По идее это можно сделать с помощью Torch7 http://dmandreev.github.io/2016/03/05/torch7-windows/
В смысле оценивать рейтинг и количество статей на Хабре? А что будет входными данными? Текст и мета-информация статьи (автор, теги, заголовок) и тд?
Да, чистый текст и заголовок. Сценарий который я хочу реализовать — скармливаем сети новую статью а она предсказывает сколько будет у нее рейтинг, объем просмотров и комментариев.
Забавно. Но задачка как раз в контексте статьи.
Думаю хорошие результаты покажет алгоритм который сначала выделяет ключевые слова, а потом по весу ключевых слов определяет вероятную популярность. Я бы вычислил словарь Хабра, раздал бы веса от частоты слова, чтобы узнать важность слова в тексте (редкие слова имеют больший вес, частые — меньший). Стопслова не отбрасывал бы, потому что они отражают стиль.
Потом раздал бы веса по корреляции с оценками.
Если был бы бюджет, то дал бы сетке на кластеризацию, это дало бы возможность автоматически нагенерировать сотню других параметров вроде моей "водности текста". Фразы бы еще по нескольким параметрам оцифровал бы, для дополнительных стилистических параметров.
Задача вполне себе решаемая численными методами вроде НС, но требует очень большого массива ручной аналитики и априорных знаний. О чем собственно и статья.)))
Хочется не заморачиваться с ключевыми словами и word2vec, дать на вход сети именно набор букв, LSTM как раз такие фокусы и позволяют.
Кстати, а почему именно Torch, а не CNTK? Мне казалось логичным, что он заточен по Windows.

А вообще было бы круто сделать что-то похожее на iconosquare для статей, особенно если модель будет ресурсо-независимой, т.е. входные данные действительно только текст+заголовок (и может быть теги?). Этакий легко-разворачиваемый http://www.habr-analytics.com (кстати, надо бы его воскресить уже).
Именно для того чтобы потом перенести в CNTK, у Torch7 примеров больше, а у CNTK пока никаких биндингов кроме c++ нет.
UFO just landed and posted this here
Тут критическим является тот фактор, что функция детерминированная — то есть, если есть две точки отличающиеся только одним параметром и есть разница в индексе, то фактор существенен (или какая-то функция от него).

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

А вообще, да, отличное замечание.
UFO just landed and posted this here
О, спасибо! Ознакомлюсь.
Sign up to leave a comment.

Articles