Подробное наглядное руководство по курсу Advanced Machine Learning and Signal Processing на Coursera.

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

Курс Advanced Machine Learning and Signal Processing разработан IBM и доступен на Coursera. Он доступен как индивидуальный курс или как часть массового открытого онлайн-курса (MOOC), состоящего из четырех частей, Advanced Data Science Specialization.

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

Курс проводят два аналитика данных IBM, Ромео Кинцлер и Николай Манчев. Я считаю, что оба они отличные инструкторы.

Первая неделя

Первая неделя начинается с обзора линейной алгебры в машинном обучении. Это довольно просто, охватывая различные объекты данных, используемые в машинном обучении, и математические операции с этими объектами. На самом деле здесь есть несколько действительно полезных фрагментов знаний, например (1) вектор должен содержать только один тип данных, тогда как кортеж может содержать несколько типов данных. (2) Тензор можно использовать как общий термин для любого N-мерного пространства:

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

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

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

  • Классификация - целевые значения дискретны
  • Регрессия - целевые значения непрерывны

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

  • Кластеризация - образцы разделяются на разные кластеры / классы
  • Снижение размерности - количество функций уменьшается при минимальной потере данных

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

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

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

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

Неделя вторая

На этой неделе мы многое расскажем. Обсуждаемые темы кратко изложены следующим образом:

  • Линейная регрессия
  • Пакетный градиентный спуск
  • Разделение (обучающие, проверочные и тестовые наборы)
  • Переполнение и недообороты
  • Оценка
  • Логистическая регрессия
  • Наивный байесовский
  • Машины опорных векторов
  • Перекрестная проверка
  • Настройка гиперпараметров
  • Ансамблевое обучение (деревья решений, случайные леса, усиление градиента и т. Д.)
  • Регуляризация

Кажется, это много. Это много.

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

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

В качестве примера мы создаем классификатор Gradient Boosted Tree с помощью Spark следующим образом:

  • Сначала мы импортируем необходимые модули (предположим, что мы уже импортировали наши обучающие данные df, которые хранятся в виде фрейма данных Pandas)
from pyspark.ml.feature import StringIndexer, VectorAssembler,
                               Normalizer
from pyspark.ml.linalg import Vectors
from pyspark.ml.classification import GBTClassifier
  • Используя то, что мы узнали на первой неделе, мы инициализируем каждый компонент конвейера данных:
# create unique index for each unique string (our target classes)
indexer = StringIndexer(inputCol='class', outputCol='label')
# convert our multiple dataframe input columns to a vector
vectorAssembler = VectorAssembler(inputCols=['x', 'y', 'z'],
                                  outputCol='features')
# normalize our input values
normalizer = Normalizer(inputCol='features', outputCol='features_norm', p=1.0)

… Включая классификатор:

gbt = GBTClassifier(labelCol='label', featuresCol='features',
                    maxIter=10)  # this will run for 10 iterations
  • После создания каждого компонента мы объединяем их в один объект конвейера Spark:
pipeline = Pipeline(stages=[indexer, vectorAssembler, normalizer,
                            gbt])

Теперь, когда мы построили конвейер, мы просто набираем pipeline.fit(df_train) для обучения нашей модели.

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

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

Неделя третья

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

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

Раздел PCA более сложный. Покрытие следующего:

  • Снижение размерности
  • СПС (конечно)
  • Ковариационные и корреляционные матрицы
  • Собственные векторы и собственные значения
  • Проекция данных

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

Мы можем легко уменьшить набор данных с 3D до 2D, проецируя каждую точку в этом 3D пространстве на 2D-плоскость (показано выше).

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

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

Например, возьмем трехмерный график и рассмотрим его с двух разных сторон:

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

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

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

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

Неделя четвертая

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

Преобразование Фурье

Мы начнем с рассмотрения преобразования Фурье (FT), которое позволяет нам разбить сложный сигнал (временная область) на частоты, из которых он построен (частотная область).

Короче говоря, в зависимости от вашего опыта это может иметь, а может и не иметь никакого смысла.

Шум состоит из вибраций. Простейшие колебания состоят из повторяющихся движений вверх и вниз, создающих синусоиду (или синусоиду).

По оси ординат отложена амплитуда волны, по оси абсцисс отложено время. Длина одного полного движения вверх и вниз называется длиной волны.

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

Теперь рассмотрим следующие волны:

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

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

Есть два способа просмотреть волну. В временной области (слева) или в частотной области (справа).

Временная область - это то, что вы уже видели, это форма волны. У него есть время по оси x и амплитуда по оси y.

Вместо этого частотная область показывает составляющие частоты, составляющие волну. У него есть частота по оси x и амплитуда по оси y.

Преобразование Фурье выполняет преобразование между этими двумя цифрами (преобразование частоты во временную область покрывается обратным преобразованием Фурье).

Итоги недели

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

Преобразование Фурье

  • Разложение сигнала, временная и частотная области
  • Генерация сигнала и фазовый сдвиг
  • Математика и интуиция, лежащие в основе FT
  • Дискретный и быстрый FT

Вейвлеты

  • Непрерывное вейвлет-преобразование
  • Масштабирование и перевод
  • Вейвлеты в машинном обучении

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

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

Заключение

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

Более технические аспекты курса очень хороши. Здесь представлен широкий спектр материалов, и большинство тем освещены достаточно глубоко.

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

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

Задания по программированию не особо сложные. Во время Стэнфордского курса машинного обучения я часто тратил пару часов на выполнение каждого задания. Для сравнения, с этим курсом я часто мог выполнять задания по программированию за 10–20 минут.

Однако это сохраняется в проекте Capstone, который является частью полной специализации. Что подводит к моему заключительному пункту:

Целое значительно больше суммы частей.

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

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

Спасибо,

Если вам интересно узнать об основах IBM Scalable Data Science, я написал здесь еще один обзор!