В процессе загрузки ресурсов... загрузка...

Интересное машинное обучение: кратчайшее руководство

Автор:Изобретатели количественного измерения - мечты, Создано: 2016-12-07 12:37:21, Обновлено: 2016-12-07 12:40:26

Интересное машинное обучение: кратчайшее руководство


Когда вы слышите, как люди говорят о машинном обучении, не слишком ли вы понимаете, что это значит? Вы устали от того, что вы постоянно киваете головой, когда разговариваете с коллегами?

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

Целью статьи является доступность, а это означает, что в ней есть много обобщений. Но кому это не важно?

  • Почему машинное обучение?

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

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

    img

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

    Машинное обучение - это всеобъемлющий термин, охватывающий множество аналогичных генетических алгоритмов.

  • Два типа алгоритмов машинного обучения

    Вы можете считать алгоритмы машинного обучения двумя основными категориями: контролируемое обучение (Supervised Learning) и неконтролируемое обучение (Unsupervised Learning).

    • Наблюдательное обучение

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

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

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

      Это наш мастер-класс по обучению мастерам.

      img

      Мы собираемся использовать эти данные для написания программы, чтобы оценить стоимость других домов в этом районе:

      img

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

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

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

      img

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

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

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

    • Неконтролируемое обучение

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

      img

      Даже если вы не хотите предсказывать неизвестные данные (например, цены), вы можете использовать машинное обучение, чтобы сделать что-то интересное.

      Это как если бы вам дали лист бумаги, на котором много цифр, и сказали: "Ну, я не знаю, что эти цифры означают, может быть, вы сможете найти закономерности или классифицировать их, или что-то в этом роде - удачи!"

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

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

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

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

      Очень круто, но можно ли оценивать цены на жилье как обучение?

      Как человек, ваш мозг может справиться с большинством ситуаций, и без каких-либо четких инструкций он не может научиться справляться с ними. Если вы работаете в сфере недвижимости в течение длительного времени, у вас будет инстинктивное ощущение, как правильно оценивать недвижимость, как ее лучше всего маркетинговать и какие клиенты будут заинтересованы и т. д. Цель исследования сильного ИИ - иметь возможность копировать эту способность с помощью компьютера.

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

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

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

      Давайте напишем код!

      Как вы собираетесь написать процедуру оценки цены на жилье в предыдущем примере?

      Если вы ничего не знаете о машинном обучении, скорее всего, вы попробуете написать несколько базовых правил оценки цен на жилье:

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = 0
          # In my area, the average house costs $200 per sqft
          price_per_sqft = 200
      
          if neighborhood == "hipsterton":
          # but some areas cost a bit more
              price_per_sqft = 400
      
          elif neighborhood == "skid row":
          # and some areas cost less
              price_per_sqft = 100
      
          # start with a base price estimate based on how big the place is
          price = price_per_sqft * sqft
      
          # now adjust our estimate based on the number of bedrooms
          if num_of_bedrooms == 0:
          # Studio apartments are cheap
              price = price — 20000
          else:
          # places with more bedrooms are usually
          # more valuable
              price = price + (num_of_bedrooms * 1000)
      
          return price
      

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

      Разве не лучше, если компьютер сможет выяснить, как реализовать функции, которые мы упомянули выше? Кто будет заботиться о том, что именно делает функция, если только возвращенные цифры цены будут правильными?

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = <computer, plz do some math for me>
          return price
      

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

      Это может упростить вашу первоначальную программу (все сумасшедшие if else-заявления) до следующего:

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = 0
      
          # a little pinch of this
          price += num_of_bedrooms * .841231951398213
      
          # and a big pinch of that
          price += sqft * 1231.1231231
      
          # maybe a handful of this
          price += neighborhood * 2.3242341421
      
          # and finally, just a little extra salt for good measure
          price += 201.23432095
      
          return price
      

      Обратите внимание на волшебные цифры, обозначенные толстыми буквами. 841231951398213, 1231.1231231, 2.3242341421, и 201.23432095. Они называются весами. Если бы мы могли найти идеальный вес для каждого дома, наша функция могла бы предсказать все цены на дома!

      Один из способов найти оптимальный вес:

      Первый шаг:

      Сначала каждый из весов устанавливается на 1.0:

      def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
          price = 0
      
          # a little pinch of this
          price += num_of_bedrooms * 1.0
      
          # and a big pinch of that
          price += sqft * 1.0
      
          # maybe a handful of this
          price += neighborhood * 1.0
      
          # and finally, just a little extra salt for good measure
          price += 1.0
      
          return price
      

      Шаг 2:

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

      img

      Используйте свою программу для прогнозирования цен на жилье.

      Например, если первая недвижимость в приведенной выше таблице фактически продана за $250,000, а ваша функция оценивается в $178,000, то вы потеряли $72,000 за эту недвижимость.

      Затем подведите квадратированную сумму отклонений оценок каждой пары недвижимости в своем наборе данных. Предположим, что в вашем наборе есть 500 сделок с недвижимостью, а сумма отклонений оценок составит $86,123,373. Это отражает правильную степень отклонения вашей функции в настоящее время.

      Теперь делите сумму на 500 и получите среднее отклонение от стоимости оценки для каждого дома. Назовите это среднее значение ошибки как стоимость вашей функции.

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

      Третий шаг:

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

      Мысли мешают времени

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

      • 1. За последние 40 лет исследования во многих областях (например, лингвистика/перевод) показали, что этот универсальный алгоритм обучения в виде вибрационных файлов (слова, которые я создал) превосходит методы, требующие использования конкретных правил с реальными людьми.

      • 2.你最后写出的函数真是笨,它甚至不知道什么是“面积”和“卧室数”。它知道的只是搅动,改变数字来得到正确的答案。

      • 3.很可能你都不知道为何一组特殊的权重值能起效。所以你只是写出了一个你实际上并不理解却能证明的函数。

      • 4.试想一下,你的程序里没有类似“面积”和“卧室数”这样的参数,而是接受了一组数字。假设每个数字代表了你车顶安装的摄像头捕捉的画面中的一个像素,再将预测的输出不称为“价格”而是叫做“方向盘转动度数”,这样你就得到了一个程序可以自动操纵你的汽车了!

      Это безумие, не так ли?

      Что произойдет, если в шаге 3 кнопка попробует каждый номерный кнопка?

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

      Это ваша функция затрат.

      img

      Теперь давайте перепишем эти же уравнения с математическими терминами машинного обучения (вы можете игнорировать их сейчас):

      θ обозначает текущее значение веса; J ((θ) означает стоимость, соответствующую текущему значению веса для одинаковых одинаковых одинаковых одинаковых одинаковых одинаковых одинаковых одинаковых одинаковых одинаковых.

      img

      Это уравнение показывает, насколько сильно наша оценочная программа отклоняется от текущего взвешенного значения.

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

      img

      Диаграмма функции стоимости похожа на чашку.

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

      img

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

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

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

      Такой способ выявления оптимального веса называется падением массового градиента, и на нём обобщены его высоты.http://hbfs.wordpress.com/2012/04/24/introduction-to-gradient-descent/Я не хочу, чтобы ты был здесь.

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

      Что еще вы случайно пропустили?

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

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

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

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

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

    • Может ли машинное обучение быть бесконечным?

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

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

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

      img

      Вы можете только моделировать отношения, которые действительно существуют.

    • Как глубоко изучить машинное обучение

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

      Профессор Эндрю Нг (Andrew Ng) предлагает бесплатные курсы машинного обучения на Coursera. Я настоятельно рекомендую начать с них.

      Кроме того, вы можете загрузить и установить SciKit-Learn, чтобы использовать его для тестирования тысяч алгоритмов машинного обучения. Это фреймворк Python, для которого есть черные коробки для всех стандартных алгоритмов.

Переданный разработчиком Python


Больше

оклуокуанЭто пример, который преподаватель Дженнада повторяет каждый раз, когда начинает новый класс.

- Поезд.Почему это не должно быть m? Почему это должно быть 2m?