Как научиться понимать математику с нуля


Математика с нуля. Пошаговое изучение математики

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

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

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

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

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

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

В общем, дерзай друг!

Желаем тебе удачи в изучении математики!

Новые уроки будут скоро. Оставайся с нами!

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

12 простых советов тем, кто самостоятельно учит математику

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

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

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

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

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

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

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

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

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

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

Если нужен опорный материал, например, подборка формул, пользуйтесь тематическими справочниками. В том числе краткими – теми же шпаргалками, которые легко найти по запросу «[изучаемая тема] cheat sheets».

Для обучения математике нужно решать задачи. И, конечно, лучше, если это будут задачи, которые нескучно решать. На brilliant.org проделана колоссальная работа по сбору материалов из различных областей математики, представленных в различных стилях изложения.

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

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

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

Крайне важно делать разминку. Питание к тканям мозга переносит кровь, и если кровоток затруднен, учиться сложнее. Возьмите себе за правило разминаться каждые 45-50 минут: ходить по комнате, приседать, делать упражнения. Чтобы кровь могла насытиться кислородом, занимайтесь в хорошо проветриваемых помещениях.

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

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

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

Для тех, кто учит математику, существует множество средств для геймификации процесса. Среди наиболее известных – видеоигры Variant: Limits и while True: learn(), обучение в которых происходит через решение головоломок.

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

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

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

  1. Аналогия. Вначале задайтесь вопросом: встречалось ли мне раньше что-то похожее? Например, концепция электрического сопротивления похожа на концепцию движения жидкости в трубе. Свяжите получаемые знания с известными  ранее, включите их в имеющуюся картину мира. Запоминание по ассоциациям происходит более эффективно, в то время как обособленные знания наша внутренняя система «очистки мусора» удаляет первыми.
  2. Диаграмма. Визуализируйте концепцию. Перед глазами должен появиться конкретный образ, на который вы сможете опираться при дальнейших рассуждениях. Это может быть рисунок, список элементов, таблица, mindmap и т. д.
  3. Пример. Рассмотрите конкретный пример использования концепции, попробуйте решить задачу, получить первый опыт в применении материала.
  4. Описание. Опишите концепцию своими словами: в чем она заключается  и для чего нужна.
  5. Термин. Наконец, дайте строгое техническое определение, связывающее концепцию с другими терминами. Это формализует понимание и позволит общаться со специалистами на одном языке.

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

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

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

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

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

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

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

Примеры подобных планов: долгосрочный план для изучения Computer Science или более специализированный по Глубокому обучению и нейронным сетям.

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

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

6 шагов для написания любого алгоритма машинного обучения с нуля: Perceptron Case Study | Джон Салливан

Написание алгоритма машинного обучения с нуля - чрезвычайно полезный опыт обучения.

Это дает вам это «ах ха!» момент, когда он, наконец, щелкает, и вы понимаете, что на самом деле происходит под капотом.

Некоторые алгоритмы просто более сложны, чем другие, поэтому начните с чего-то простого, например, с однослойного Perceptron.

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

  1. Получите базовое понимание алгоритма
  2. Найдите несколько различных источников обучения
  3. алгоритм на куски
  4. Начните с простого примера
  5. Подтвердите с помощью надежной реализации
  6. Запишите свой процесс

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

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

  • Что это?
  • Для чего он обычно используется?
  • Когда я не могу использовать это?

Для Perceptron давайте продолжим и ответим на следующие вопросы:

  • Однослойный Perceptron - это самая базовая нейронная сеть. Обычно используется для задач двоичной классификации (1 или 0, «да» или «нет»).
  • Некоторым простым использованием может быть анализ настроений (положительный или отрицательный ответ) или прогноз дефолта по кредиту («будет по умолчанию», «не будет по умолчанию»).В обоих случаях граница решения должна быть линейной.
  • Если граница принятия решения является нелинейной, вы действительно не можете использовать Перцептрон. Для этих проблем вам нужно использовать что-то другое.

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

Некоторые люди учатся лучше с учебниками, некоторые люди учатся лучше с видео.

Лично я люблю прыгать вокруг и использовать различные типы источников.

Для математических деталей учебники отлично справляются, но для более практических примеров я предпочитаю сообщения в блогах и видео на YouTube.

Для Перцептрона есть несколько замечательных источников:

Учебники

Блоги

Видео

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

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

Запишите маркеры и попытайтесь обрисовать алгоритм.

После прохождения источников я разбил Perceptron на следующие 5 блоков:

  1. Инициализируем веса
  2. Умножим веса на входные и суммируем их
  3. Сравните результат с порогом для вычисления результата (1 или 0)
  4. Обновление весов
  5. Повторите

Давайте рассмотрим каждый из них подробно.

1. Инициализировать весы

Для начала мы инициализируем вектор весов.

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

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

Далее мы умножим весовые коэффициенты на входные значения, а затем суммируем их.

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

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

Окончательный результат равен 0. Я буду называть этот временный результат как «f».

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

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

Поскольку скалярное произведение «f», которое мы рассчитали (0), не превышает нашего порога (0), наша оценка равна нулю.

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

Если мы сравним этот результат с фактическим значением, мы увидим, что наши текущие веса не правильно предсказали фактический результат.

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

Далее, мы собираемся обновить веса.Вот уравнение, которое мы собираемся использовать:

Основная идея состоит в том, что мы корректируем текущий вес на итерации «n», чтобы мы получили новый вес для использования на следующей итерации, «n + 1».

Чтобы отрегулировать вес, нам нужно установить «скорость обучения». Это обозначается греческой буквой «эта».

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

Вот краткий обзор того, что мы имеем на данный момент:

Теперь давайте продолжим и вычислим новые веса для итерации n = 2.

Мы успешно завершили первую итерацию алгоритма Perceptron.

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

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

Один полный просмотр набора данных известен как «эпоха».

Поскольку наш набор данных состоит из 3 строк, нам потребуется три итерации, чтобы завершить 1 эпоху.

Мы могли бы установить общее количество итераций или эпох, чтобы продолжить выполнение алгоритма.Может быть, мы хотим указать 30 итераций (или 10 эпох).

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

В следующей итерации мы переходим ко второму ряду функций.

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

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

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

Для простоты я всегда хотел бы начать с очень маленького «игрушечного набора данных».

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

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

Я собираюсь добавить фиктивную функцию «x0», которая является столбцом единиц.Я сделал это так, чтобы наша модель вычисляла смещение.

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

Вот код для ввода данных:

 # Импорт библиотек 
# NAND Gate
# Примечание: x0 - фиктивная переменная для члена смещения
# x0 x1 x2
x = [[1., 0., 0 .],
[1., 0., 1.],
[1., 1., 0.],
[1., 1., 1.]] y = [1.,
1.,
1.,
0.]

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

Первым шагом является инициализация весов.

 # Инициализировать веса 
импортировать numpy как np
w = np.zeros (len (x [0])) Out:
[0. 0. 0.]

Имейте в виду, что длина вектора весов нужна чтобы соответствовать количеству функций. В этом примере логического элемента NAND эта длина равна 3.

Затем мы умножим веса на входные данные, а затем просуммируем их.

Другое название для этого - «скалярное произведение».

Опять же, мы можем использовать Numpy, чтобы легко выполнить эту операцию.Мы будем использовать метод .dot () .

Давайте начнем с точечного произведения вектора весов и первого ряда признаков.

 # Точечный продукт 
f = np.dot (w, x [0])
print fOut:
0,0

Как и ожидалось, результат равен 0.

Чтобы соответствовать нашим примечаниям в предыдущем разделе, я назначил скалярное произведение на переменную «f».

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

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

Я собираюсь сделать порог «z» равным 0. Если скалярное произведение «f» больше 0, наш прогноз будет 1. В противном случае он будет нулевым.

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

 # Функция активации 
z = 0.0
, если f> z:
yhat = 1.
else:
yhat = 0.

print yhat

Out:
0.0

Как и ожидалось, прогноз составляет 0.

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

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

Теперь, когда мы сделали наш прогноз, мы готовы обновить вес.

Нам нужно будет установить скорость обучения, прежде чем мы сможем это сделать. Чтобы соответствовать нашему предыдущему примеру, я назначу скорость обучения «eta» значением 0,1.

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

 # Обновление весов 
eta = 0.1
w [0] = w [0] + eta * (y [0] - yhat) * x [0] [0]
w [1] = w [1] + eta * (y [0] - yhat) * x [0] [1]
w [2] = w [2] + eta * (y [0] - yhat) * x [0] [2]

напечатать w

Out:
[0.1 0. 0.]

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

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

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

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

Связывая все вместе, вот как выглядит полная функция:

 импорт numpy как np 

# Функция персептрона
def perceptron (x, y, z, eta, t):
'' '
Входные параметры:
x : набор данных входных характеристик
y: фактические выходы
z: порог функции активации
eta: скорость обучения
t: количество итераций
'' '

# инициализация весов
w = np.нули (len (x [0]))
n = 0

# инициализация дополнительных параметров для вычисления суммы квадратов ошибок
yhat_vec = np.ones (len (y)) # вектор для прогнозов
ошибок = np.ones (len (y)) # вектор для ошибок (фактические - прогнозы)
J = [] # вектор для функции затрат SSE

, в то время как n = z:
yhat = 1.
else:
yhat = 0.
yhat_vec [i] = yhat

# обновление весов
для j в xrange (0, len (w)):
w [j] = w [j] + eta * (y [i] -yhat) * x [i] [j]

n + = 1
# вычисление суммы квадратов ошибок
для i в xrange (0, len (y)):
errors [i] = (y [i] -yhat_vec [i]) ** 2
J.append (0,5 * np.sum (errors))

return w, J

Теперь, когда мы закодировали полный Персептрон, давайте продолжим и запустите его:

 # x0 x1 x2 
x = [[1., 0., 0.],
[1., 0., 1.],
[1., 1., 0.],
[1., 1., 1.]]

y = [1. ,
1.,
1.,
0.]

z = 0,0
eta = 0,1
t = 50

print "Веса:"
print perceptron (x, y, z, eta, t) [ 0]

print "Ошибки:"
print perceptron (x, y, z, eta, t) [0]

Out:
Веса:
[0,2 -0,2 -0,1]
Ошибки:
[0,5, 1,5, 1,5, 1,0, 0,5, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0.0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0]

Рассматривая ошибки, мы можем видеть, что ошибка достигла 0 в течение 6-й итерации. Для оставшейся части итераций она оставалась равной 0.

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

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

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

Теперь пришло время сравнить наши результаты с надежной реализацией. Для сравнения мы будем использовать Перцептрон из scikit-learn.

Мы проработаем это сравнение, используя следующие шаги:

  1. Импорт данных
  2. Разделение данных на наборы для обучения / тестирования
  3. Обучите наш Perceptron
  4. Протестируйте Perceptron
  5. Сравните с Perceptron
  6. scikit-learn

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

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

 импортировать панд как pd 
импортировать numpy как np
импортировать matplotlib.pyplot как plt

df = pd.read_csv ("dataset.csv")
plt.scatter (df.values ​​[:, 1], df.values ​​[: , 2], c = df ['3'], alpha = 0.8)

Если посмотреть на сюжет, то довольно легко увидеть, что мы

.
Понять алгоритмы машинного обучения, используя их с нуля (и тактику, чтобы обойти

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

А может быть, это так.

Но есть и недостатки этого подхода.

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

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

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

Реализуйте алгоритмы машинного обучения с нуля!
Фото Тамбако Ягуар, некоторые права защищены.

Преимущества реализации алгоритмов машинного обучения с нуля

Продвигаю идею реализации алгоритмов машинного обучения с нуля.

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

Я обсуждал преимущества реализации алгоритмов с нуля, прежде чем в посте «Преимущества реализации алгоритмов машинного обучения с нуля ».

В посте я перечислил преимущества как:

  1. понимание, которое вы получаете
  2. отправной точкой он обеспечивает
  3. владение алгоритмом и кодом он принудительно

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

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

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

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

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

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

Гораздо более мягкое начало следовать чужому руководству.

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

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

Есть много преимуществ, чтобы начать с книгой. Например:

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

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

Наука о данных с нуля: первые принципы с Python, Джоэл Грус

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

Это одна из моих любимых книг по машинному обучению для начинающих в этом году.

Машинное обучение: алгоритмическая перспектива, Стивен Марсленд

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

Мне нравится, что он дает смесь математического описания, псевдокода и рабочего исходного кода.

Машинное обучение в действии Питера Харрингтона

В этой книге рассмотрены 10 самых популярных алгоритмов машинного обучения, в которых представлены тематические исследования и примеры рабочего кода на Python.

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

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

Дай мне знать в комментариях.

5 камней преткновения при реализации алгоритмов с нуля (и как их преодолеть)

Реализация алгоритмов машинного обучения с нуля с использованием учебников - это очень весело.

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

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

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

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

В любом случае, давайте рассмотрим 5 распространенных препятствий с помощью руководств по машинному обучению с нуля:

1) Не работает код

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

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

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

  • Код никогда не работал. Это означает, что книга была опубликована без тщательного редактирования. Здесь мало что можно сделать, кроме, возможно, проникнуть в мысли автора и попытаться понять, что они имели в виду. Может быть, даже попытаться связаться с автором или издателем.
  • Язык перешел. Это может случиться, особенно если пост старый или книга уже давно находится в печати.Два хороших примера являются версией Ruby, перемещающейся с 1.x на 2.x, и Python, перемещающейся с 2.x на 3.x.
  • Сторонние библиотеки продвинулись дальше. Это для тех случаев, когда реализации не были полностью с нуля и некоторые утилиты библиотеки использовались, например, для черчения. Часто это не так уж и плохо. Часто вы можете просто обновить код, чтобы использовать последнюю версию библиотеки и изменить аргументы, чтобы соответствовать изменениям API. Возможно, даже удастся установить старую версию библиотека (если есть несколько или нет зависимостей, которые вы могли бы нарушить в своей среде разработки).
  • Набор данных переместился. Это может произойти, если файл данных является URL-адресом и больше не доступен (возможно, вы можете найти файл в другом месте). Гораздо хуже, если пример написан на основе стороннего источника данных API, такого как Facebook или Twitter. Эти API могут сильно и быстро измениться. Лучше всего понять самую последнюю версию API и, если возможно, адаптировать пример кода.

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

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

2) Плохое описание кода

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

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

Я (возможно, любезно) называю их «плохими описаниями», потому что может быть много симптомов и причин. Например:

  • Несоответствие между кодом и описанием. Это могло быть вызвано тем, что код и текст были подготовлены в разное время и не были правильно отредактировано вместе. Это может быть что-то небольшое, например, изменение имени переменной, или это могут быть целые имена функций или сами функции.
  • Отсутствующие объяснения.Иногда вам дают большие блоки кода, которые вы должны понять. Это расстраивает, особенно в книга, где страница за страницей кода, которая будет легче понять на экране. Если это так, возможно, вам лучше найти онлайн-код для загрузки и работать с ним напрямую.
  • Краткие объяснения. Иногда вы получаете пояснения к коду, но они слишком краткие, например «использует получение информации »или что-то еще. Срыв! У вас все еще может быть достаточно информации для изучения этого термина, но было бы намного проще, если бы автор включил объяснение в контексте и относящееся к примеру.

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

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

3) Код не идиоматический

Мы, программисты, можем педантично относиться к «правильному» использованию наших языков (например, код Python не является Pythonic). Это хорошо, так как проявляется хорошее внимание к деталям и передовой опыт.

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

Это может быть по многим причинам, например:

  • Порт с другого языка. Пример кода может быть портом из другого языка программирования. Например, FORTRAN в Java или C в Python. К натренированный глаз, это может быть очевидно.
  • Автор изучает язык. Иногда автор может использовать книгу или учебный проект для изучения языка.Это может проявиться несогласованностью во всех примерах кода. Это может расстраивать и даже отвлекать, когда примеры многословны и плохо используют возможности языка и API.
  • Автор не использовал язык профессионально. Это может быть более тонким, чтобы обнаружить и может быть проявлено при использовании эзотерических языковых особенностей и API. Это может сбивать с толку, когда вам нужно исследовать или расшифровать странный код.

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

При этом вы получите более глубокое понимание алгоритма и больше владения кодом.

4) Код не подключен к Math

Хороший пример кода или учебное пособие обеспечат мост от математического описания к коду.

Это важно, потому что это позволяет вам путешествовать и начать интуитивно понимать нотацию и краткие математические описания.

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

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

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

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

5) Неполный листинг кода

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

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

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

Вот несколько причин, по которым может возникнуть этот камень преткновения:

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

Как понять язык математики

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

Почему важна математика?

Весьма вероятно, что в какой-то момент вам потребуется пройти стандартизированный тест с математикой - возможно, SAT, или использовать математику в текущей или будущей работе. Если вы упускаете возможность исправить свои математические недостатки сейчас, вы можете пожалеть об этом в будущем, когда друзья и коллеги начнут разбрасывать статистику, из-за которой вы чувствуете себя невежественным.Беспокоиться о том, что ваша неграмотность обнаружится, не так уж и весело, так почему бы вместо этого не потратить время на то, чтобы выучить немного математики? Я не буду приукрашивать; это не всегда будет легко. Но это, безусловно, того стоит. И если я буду делать свою работу правильно, это должно быть даже весело. Нет, это не шутка ... Я действительно сказал весело.

Как понять язык математики

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

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

Вы можете знать больше, чем думаете

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

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

Как решать повседневные математические задачи

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

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

Второй шаг - сложить эти отдельные суммы, чтобы вычислить общую стоимость поездки за покупками.В данном случае все довольно просто: 5 долларов плюс 3 доллара составляют 8 долларов, плюс еще 3 доллара - 11 долларов, плюс 2 доллара - 13 долларов, и, наконец, плюс еще 2 доллара - всего 15 долларов.

Хорошо, третий и последний шаг, который вам нужно сделать, чтобы выяснить, нужно ли вам идти в банк до того, как продуктовый магазин должен сравнить вашу общую расчетную стоимость с суммой денег, которую вы имеете в своем кошельке. Если вы нашли 10 долларов в своем кошельке ранее - ну 10 долларов <15 долларов - вам обязательно нужно сначала пойти в банк. С другой стороны, если у вас в настоящее время есть 20 долларов, то есть с 20 до 15 долларов, у вас будет достаточно денег на продукты.

Ты уже занимаешься математикой каждый день

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

Вот еще кое-что. Вместо того, чтобы покупать ингредиенты для пиццы, мы могли бы с такой же легкостью говорить о покупке кокосовых орехов с кофейными зернами - или абсолютно ничего другого в этом отношении.На самом деле, нам не нужно было говорить о покупке чего-либо. Абстрактно складывая числа 5–3–3–2–2 для ударов ногами, а затем проверяем, меньше ли сумма 20? Конечно, это тоже сработало бы, потому что математика вполне может работать без каких-либо реальных ссылок вообще - принципы и методы в любом случае одинаковы. И это очень мощный материал. Это означает, что если вы знаете, как решить проблему на основе одного набора идей, вы просто не знаете, как решить эту проблему.Скорее, поскольку теперь вы знаете основные общие принципы, вы также можете решить любую существующую проблему, основанную на этих принципах.

Почему математика может сбивать с толку

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

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

Пожалуйста, присылайте ваши вопросы и комментарии по адресу [email protected], следуйте за Джейсоном Маршаллом (Математическим чуваком) в Твиттере по адресу http://twitter.com/jasonmarshall и станьте фанатом в Facebook.

Изображение предоставлено Shutterstock


Смотрите также