Рубрики
Без рубрики

Введение в алгоритмы кластеризации

Автор оригинала: Peter Gleeson.

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

Это не вопрос. Начните с группировки пауков вместе.

Сделанный? Хотя здесь не обязательно «правильный» ответ здесь, скорее всего, вы разделяете ошибки на четыре кластеры Отказ Пауки в одном кластере, пару улиток в другой, бабочки и моли в одну, а трио Ос и пчел в еще один.

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

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

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

С ста ошибками – там было много раз решений, чем есть частицы в известной вселенной Отказ

Сколько раз больше? По моему расчету, примерно пятьсот миллионов миллиардов миллиардов раз больше Отказ На самом деле, есть больше, чем четыре миллиона миллиардов Гуголь Решения ( Что такое гуоголь? ).

На сто времени объектов.

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

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

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

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

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

Если ты действительно ждет Вы найдете лучший способ сделать это с ручкой и бумагой. Давай – никто не будет судить!

K-означает кластеризацию

Используйте, когда …

… У вас есть представление о том, сколько групп вы ожидаете найти априори Отказ

Как это работает

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

Работал пример

Возьмите в группу из 12 футбольных (или «футбольных») игроков, которые каждый забил определенное количество целей в этом сезоне (скажем, в диапазоне 3-30). Давайте разделим их в отдельные кластеры – скажи три.

Шаг 1 требует от нас случайным образом разделить игроков на три группы и рассчитать средства каждого.

Group 1
  Player A (5 goals),
  Player B (20 goals),
  Player C (11 goals)
Group Mean = (5 + 20 + 11) / 3 = 12 goals

Group 2
  Player D (5 goals),
  Player E (3 goals),
  Player F (19 goals)
Group Mean = 9 goals

Group 3
  Player G (30 goals),
  Player H (3 goals),
  Player I (15 goals)
Group Mean = 16 goals

Шаг 2: Для каждого игрока переназнайте их в группу с самым близким средним. E.G., Player A (5 голов) назначен группу 2). Затем пересчитайте группу средств.

Group 1 (Old Mean = 12 goals)
  Player C (11 goals)
New Mean = 11 goals

Group 2 (Old Mean = 9 goals)
  Player A (5 goals),
  Player D (5 goals),
  Player E (3 goals),
  Player H (3 goals)
New Mean = 4 goals

Group 3 (Old Mean = 16 goals)
  Player G (30 goals),
  Player I (15 goals),
  Player B (20 goals),
  Player F (19 goals)
New Mean = 21 goals

Повторять Шаг 2 снова и снова, пока группа больше не будет меняться. Для этого несколько надуманный пример, это происходит на следующей итерации. Стоп! Теперь вы сформировали три кластера из набора данных!

Group 1 (Old Mean = 11 goals)
  Player C (11 goals),
  Player I (15 goals)
Final Mean = 13 goals

Group 2 (Old Mean = 4 goals)
  Player A (5 goals),
  Player D (5 goals),
  Player E (3 goals),
  Player H (3 goals)
Final Mean = 4 goals

Group 3 (Old Mean = 21 goals)
  Player G (30 goals),
  Player B (20 goals),
  Player F (19 goals)
Final Mean = 23 goals

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

K-означает здесь работает, потому что мы могли бы разумно ожидали, что данные естественным образом падают в эти три категории.

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

Более тонкие детали

Здесь есть несколько вариантов алгоритма. Первоначальный метод «высева» кластеров можно сделать одним из нескольких способов.

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

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

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

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

Существуют методы оценки соответствия определенного набора кластеров. Например, внутри кластер Сумма квадратов это мера дисперсии в каждом кластере.

«Лучше» кластеры, тем ниже общие WCS.

Иерархическая кластеризация

Используйте, когда …

… Вы хотите раскрыть основные отношения между вашими наблюдениями.

Как это работает

Расчетная матрица вычисляется, где стоимость ячейки ( i, j) это метрика расстояния между наблюдениями Я и J Отказ

Затем соедините ближайшие два наблюдения и рассчитайте их среднее. Сформируйте новую матрицу расстояния, объединяя парные наблюдения в один объект.

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

Работал пример

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

Теперь мы просто посмотрим на типичные длины тела для этих шести видов. Мы будем использовать только два повторных этапа.

Species          Initials  Length(m)
Bottlenose Dolphin     BD        3.0
Risso's Dolphin        RD        3.6
Pilot Whale            PW        6.5
Killer Whale           KW        7.5
Humpback Whale         HW       15.0
Fin Whale              FW       20.0

Шаг 1: Вычислить матрицу расстояния между каждым видом. Здесь мы будем использовать Евклидое расстояние – Как далеко друг от друга точки данных?

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

    BD   RD   PW   KW   HW
RD  0.6                    
PW  3.5  2.9               
KW  4.5  3.9  1.0          
HW 12.0 11.4  8.5  7.5     
FW 17.0 16.4 13.5 12.5  5.0

Шаг 2: Сопряните два ближайших вида. Здесь это будет дельфины BottleNose & Risso, со средней длиной 3,3 м.

Повторять Шаг 1, пересчитав матрицу расстояния, но на этот раз объединяет дельфины Боттеленозы и Risso в один объект длиной 3,3 м.

    [BD, RD]   PW   KW   HW
PW       3.2               
KW       4.2   1.0          
HW      11.7   8.5  7.5     
FW      16.7  13.5 12.5  5.0

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

Тогда Мы повторяем шаг 1 – пересчитывайте матрицу расстояния, но теперь мы объединили пилотные и убийцы киты в один объект длины 7,0 м.

         [BD, RD] [PW, KW]   HW
 [PW, KW]      3.7              
 HW           11.7      8.0     
 FW           16.7     13.0   5.0

Следующий Повторите шаг 2 с этим расстоянием матрицы. Наименьшее расстояние (3,7 м) находится между двумя сливанными объектами – поэтому теперь объединяются их в еще больший объект и принять среднее (что 5,2 м).

Тогда , повторите шаг 1 и вычислите новую дистанционную матрицу, объединив дельфины Боттеленозы и Risso с пилотными и убийственными китами.

   [[BD, RD] , [PW, KW]]    HW
HW                   9.8    
FW                  14.8   5.0

Следующий , Повторите шаг 2. Наименьшее расстояние (5,0 м) находится между горбатым и плавным китам, поэтому сливайте их в единый объект и принимают средний (17,5 м).

Тогда , вернулся к шагу 1 – вычислить матрицу расстояния, объединив горбатых и плавных китов.

         [[BD, RD] , [PW, KW]]
[HW, FW]                  12.3

Наконец, Повторите шаг 2 – в этой матрице имеется только одно расстояние (12,3 м), поэтому сопряните все в одном большом объекте. Теперь вы можете останавливаться! Посмотрите на окончательный объединенный объект:

[[[BD, RD],[PW, KW]],[HW, FW]]

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

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

Структура дендрограммы дает представление о том, как структурирован набор данных.

В этом примере есть две основные ветви, с горбатыми китами и плавниками на одной стороне, а также дельфин Dolphin/Risso/Risso и пилотный кит/убийственный кит с другой.

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

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

Классное дело, что этот подход не требует допущений о количестве кластеров, которые вы ищете.

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

Например, глядя на дендрограмму выше, если мы нарисуем горизонтальную линию, мы пересекаем две основные ветви, расщепляя дендрограмму на два подмага. Если мы сократимся, мы будем разделить дендрограмму на три кластера.

Более тонкие детали

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

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

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

Существует также ряд методов, которые могут быть использованы для расчета матриц расстояния. Для многих целей евклидовое расстояние (подумать о теореме Пифагора) будет достаточно, но есть Альтернативы Это может быть более применимо в некоторых обстоятельствах.

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

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

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

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

Графическое обнаружение сообщества

Использовать когда

… У вас есть данные, которые можно представить как сеть, либо «график».

Как это работает

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

Существуют различные алгоритмы для выявления сообществ, основанные на более конкретных определениях. Алгоритмы включают, но не ограничиваются ограниченными возможностями: крайность, модульность-максимализация, WalkTrap, клика перколяции, ведущий EigenVector …

Работал пример

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

Возможно, самые интуитивные тематические исследования – это социальные сети.

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

Среди более инновационных приложений теории графика к кластеризации включают извлечение функций из данных изображения и анализируя регулирующие сети генов.

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

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

Вершины окрашены в соответствии с их членством сообщества и размером в соответствии с их Центральность Отказ Посмотрите, как Google и Twitter являются наиболее центральными?

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

Желтые вершины, как правило, ссылочные/видные сайты; Голубые вершины используются для онлайн-публикации (статей, твитов или кода); А красные вершины включают YouTube, который, конечно, был основан бывшими сотрудниками PayPal. Не плохие отчисления для машины.

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

         GH Gl  M  P  Q  T  W  Y
GitHub    0  1  0  0  0  1  0  0  
Google    1  0  1  1  1  1  1  1
Medium    0  1  0  0  0  1  0  0
PayPal    0  1  0  0  0  1  0  1
Quora     0  1  0  0  0  1  1  0
Twitter   1  1  1  1  1  0  0  1
Wikipedia 0  1  0  0  1  0  0  0
YouTube   0  1  0  1  0  1  0  0

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

Например, есть край между средой и Twitter (сюрприз, сюрприз!), Поэтому значение, где их строки/столбцы пересекаются 1. Аналогично, нет края между средой и PayPal, поэтому пересечение их строк/столбцов возвращается 0

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

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

Точно так же суммируя степень каждой вершины и деления на двоих дает вам Л количество ребер (или «ссылок») в сети. Количество рядов/столбцов дает нам N количество вершин (или «узлов») в сети.

Зная только к , L, n и значение каждой ячейки в матрице смежности А Давайте рассчитаем Модульность Любая заданная кластеризация сети.

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

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

Модульность может быть рассчитана с использованием формулы ниже:

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

М Конечно, что мы рассчитаем – модульность.

1/2 Л говорит нам разделить все, что следует на 2 Л , то есть, в два раза больше нескольких ребер в сети. Все идет нормально.

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

Для тех, которые незнакомы с суммой обозначения, Я, и N Работа много, как вложенные для петлей в программировании. В Python вы бы написали это следующим образом:

sum = 0
for i in range(1,N):
    for j in range(1,N):
        ans = #stuff with i and j as indices 
    sum += ans

Так что же # настоки с я и j Подробнее?

Ну, бит в скобках говорит нам вычитать ( k_i k_j)/2L от A_IJ Отказ

A_IJ это просто значение в матрице соседних на ряд Я , колонна J Отказ

Значения k_i и k_j являются градусами каждой вершины – найдены путем добавления записей в строке Я и колонна J соответственно. Умножить их вместе и разделить на 2 Л дает нам ожидаемое количество ребер между вершинами Я и J Если сеть случайно перетасовали.

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

Воспроизведение со значениями показывает, что он возвращает его наибольшее значение, когда A_IJ и ( k_i k_j)/2L низкий Это означает, что мы видим более высокое значение, если существует «неожиданный» край между вершинами Я и j.

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

The? C _i, C _J I S Необработанный, но полностью безобидный kronecker-Delta функция. Вот это, объяснено в Python:

def kroneckerDelta(ci, cj):
    if ci == cj:
        return 1
    else:
        return 0
        
kroneckerDelta("A","A")
#returns 1

kroneckerDelta("A","B")
#returns 0

Да – это действительно так просто. Функция kronecker-delta принимает два аргумента и возвращает 1, если они идентичны, в противном случае, ноль.

Это означает, что если вершины Я и J были поставлены в тот же кластер, то? C _i, C _j Отказ В противном случае, если они находятся в разных кластерах, функция возвращает ноль.

Поскольку мы умножим сложному сроку этой функции kronecker-Delta, мы находим, что для вложенной суммы Σ Результат самая высокая, когда существует много «неожиданных» краев, соединяющих вершины, присваиваемые к тому же кластеру.

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

Разделение на 2 л Ограничивается верхнее значение модульности при 1. Модульные баллы вблизи или ниже нуля Указывают, что текущая кластеризация сети действительно не используется. Чем выше модульность, тем лучше кластеризация сети в отдельные общины.

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

Обратите внимание, что мы должны предварительно определить, как график кластеризован, чтобы выяснить, насколько «хорошая» на самом деле кластеризация.

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

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

Удвоение сети снова (к очень скромным 32 вершинам) даст 128 возможных способов септиллиона, а сеть восемьдесят вершин может быть в состоянии кластера в большей степени, чем есть атомы в наблюдаемой вселенной Отказ

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

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

Вот как это идет:

Начать Первоначально присваивая каждую вершину своему собственному сообществу, и расчет модульности всей сети М Отказ

Шаг 1 Требуется, чтобы для каждой пары сообщества, связанные как минимум одним краем, алгоритм вычисляет результирующее изменение модульности δ М Если две общины были объединены в один.

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

Повторять Шаги 1 и 2 – каждый раз слияние пары сообществ, для которых это делает, производит самую большую выгоду в δ М, Затем записывающую новый шаблон кластеризации и связанную сопутствующую оценку модулей М Отказ

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

Более тонкие детали

Whaw! Это было вычислительно интенсивно, по крайней мере, для нас людей.

Теория графов является богатым источником вычислительной проблемой, часто проблем с NP-слоями – но он также имеет невероятный потенциал для обеспечения ценного понимания сложных систем и наборов данных.

Просто спросите Ларри страницы, чьи одноимусный алгоритм PageRank – который помог продвинул Google от начала до в основном мирового доминирования в менее чем поколение – был основан полностью в теории графика.

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

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

Другой задачей является то, что вместо того, чтобы иметь один отчетливый, простой в достижении глобального пика, подход MOX-MAX фактически имеет тенденцию создавать широкое «плато» многих аналогичных результатов модулей, что делает его несколько сложно, чтобы по-настоящему определить абсолютный максимальный счет Отказ

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

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

Другой алгоритм – Кличная перколяция , который учитывает возможное перекрытие между графическими общинами.

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

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

Заключение

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

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

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

Все отличные идеи должны начать где-то!