Электронная библиотека » Джон Форман » » онлайн чтение - страница 7


  • Текст добавлен: 22 ноября 2023, 14:32


Автор книги: Джон Форман


Жанр: Базы данных, Компьютеры


Возрастные ограничения: +12

сообщить о неприемлемом содержимом

Текущая страница: 7 (всего у книги 25 страниц) [доступный отрывок для чтения: 7 страниц]

Шрифт:
- 100% +
Подсчет жетонов и вычисление вероятностей

Теперь, токенизировав свои твиты, вы готовы к расчету условной вероятности жетона, р(жетон | класс).

Чтобы произвести расчет, вам нужно определить, сколько раз использовался каждый жетон. Начните с листа AppTokens, выбирая жетон и область длины С1:D4501 и потом вставьте данные в сводную таблицу. Переименуйте полученную сводную таблицу в AppTokensProbability.

В конструкторе сводных таблиц отфильтруйте жетоны по длине и поставьте их по горизонтали, а в окне значений установите значение для подсчета количества каждого жетона. Настройка конструктора показана на рис. 3–9.

В самой сводной таблице в фильтре по длине снимите галочки с жетонов длиной в 0, 1, 2 и 3, чтобы не использовать их (в Windows нужно проинструктировать Excel, что вы собираетесь сделать множественный выбор в выпадающем меню). Это тоже видно на рис. 3–9.



Теперь у вас есть только длинные жетоны из каждого твита, и все они подсчитаны.

Настало время «пристегнуть» вероятность к каждому жетону. Перед запуском расчета примените оговоренную ранее функцию дополнительного сглаживания, добавив 1 к каждому жетону.

Назовите столбец С Add One To Everything и установите С5 = В5 + 1 (С4 + В4 в Windows, где Еxcel строит сводные таблицы на строку выше, просто чтобы рассердить читателей). Вы можете распространить формулу двойным щелчком.

Так как вы добавили 1 ко всему, вам понадобится новый подсчет жетонов. Внизу таблицы (строка 828 на листе AppTokensProbability) введите в ячейку сумму всех ячеек, находящихся над ней. Еще раз отмечу, что если вы работаете с Windows, то все сведется на одну строку выше (С4:С826 для суммирования):

=SUM(С5:С827)

=СУММА(С5:С827)

В столбце D можно рассчитать вероятность для каждого жетона, основываясь на его количестве в столбце С, деленном на общее число жетонов. Назовите этот столбец P(Token|App). Вероятность для первого жетона находится в D5 (D4 в Windows) и рассчитывается так:

=C5/C$828

Обратите внимание на абсолютную ссылку в общем числе жетонов. Это позволяет вам отправить формулу на весь столбец D двойным щелчком. Затем в столбец Е (назовем его LN(P)) можно поместить натуральный логарифм вероятности из D5:

=LN(D5)

Применив эту формулу ко всему листу, получаем все необходимые значения для правила МАР, как на рис. 3-10



Точно так же поступаем с жетонами о других мандрилах и создаем лист OtherTokensProbabilities.

У нас есть модель! Воспользуемся ею

В отличие от регрессивной модели (которая встретится вам в главе 6), оптимизационного этапа здесь не будет. Никакого «Поиска решения», никакой подгонки модели. Модель байесовского классификатора – не что иное, как две таблицы условной вероятности.

Это одна из причин, по которым эту модель любят программисты. Здесь нет сложного этапа подгонки – достаточно подбросить побольше жетонов и сосчитать их. А еще вы можете сохранить получившийся словарь жетонов у себя на диске для дальнейшего использования. Гениально просто!

Теперь, когда модель классификатора «обучена», настало время ее использовать. На листе TestTweets в «Рабочей тетради» вы найдете 20 твитов, 10 о приложении, 10 – о другом. Вам нужно подготовить эти твиты, токенизировать их (ради интереса сделаем это немного по-другому), рассчитать логарифмированные вероятности для жетонов обоих классов и определить их наиболее вероятную принадлежность.

Для начала скопируем ячейки В2:Н21 из листа AboutMandrillApp и вставим их в D2:J21 листа TestTweets. Получаем лист, изображенный на рис. 3-11.



Теперь создадим новый лист и назовем его TestPredictions. Вставим в него столбцы Number и Class из TestTweets. Назовем столбец С Prediction, который впоследствии заполним предполагаемыми значениями классов. Затем назовем столбец D Tokens и вставим в D2:D21 значения из столбца J из листа TestTweets. Получается лист, изображенный на рис. 3-12.



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

Сначала выделите твиты в D2:D21 и выберите «Текст по столбцам» во вкладке меню «Данные». В появившемся «Мастере текстов», выберите «С разделителями» и нажмите «Далее».

Второй шаг мастера – выберите знаки табуляции и пробела в качестве разделителей. Также можно выбрать «Считать последовательные разделители одним» и убедиться, что ограничитель строк установлен на {нет}. Настройка мастера показана на рис. 3-13.



Нажмите «Готово». Это разбросает твиты по столбцам всего листа до столбца AI, как на рис. 3-14.



Под списком жетонов в столбце D в строке 25 нужно найти вероятность отношения к приложению для каждого жетона. Для этого можно использовать функцию VLOOKUP/ВПР (в главе 1 эта функция описана более подробно), начиная с ячейки D25:

=VLOOKUP(D2,AppTokensProbability!$A$5:$E$827,5,FALSE)

=ВПР(D2,AppTokensProbability!$A$5:$E$827,5,FALSE)

Функция VLOOKUP/ВПР берет соответствующий жетон из D2 и пытается найти его в столбце А листа AppTokensProbability. Если таковой находится, функция берет значение из столбца Е.

Но этого недостаточно, потому что вам нужно иметь дело с редкими словами, которых нет в таблице просмотра, – такие жетоны получат значение N/A от функции. Как обсуждалось ранее, эти редкие слова должны иметь вероятность, равную 1, деленную на общее число жетонов в ячейке В828 на листе AppTokensProbability.

Имея дело с редкими словами, нужно вложить VLOOKUP/ВПР в проверку ISNA/ЕНД и работать с логарифмированными вероятностями редких слов, если есть такая необходимость:

IF(ISNA(VLOOKUP(D2,AppTokensProbability!$A$5:$E$827,5,

FALSE)),LN(1/AppTokensProbability!$C$828),

VLOOKUP(D2,AppTokensProbability!$A$5:$E$827,5,FALSE))

ЕСЛИ(ЕНД(ВПР(D2,AppTokensProbability!$A$5:$E$827,5,ЛОЖЬ)),

LN(1/AppTokensProbability!$C$828), ВПР(D2,

AppTokensProbability!$A$5:$E$827,5,ЛОЖЬ))

Единственное, что не учитывает данное решение, – это маленькие жетоны. Есть соблазн их выкинуть. Так как мы будем суммировать эти логарифмированные вероятности, вы можете установить логарифмированную вероятность любого маленького жетона на 0 (это, по сути, то же самое, что и выставление вероятности редких слов на 1, только наоборот – жетоны отбраковываются).

Для проведения этой операции нужно снова вложить всю формулу в еще одно утверждение IF/ЕСЛИ, проверяющее длину:

=IF(LEN(D2)<=3,0,IF(ISNA(VLOOKUP(D2,AppTokensProbability!

$A$5:$E$827,5,FALSE)),LN(1/AppTokensProbability!$C$828),

VLOOKUP(D2,AppTokensProbability!$A$5:$E$827,5,FALSE)))

=ЕСЛИ(ДЛСТР(D2)<=3,0,ЕСЛИ(ЕНД(ВПР(D2,AppTokensProbability!

$A$5:$E$827,5,ЛОЖЬ)),LN(1/AppTokensProbability!$C$828),

ВПР(D2,AppTokensProbability!$A$5:$E$827,5,ЛОЖЬ)))

Обратите внимание: на листе AppTokensProbability используются абсолютные ссылки, так что вы можете перемещать формулу, как того пожелаете.

Когда жетоны твитов достигнут столбца AI, протащите эту формулу из D25 до AI44, чтобы учесть каждый жетон. Так получается рабочий лист, изображенный на рис. 3-15.



Начиная с ячейки D48 можно использовать ту же формулу, что и в D25. Имейте в виду, что она должна ссылаться на лист OtherTokensProbability, диапазон использования функции VLOOKUP//ВПР изменится на $A$5:$E$810 и общее число жетонов окажется в $C$811.

Все это приводит нас к листу, показанному на рис. 3-16.




В столбце С можно просуммировать каждую строку вероятностей, что показано на рис. 3-17. К примеру, С25 – это просто

=SUM(D25:AI25)

=СУММА(D25:AI25)

В ячейке С2 можно классифицировать первый твит, просто сравнив его показатели в ячейках С25 и С48, используя следующее утверждение:

=IF(C25>C48,"APP","OTHER")

=ЕСЛИ(C25>C48,"APP","OTHER")

Копируя эту формулу дальше до С21, вы получаете классификации для каждого твита, как показано на рис. 3-18.



Попадание – 19 из 20! Неплохо. Если взглянуть на неправильно классифицированный твит, можно увидеть, что написан он весьма расплывчато – показатели близки к неопределенным.

Вот и все. Модель построена, предположения сделаны.

Подытожим

Эта глава – сверхкороткая, по сравнению с остальными в этой книге. Почему? Потому что наивный Байес очень простой! И за это все его любят. Кажется, что он делает что-то сложное волшебным образом, хотя на самом деле он просто полагается на хорошую память компьютера, помнящего, насколько часто каждый жетон появляется в каждом классе.

Есть такая пословица: «Опыт – отец мудрости, а память – ее мать». К «наивному Байесу» она подходит на 100 %. Полнота «псевдомудрости» программы состоит из загруженных и хранящихся данных и кусочка математической изоленты.

«Наивный Байес» даже немного приспособлен к простому применению в коде. Например, вот как он выглядит в С#:

http://msdn.microsoft.com/en-us/magazine/jj891056.aspx

небольшой кусочек, написанный кем-то на Python и выложенный в Сеть:

http://www.mustapps.com/spamfilter.py

вот на Ruby:

http://blog.saush.com/2009/02/11/naive-bayesian-classifiers-and-ruby/

Одно из замечательных свойств этой модели – то, что она отлично работает, даже если кругом куча элементов (feature) – вводных данных модели ИИ, с помощью которых вы строите свои предположения (в случае с нашими данными, каждое слово представляет собой элемент). Но, несмотря на это, не забывайте, что у простой модели набора слов (bag of words) тоже есть свои недостатки. Если честно, наивная часть модели может стать причиной появления проблем. Приведу пример.

Предположим, я создал «наивный байесовский» классификатор, который пытается классифицировать твиты по отношению к написанному на положительные и отрицательные. И когда кто-то пишет что-то вроде:

Новый фильм Майкла Бэя – это дымящаяся куча шовинистского мусора, полная взрывов и убогой игры актеров, не выражающей ничего. Но лично мне понравилось!

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

Так как модель набора слов не учитывает структуру текста и принимает все жетоны за беспорядочную кучу, возникает проблема. Многие наивные байесовские модели на самом деле рассматривают в качестве жетонов фразы, а не отдельные слова. Это помогает немного контекстуализировать слова (и делает предположения классификатора еще более нелепыми, но кому какая разница!). Для выполнения такой работы нужно больше тренировочных данных, потому что количество возможных фраз из N слов гораздо больше, чем количество возможных слов.

Для записей, подобных этому отзыву на фильм, может понадобиться модель, которая учитывает положение слов. За какой фразой последнее слово? Получение подобной информации немедленно устраняет все мысли о простой концепции «набора слов».

Конечно, это все придирки. «Наивный Байес» – это простой и многофункциональный инструмент ИИ. Его легко прототипировать и испытывать. Попробуйте помоделировать с помощью этого классификатора разные идеи, и если они будут достаточно хорошо работать – вы молодец. Если результаты многообещающи, но убоги – можно обратить свой взор на что-нибудь «помясистее», вроде комплексной модели (ensemble model), рассмотренной в главе 7.

4. Оптимизационное моделирование: этот «свежевыжатый апельсиновый сок» не смешает себя сам

Недавно Business Week опубликовала статью, посвященную новым разработкам Coca-Cola. С помощью большой аналитической модели компания пытается определить, как смешать свежий апельсиновый сок разных сортов и создать идеальный «продукт-не-из-концентрата».

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

На мой взгляд, он был неправ. Да, Coca-Cola пользуется не моделью искусственного интеллекта, а оптимизационной моделью. Давайте разберемся, в чем же разница.

Модель искусственного интеллекта предсказывает результаты, основываясь на вводных данных. Но задача Coca-Cola в данном случае другая. Ей не нужно знать, что получится, если смешать сок А и сок В. Ей принципиально понять, какие соки из А, В, С, D и т. д. следует закупать и в каких пропорциях смешивать. На основе анализа данных и исходных условий (в том числе имеющегося инвентаря, спроса, характеристик и т. д.) Coca-Cola должна решить, как именно смешать разные по своим свойствам соки (к примеру, один сок слишком сладкий, а другой, наоборот, недостаточно), чтобы добиться «правильного» вкуса по минимальной стоимости и с максимальной прибылью.

В этих действиях нет ничего, что можно было бы предсказать. Модель создается для изменения будущего. Оптимизационное моделирование – это аналитическое арминианство в сравнении с кальвинизмом искусственного интеллекта[3]3
  Арминианство – направление в протестантском богословии, утверждающее решающую роль свободы воли в деле спасения. Кальвинизм – одно из направлений протестантской церкви, возникший в Швейцарии в XVI в. Кальвинизм осуждает расточительство, отстаивает бережливость. – Прим. ред.


[Закрыть]
.

Компании любого профиля используют оптимизационные модели каждый день, чтобы найти ответы на вопросы типа:

• как составить расписание для сотрудников колл-центра, чтобы оно соответствовало их отпускным запросам, сбалансировало переработки и исключало убийственные круглосуточные дежурства, складывающиеся из нескольких смен подряд для каждого сотрудника?

• Какие возможности бурения нефтяных скважин использовать для получения максимального дохода, держа при этом под контролем все риски?

• Когда следует делать новые заказы в Китае и как их доставлять, чтобы минимизировать стоимость и соответствовать ожидаемому спросу?

Оптимизация – это искусство математической формулировки бизнес-задач, а затем и поиск лучшего решения. И, как отмечено в главе 1, целью оптимизации всегда является «максимизация» или «минимизация», где лучшее решение всегда означает что-то самое большое или самое маленькое: самая низкая цена, самая высокая прибыль или хотя бы минимальная вероятность оказаться в тюрьме.

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

В этой главе я подробно расскажу о линейной части линейного программирования. Кстати, слово «программирование» в данном словосочетании является пережитком военной терминологии того времени и не имеет ничего общего с компьютерным программированием. Просто не обращайте на него внимания.

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

Зачем ученым, работающим с данными, нужна оптимизация?

Если вы посмотрите фильмы о Джеймсе Бонде или «Миссия невыполнима», то заметите, что довольно много чего происходит еще до вступительных титров. И главное, что заставляет зрителей прирасти к экрану, – это взрыв.

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

Искусственный интеллект в последнее время стал вызывать беспокойство из-за активного использования в технических компаниях и стартапах. Оптимизация же, напротив, больше похожа на Fortune 500 бизнес-практики. Перепроектирование цепочки снабжения для уменьшения затрат на топливо выглядит не слишком привлекательно. Но оптимизация, чего бы она ни касалась – срезания жира или сверхэкономной развески, – представляет собой фундамент успешного развития бизнеса.

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

• определение оптимальных кластерных центров методом кластеризации по k-средним в главе 2;

• максимизация модульности для определения сообществ (глава 5);

• тренировочные коэффициенты для модели ИИ (подгонка регрессии в главе 6);

• оптимальная установка параметров сглаживания в модели прогнозирования (глава 8).

Задачи оптимизации служат своего рода объединяющим началом различных областей науки о данных, так что желающим продвинуться на этом поприще необходимо осваивать искусство их решения. Без них – никуда, можете мне верить.

Начнем с простого компромисса

Этот раздел я начну с двух любимых «пунктиков» экономистов – пушек и масла.

1941 год, вы десантированы за линию фронта под именем Жереми (или Амелин) Гальендо, хозяина французской молочной фермы.

Ваша работа днем: дойка коров и продажа сладкого сливочного масла местному населению.

Ваша работа ночью: сборка и продажа автоматов французскому Сопротивлению.

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

После долгих раздумий о своем нелегком положении, вы смогли охарактеризовать его тремя составляющими.

• Цель. Вы получаете $195 (ой, простите, франков, хотя, честно говоря, мой Excel настроен на доллары, и я не собираюсь менять настройки ради этого примера) за каждый автомат, который продаете своему доверенному лицу – Пьеру. Вы получаете $150 за каждую бочку проданного на рынке масла. Вам нужно получать как можно больший доход, чтобы окупать ферму.

• Задача. Вам необходимо выяснить, сколько автоматов и сколько масла вам нужно продать за месяц, чтобы получить максимальную прибыль.

• Условия и ограничения. Производство одной бочки масла обходится вам в $100, а сборка одного автомата – в $150. Ваш месячный бюджет на производство новой продукции – $1800. Вам приходится хранить эту продукцию в своем 21-кубометровом подвале. Автомат занимает половину кубометра, бочка масла занимает полтора кубометра. Ни автоматы, ни масло невозможно хранить в другом месте: первые заметят нацисты, а второе испортится.

Представим проблему в виде политопа

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

В линейном программировании вы не можете применять для решения нелинейные функции, к которым, к примеру, относятся:

• перемножение решений (автоматы, помноженные на масло, неприменимы);

• применение логических циклов, таких как ЕСЛИ («Если хранить в подвале только масло, то можно сделать небольшое отверстие в полу, и тогда полезный объем подвала увеличится до 22 кубических метров»).

Как вы увидите в дальнейшем, ограничения лишь стимулируют творческий подход.

Вернемся к нашей проблеме. Начнем с графического определения «области допустимых значений» для этой проблемы. Допустимые значения – это множество возможных решений. Можно ли не производить ни масла, ни автоматов? Конечно. Бездействие не увеличит прибыль, но теоретически оно возможно. Можете ли вы делать по 100 автоматов и 1000 бочек масла в месяц? Нет, с данным бюджетом и в вашем тесном подвале это невозможно.

Так с чего же начать построение графика? Ну, во-первых, нельзя производить отрицательные количества автоматов и масла. Мы же не занимаемся теоретической физикой. Поэтому нам нужен только первый квадрант координатной плоскости.

В терминах бюджета, при цене $150 за штуку вы можете собирать по 12 автоматов в месяц, используя бюджет в $1800. А по цене $100 за бочку вы можете произвести 18 бочек масла.

И если изобразить бюджетное ограничение как линию на графике, то эта линия пойдет аккурат через 12 автоматов и 18 бочек масла. Как показано на рис. 4–1, область допустимых значений в данном случае представляет собой треугольник положительных чисел, согласно которому вы можете произвести максимум 12 автоматов или 18 бочек масла в месяц, или некоторую линейную комбинацию их меньших значений.



Для этого треугольника есть более общее название – политоп. Политоп – это не более чем геометрическая фигура с плоскими сторонами. Наверняка вы слышали термин «полигон». Полигон – это просто двумерный политоп. Если у вас в обручальном кольце есть внушительный камень – бах! бриллиант, радуйтесь: это политоп.

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

Но не отвлекаемся от масла и оружия! Пришло время рассмотреть второе ограничительное условие – подвал. Если бы вы производили только автоматы, их можно было бы уместить там 42 штуки. С другой стороны, в такой подвал может уместиться не более 14 бочек масла. Добавив это ограничение к политопу, мы отсекаем часть области допустимых значений, как показано на рис. 4–2.


Внимание! Это не конец книги.

Если начало книги вам понравилось, то полную версию можно приобрести у нашего партнёра - распространителя легального контента. Поддержите автора!

Страницы книги >> Предыдущая | 1 2 3 4 5 6 7
  • 3 Оценок: 1

Правообладателям!

Данное произведение размещено по согласованию с ООО "ЛитРес" (20% исходного текста). Если размещение книги нарушает чьи-либо права, то сообщите об этом.

Читателям!

Оплатили, но не знаете что делать дальше?


Популярные книги за неделю


Рекомендации