Как стать автором
Обновить
4
Карма
0
Рейтинг

Пользователь

Краткий курс машинного обучения или как создать нейронную сеть для решения скоринг задачи

Python *Программирование *Алгоритмы *Машинное обучение *Искусственный интеллект
Туториал
image

Мы часто слышим такие словесные конструкции, как «машинное обучение», «нейронные сети». Эти выражения уже плотно вошли в общественное сознание и чаще всего ассоциируются с распознаванием образов и речи, с генерацией человекоподобного текста. На самом деле алгоритмы машинного обучения могут решать множество различных типов задач, в том числе помогать малому бизнесу, интернет-изданию, да чему угодно. В этой статье я расскажу как создать нейросеть, которая способна решить реальную бизнес-задачу по созданию скоринговой модели. Мы рассмотрим все этапы: от подготовки данных до создания модели и оценки ее качества.

Если тебе интересно машинное обучение, то приглашаю в «Мишин Лернинг» — мой субъективный телеграм-канал об искусстве глубокого обучения, нейронных сетях и новостях из мира искусственного интеллекта.

Вопросы, которые разобраны в статье:

• Как собрать и подготовить данные для построения модели?
• Что такое нейронная сеть и как она устроена?
• Как написать свою нейронную сеть с нуля?
• Как правильно обучить нейронную сеть на имеющихся данных?
• Как интерпретировать модель и ее результаты?
• Как корректно оценить качество модели?
Поехали!
Всего голосов 51: ↑42 и ↓9 +33
Просмотры 181K
Комментарии 43

Mockанье зависимостей в node.js приложениях

JavaScript *Программирование *Node.JS *Тестирование веб-сервисов *

Mocks, fakes, and stubs — три столпа юнит тестирования. Конечно же все знают что это такое, как солить и когда есть. Я честно тоже так думал, пока не столкнулся с действительностью, под которую мне пришлось немного прогнуться.


Все началось очень просто — я сменил место работы, и первое что я увидел в новой кодовой базе — это тесты, их было немного больше чем кода. И посреди этих тестов была странная конструкция


Component = proxyquire.noCallThru().load(‘../Component’, {
 
     ‘../../core/selectors/common': { getData }

}).default;
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 9.4K
Комментарии 13

Что такое TLS

Информационная безопасность *Криптография *
Из песочницы
Данный текст является вольным переводом вот этой главы замечательной книги «High Performance Browser Networking» авторства Ильи Григорика. Перевод выполнялся в рамках написания курсовой работы, потому очень вольный, но тем не менее будет полезен тем, кто слабо представляет что такое TLS, и с чем его едят.

Общие сведения о TLS

Протокол TLS (transport layer security) основан на протоколе SSL (Secure Sockets Layer), изначально разработанном в Netscape для повышения безопасности электронной коммерции в Интернете. Протокол SSL был реализован на application-уровне, непосредственно над TCP (Transmission Control Protocol), что позволяет более высокоуровневым протоколам (таким как HTTP или протоколу электронной почты) работать без изменений. Если SSL сконфигурирован корректно, то сторонний наблюдатель может узнать лишь параметры соединения (например, тип используемого шифрования), а также частоту пересылки и примерное количество данных, но не может читать и изменять их.
Читать дальше →
Всего голосов 45: ↑43 и ↓2 +41
Просмотры 402K
Комментарии 20

Docker в продакшене — чему мы научились, запустив более 300 миллионов контейнеров

Go *
Перевод
Docker в продакшене на Iron.io


Ранее в этом году (прим. 2014 г.), мы приняли решение запускать каждую задачу на IronWorker внутри своего собственного Docker контейнера. С тех пор мы запустили более 300 000 000 программ внутри собственных Docker контейнеров в облаке.

После нескольких месяцев использования, мы хотели бы поделиться с сообществом некоторыми из проблем, с которыми мы столкнулись в построении инфраструктуры, основанной на Docker'e, как мы преодолели их, и почему это стоило того.
Читать дальше →
Всего голосов 52: ↑49 и ↓3 +46
Просмотры 70K
Комментарии 10

Реализация словаря в Python 2.7

Python *Алгоритмы *
Из песочницы
В этой статье пойдёт речь о том, как реализован словарь в Python. Я постараюсь ответить на вопрос, почему элементы словаря не упорядочены, описать, каким образом словари хранят, добавляют и удаляют свои элементы. Надеюсь, что статья будет полезна не только людям, изучающим Python, но и всем, кто интересуется внутренним устройством и организацией структур данных.
Читать дальше →
Всего голосов 65: ↑64 и ↓1 +63
Просмотры 110K
Комментарии 37

Зачем vi-топор программисту 21-го века

VIM *Emacs *
Из песочницы
Не помню, когда и при каких именно обстоятельствах, но как-то очень давно я открыл для себя Git. Поначалу я не совсем, конечно, понял его преимуществ перед другими системами контроля версий, но уже порядком к тому времени подустав от TFS, которую на тот момент мы использовали в компании, решил его попробовать.

Git очень быстро завоевал мою любовь и с тех пор я даже не представляю себе свою работу без него.

Однажды, играясь и пробуя разные команды, я случайно запустил режим редактора, а Git, как оказалось, по умолчанию использовал Vim, который я до того времени в глаза и не видел. Ну и как обычно происходит первое знакомство с этим редактором? Правильно — с недоумением и перезагрузкой терминала. Банально — выйти из редактора я так и не смог и честно, даже подумал, что редактор тупо глючит. Я даже помню, как-то удивился — как же блин так получилось, что такие умные чуваки, создавшие такую мощную штуку, как Git, могли выбрать такой архаичный, тупой, непонятный и некрасивый (как мне поначалу показалось) редактор?


Читать дальше →
Всего голосов 112: ↑62 и ↓50 +12
Просмотры 57K
Комментарии 168

Структуры данных: двоичная куча (binary heap)

Алгоритмы *
Из песочницы
Двоичная куча (binary heap) – просто реализуемая структура данных, позволяющая быстро (за логарифмическое время) добавлять элементы и извлекать элемент с максимальным приоритетом (например, максимальный по значению).

Для дальнейшего чтения необходимо иметь представление о деревьях, а также желательно знать об оценке сложности алгоритмов. Алгоритмы в этой статье будут сопровождаться кодом на C#.

Введение


Двоичная куча представляет собой полное бинарное дерево, для которого выполняется основное свойство кучи: приоритет каждой вершины больше приоритетов её потомков. В простейшем случае приоритет каждой вершины можно считать равным её значению. В таком случае структура называется max-heap, поскольку корень поддерева является максимумом из значений элементов поддерева. В этой статье для простоты используется именно такое представление. Напомню также, что дерево называется полным бинарным, если у каждой вершины есть не более двух потомков, а заполнение уровней вершин идет сверху вниз (в пределах одного уровня – слева направо).



Читать дальше →
Всего голосов 72: ↑58 и ↓14 +44
Просмотры 195K
Комментарии 58

Анализ Вконтакте на примере книжных предпочтений участников культурных сообществ

Социальные сети и сообщества

Рис.  3. – Книги каких авторов из рейтинга топ100 читают пользователи Вконтакте

Для всех диаграмм в статье есть интерактивные визуализации: graphgrail.com/gg-client/vk_books.html
К 2014 году потенциал традиционных подходов к развитию аналитики социальных процессов оказался исчерпан в силу нескольких причин, главная из которых – неспособность созданных в рамках данных подходов решений адаптироваться к изменившимся условиям формирования общественных законов. Речь идет об их недостаточной динамичности и неприспособленности для обработки данных, поступающих в больших объемах в режиме времени, близком к реальному. Но самый серьезный удар по классической аналитике нанес взрывной рост объемов неструктурированных данных. [1]
Читать дальше →
Всего голосов 32: ↑23 и ↓9 +14
Просмотры 59K
Комментарии 71

Руководство хакера по нейронным сетям. Глава 2: Машинное обучение. Обучение сети на основе метода опорных векторов (SVM)

Блог компании PAYSTO JavaScript *
Перевод
Содержание:
Глава 1: Схемы реальных значений
Часть 1:
   Введение   
      Базовый сценарий: Простой логический элемент в схеме
      Цель
         Стратегия №1: Произвольный локальный поиск

Часть 2:
         Стратегия №2: Числовой градиент

Часть 3:
         Стратегия №3: Аналитический градиент

Часть 4:
      Схемы с несколькими логическими элементами
         Обратное распространение ошибки

Часть 5:
         Шаблоны в «обратном» потоке 
      Пример "Один нейрон"

Часть 6:
      Становимся мастером обратного распространения ошибки


Глава 2: Машинное обучение
Часть 7:
      Бинарная классификация

Часть 8:
      Обучение сети на основе метода опорных векторов (SVM)

Часть 9:
      Обобщаем SVM до нейронной сети

Часть 10:
      Более традиционный подход: Функции потерь



В качестве конкретного примера давайте рассмотрим SVM. SVM – это очень популярный линейный классификатор. Его функциональная форма имеет именно такой же вид, как я описывал в предыдущем разделе — f(x,y)=ax+by+c. На данном этапе, если вы видели описание SVM, вы наверняка ожидаете, что я буду определять функцию потерь SVM и погружаться в пояснения свободных переменных, геометрических понятий больших полей, ядер, двойственности и пр. Но здесь я бы хотел воспользоваться другим подходом.
Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 15K
Комментарии 3

Руководство хакера по нейронным сетям. Глава 2: Машинное обучение. Бинарная классификация

Блог компании PAYSTO JavaScript *
Перевод
Содержание:
Глава 1: Схемы реальных значений
Часть 1:
   Введение   
      Базовый сценарий: Простой логический элемент в схеме
      Цель
         Стратегия №1: Произвольный локальный поиск

Часть 2:
         Стратегия №2: Числовой градиент

Часть 3:
         Стратегия №3: Аналитический градиент

Часть 4:
      Схемы с несколькими логическими элементами
         Обратное распространение ошибки

Часть 5:
         Шаблоны в «обратном» потоке 
      Пример "Один нейрон"

Часть 6:
      Становимся мастером обратного распространения ошибки


Глава 2: Машинное обучение
Часть 7:
      Бинарная классификация

Часть 8:
      Обучение сети на основе метода опорных векторов (SVM)

Часть 9:
      Обобщаем SVM до нейронной сети

Часть 10:
      Более традиционный подход: Функции потерь



В последней главе мы рассматривали схемы с реальными значениями, которые вычисляли сложные выражения своих исходных значений (проход вперед), а также мы смогли рассчитать градиенты этих выражений по оригинальным исходным значениям (обратный проход). В этой главе мы поймем, насколько полезным может быть этот довольно простой механизм в обучении машины.
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 17K
Комментарии 4

Офис Google в Швейцарии

Офисы IT-компаний
Привет, Хабровчане. Новый год я провел в городе Цюрих, где пообщался с несколькими сотрудниками корпорации зла, и прогулялся по их офису.

В своем посте я постараюсь описать побольше социальных особенностей работы в Google в Швейцарии, но скрыть от вас интерьер офиса я не могу, он шикарен :)

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

Итак, в Цюрихе находится центральный офис Google в Европе.



В нем работает около 1500 сотрудников, из них примерно 60 русскоговорящих. Хантят их как из других офисов (например, много людей переезжают из Московского офиса Google), так и напрямик.

UPD. Мо многочисленным просьбам в комментариях сделал отдельную тему для вопросов относительно работы в офисе Google в Цюрихе: habrahabr.ru/blogs/google/138980

Читать дальше →
Всего голосов 163: ↑157 и ↓6 +151
Просмотры 58K
Комментарии 117

Регистрация и сдача TOEFL

Блог компании MBA Consult Изучение языков
image

Сегодня мы публикуем новую статью из цикла о тесте TOEFL. Напомним, что в предыдущей статье рассказывали о самом главном — подготовке к сдаче TOEFL. И теперь пришло время поделиться с вами информацией о самом ответственном мероприятии — регистрация и сдача.
Читать дальше →
Всего голосов 20: ↑16 и ↓4 +12
Просмотры 9.1K
Комментарии 6

Как я уехал работать программистом в Швецию (Часть 1)

Карьера в IT-индустрии
На Хабре уже писали про то, как айтишники переезжают в Лондон, Сан-Франциско и некоторые другие зарубежные локации, а также весьма толково про эмиграцию вообще. К своему удивлению, я не нашел аналогичной заметки про Швецию. Поскольку в настоящее время проживаю в славном городе Стокгольме и работаю в шведской компании, решил исправить эту ситуацию.
Читать дальше →
Всего голосов 53: ↑47 и ↓6 +41
Просмотры 32K
Комментарии 7

Неверная интерпретация алгоритма Ахо-Корасик

Алгоритмы *
Из песочницы
В далеком (а может и не очень далеком) 1975 году Альфред Ахо и Маргарет Корасик опубликовали статью, в которой был подробно описан алгоритм эффективного поиска всех вхождений всех строк-образцов в заданную строку. В дальнейшем этот алгоритм и получил название «алгоритм Ахо-Корасик». Неудивительно, что через некоторое время появились технические и «художественные» переводы данной статьи на русский язык. Порой мне даже встречались вольные изложения сути алгоритма в том виде, в котором его понимает автор. Причем последний, судя по тексту, узнал об алгоритме далеко не из первоисточника. Я не знаю существовал ли перевод, который послужил первоисточником проблемы, но мне всё больше и больше попадаются статьи с описанием алгоритма Ахо-Корасик, в котором допущена одна и та же кардинальная ошибка. Последней каплей была статья пользователя rmq на хабре, которую данная ошибка не миновала. Собственно об этой ошибке мне и хотелось бы рассказать общественности в своей статье.
Замечание: статья пользователя rmq, как выяснилось позже, не содержит этой ошибки. Как она решена там расскажу ниже. А ему огромное спасибо, если бы не его топик я бы не написал свой и не получил бы инвайт!
Перед началом, еще пара слов о целевой аудитории: Скорее всего, тем, кто давно знаком с алгоритмом Ахо-Корасик, моя статья будет не интересна, так как о его особенностях они давно уже знают. По крайней мере, все мои знакомые программисты не один раз применявшие данный алгоритм знают о существовании его неверных интерпретаций не понаслышке. А вот новичкам и тем, кому не довелось часто применять его на практике, эта статья может оказаться довольно полезной.
Итак, начнем.
Читать дальше →
Всего голосов 57: ↑55 и ↓2 +53
Просмотры 21K
Комментарии 10

Тест IELTS — общая информация

Блог компании MBA Consult Изучение языков
image

Регулярно читая посты на Geektimes, нам подумалось, что определенный интерес вызывает тема, связанная с тем, чтобы уехать учиться в зарубежный университет или устроиться на работу в крупную западную компанию за рубежом. Как правило, первое невозможно без сдачи теста, определяющего уровень владения иностранным языком, а для второго это просто большой плюс. В подавляющем большинстве вузов, причем, не только англоязычных стран, требуется сертификат, подтверждающий уровень владения английским. Поэтому мы решили опубликовать для вас подборку из полезных статей об экзаменах IELTS, TOEFL, GMAT, GRE и SAT.

Давайте начнем с первого из них — IELTS. В течение месяца мы опубликуем цикл из нескольких небольших, но информативных и полезных статей, прочитав которые, вы сможете ознакомиться со структурой экзамена, его особенностями, системой оценивания, секретами и материалами для подготовки и т.д.

А для того, чтобы наши статьи были еще интереснее, просим отписываться в комментариях, указывая интересные для вас темы или вопросы, ибо по жизни именно ответами на подобные вопросы мы и занимаемся. С радостью учтем ваши пожелания в наших будущих публикациях!

В сегодняшней вводной статье мы расскажем о том, что такое IELTS и каковы его основные особенности и структура. Эта публикация открывает наш цикл, поэтому в ней мы хотим дать вам общее представление об экзамене.

Давайте начнем!

Читать дальше →
Всего голосов 32: ↑24 и ↓8 +16
Просмотры 12K
Комментарии 16

Postgres. Выборка N случайных записей

Высокая производительность *PostgreSQL *Программирование *
Из песочницы
При работе над одним проектом возникла необходимость написать некое подобие тестовой системы. Задача формулировалась примерно так:

  • из N записей в базе необходимо выбрать m (3-5) случайных строк в серии из k выборок (преимущественно k=2).

А теперь то же самое человеческим языком: из таблицы нужно два раза выбрать по 3-5 случайных записей. При этом не должно быть дубликатов и выборка должна происходить случайным образом.

Первое, что приходит в голову:

 SELECT *
  FROM data_set
  WHERE id NOT IN (1,2,3,4, 5)
  ORDER BY random()
  LIMIT 5;

И это даже будет работать. Вот только цена такого решения…
Читать дальше →
Всего голосов 56: ↑51 и ↓5 +46
Просмотры 32K
Комментарии 47

Сегодня день рождения великого популяризатора науки Карла Сагана

Блог компании Vert Dider Научно-популярное Космонавтика


9 ноября 1934 года родился американский астроном, астрофизик и выдающийся популяризатор науки Карл Саган.

Он вдохновил не одно поколение мальчишек и девчонок заниматься наукой. Известный астрофизик и популяризатор науки Нил Деграсс Тайсон, например, рассказывал в своем интервью, как, будучи еще мальчишкой, он получил приглашение от Карла Сагана посетить его лабораторию в Корнельском университете, что повлияло на его выбор профессии. Под катом много видео.
Читать дальше →
Всего голосов 37: ↑33 и ↓4 +29
Просмотры 9.1K
Комментарии 7

А как же всё-таки работает многопоточность? Часть II: memory ordering

Java *Системное программирование *Параллельное программирование *
картинка для привлечения внимания

Знание об управлении потоками, которое мы получили в прошлом топике, конечно, велико, но вопросов остаётся всё равно много. Например: «Как работает happens-before?», «Правда ли, что volatile — это сброс кешей?», «Зачем вообще было городить какую-то модель памяти? Нормально же всё было, что началось-то такое?»

Как и прошлая статья, эта построена по принципу «сначала кратко опишем, что должно происходить в теории, а потом отправимся в исходники и посмотрим, как это происходит там». Таким образом, первая часть во многом применима не только к Java, а потому и разработчики под другие платформы могут найти для себя что-то полезное.
Go Deeper
Всего голосов 86: ↑85 и ↓1 +84
Просмотры 81K
Комментарии 45

А как же всё-таки работает многопоточность? Часть I: синхронизация

Java *Системное программирование *Параллельное программирование *
Туториал
картинка для привлечения внимания(пост из серии «я склонировал себе исходники hotspot, давайте посмотрим на них вместе»)
Все, кто сталкивается с многопоточными проблемами (будь то производительность или непонятные гейзенбаги), неизбежно сталкиваются в процессе их решения с терминами вроде «inflation», «contention», «membar», «biased locking», «thread parking» и тому подобным. А вот все ли действительно знают, что за этими терминами скрывается? К сожалению, как показывает практика, не все.

В надежде исправить ситуацию, я решил написать цикл статей на эту тему. Каждая из них будет построена по принципу «сначала кратко опишем, что должно происходить в теории, а потом отправимся в исходники и посмотрим, как это происходит там». Таким образом, первая часть во многом применима не только к Java, а потому и разработчики под другие платформы могут найти для себя что-то полезное.

Перед прочтением глубокого описания полезно убедиться в том, что вы в достаточной мере разбираетесь в Java Memory Model. Изучить её можно, например, по слайдам Сергея Walrus Куксенко или по моему раннему топику. Также отличным материалом является вот эта презентация, начиная со слайда #38.
Читать дальше. Много.
Всего голосов 130: ↑122 и ↓8 +114
Просмотры 168K
Комментарии 21

Модель памяти в примерах и не только

Java *
Туториал
В продолжение серии топиков под названием «фундаментальные вещи о Java, которые стоит знать, но которые многие не знают». Предыдущий топик: Бинарная совместимость в примерах и не только

Модель памяти Java — нечто, что оказывает влияние на то, как работает код любого java-разработчика. Тем не менее, довольно многие пренебрегают знанием этой важной темы, и порой наталкиваются на совершенно неожиданное поведение их приложений, которое объясняется именно особенностями устройства JMM. Возьмём для примера весьма распространённую и некорректную реализацию паттерна Double-checked locking:

public class Keeper {
    private Data data = null;
    
    public Data getData() {
        if(data == null) {
            synchronized(this) {
                if(data == null) {
                    data = new Data();
                }
            }
        }
        
        return data;
    }
}

Люди, пишущие подобный код, пытаются добиться улучшения производительности, избегая блокировки, если значение уже было присвоено. К сожалению, эти люди не учитывают многих факторов, в результате проявления которых может случиться зомби-апокалипсис. Под катом я расскажу теорию и приведу примеры того, как что-то может пойти не так. Кроме того, как говорили в одном индийском фильме, «Мало знать, что не так. Нужно знать, как сделать так, чтобы было так». Потому и рецепты успеха вы также сможете найти дальше.
Читать дальше →
Всего голосов 98: ↑95 и ↓3 +92
Просмотры 219K
Комментарии 39

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность