Знакомство с основными понятиями

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

Одной из самых сильных сторон Mathematica являются символьные вычисления, и в этом отношении нет программного обеспечения, которое могло бы конкурировать с Mathematica. С другой стороны, в области машинного обучения есть несколько программ, которые могут выполнять отличные вычисления, такие как Python, R, Java, Matlab и Maple.

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

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

Регрессия

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

В Mathematica есть много хорошо известных наборов данных по умолчанию, которые используются во многих классических примерах ML. Одним из них является набор данных WineQuality[1, 2]. Этот набор данных очень хорошо известен, его можно найти в наборах данных ICS ML и напрямую скачать в виде CSV-файла.

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

Code 1:
[In]: PATH = "path of your CSV file on your computer"
[In]: dataset = SemanticImport[PATH]
[Out]:

Первая команда ввода в Код 1 — это путь к CSV-файлу на вашем компьютере. Вторая команда ввода — это использование функции SemanticImport[] для преобразования файла CVS в набор данных Mathematica и отображения набора данных в виде таблицы со строками и столбцами. Также хорошо видны имена функций для каждого столбца.

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

Набор данных WineQuality включает в себя несколько химических свойств различных вин, таких как PH, алкоголь, качество вина и т. д. Очень часто с этим типом набора данных пытаются использовать регрессию или классификацию, чтобы предсказать качество вина на основе остальные другие функции. В этом случае качество вина можно рассматривать как выходную (целевую) переменную (y = качество вина), а матрица признаков X состоит из остальных признаков. Качество вина обычно оценивается в интервале [1, 10], где 10 — максимальное значение качества марки вина.

Одной из наиболее важных функций Mathematica для ML является функция Predict[…]. Эта функция может использоваться с различными типами данных, такими как числовые, категориальные, текстовые, изображения, звук и т. д. Как следует из названия этой функции, цель Predict[…] — делать прогнозы в ML с учетом набора различных данных. Mathematica очень гибка в отношении типов входных данных и методов, используемых для прогнозирования. Подробности можно найти на веб-странице Mathematica.

Важными аспектами гибкости функции Mathematica Predict[…] являются различные параметры, которые могут быть полезны пользователю. Вот некоторые из этих вариантов:

  1. Метод. Этот параметр указывает, какой алгоритм регрессии использовать. Возможные алгоритмы регрессии: LinearRegression, DecisionTree, RandomForest, NearestNeighbor и т. д.
  2. Цель эффективности. Эта опция дает пользователю возможность использовать различные типы производительности для машинного обучения, такие как «Качество» и «Скорость» алгоритмических вычислений. «Качество» оптимизирует качество конечных результатов, а «Скорость» оптимизирует скорость получения конечного результата.
  3. Набор_валидации. Эта опция позволяет пользователю выбрать набор данных проверки во время процедуры обучения. Можно напрямую указать набор проверки или использовать автоматические параметры по умолчанию.
  4. Случайное размещение. Эта опция задает начальное значение случайного псевдогенератора, которое используется внутри во время вычислений.

Теперь пришло время привести конкретный пример того, как на самом деле работает регрессия в Mathematica. В качестве набора данных я использую набор данных WineQuality для типов белого вина. Этот набор данных включен по умолчанию в функцию ExampleData[…]. Чтобы получить набор данных, я запускаю следующий код:

Code 2:
[In]: trainset = ExampleData[{"MachineLearning", "WineQuality"}, "Data"];

Код 2 по умолчанию извлекает набор данных white wine и не отображает выходные данные, поскольку я добавил точку с запятой в конце. В Code 2 «trainset» — это просто переменная Mathematica. Общий синтаксис функции ExampleData: ExampleData["тип", "имя"}, "Свойства"], где "тип » указывает тип набора данных по умолчанию для определенной категории, а «имя» — это имя набора данных, выбранное среди доступных в категории «тип».

С другой стороны, «Свойства» — это параметр, который дает свойства выбранного набора данных. Например, следующий код дает некоторые свойства набора данных белого вина:

Code 3:
[In]: ExampleData[{"MachineLearning", "WineQuality"}, "Properties"][Out]:{Data, Description, Data, Dimensions, LearningTask, LongDescription, MissingData, Name, Source, TestData, TrainingData, VariableDescriptions, VariableTypes}
[In]: ExampleData[{"MachineLearning", "WineQuality"}, "Dimensions"][Out]: <|NumberFeatures -> 11, NumberExamples -> 4898|>
[In]: ExampleData[{"MachineLearning", "WineQuality"}, "VariableDescriptions"]
[Out]: {fixed acidity, volatile acidity, citric acid, residual sugar, chlorides, free sulfur dioxide,
total sulfur dioxide, density, pH, sulphates, alcohol} → wine quality (score between 1-10)

В коде 3 в первой части можно увидеть некоторые свойства набора данных WineQuality, такие как TrainingData, TestData и т. д. Во второй части можно увидеть «Размеры» набора данных, который имеет 11 функций. и 4898 примеров. В третьей части можно увидеть параметр описания переменных, тогда как в выходных данных отображаются имена функций и целевая переменная (качество вина) набора данных.

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

Code 4:
[In]: trainset = ExampleData[{"MachineLearning", "WineQuality"}, "TrainingData"];
[In]: predictor = Predict[trainset, Method -> "LinearRegression", PerformanceGoal -> "Quality"]
[Out]:

В коде 4 первый ввод извлекает набор данных WineQuality из категории наборов данных ML, а свойство «TrainingData» автоматически выбирает часть набора данных WineQuality в качестве обучающих данных. После того, как я определяю новую переменную, называемую предиктором, которой присваивается изученная функция во время обучения. Для этого конкретного примера я выбрал вариант метода «Линейная регрессия». Каждый волен выбирать и другие методы. Другой выбранный вариант — «PerformanceGoal», который я описал выше. В конце в качестве вывода Mathematica выдает «PredictorFunction[…]», которая представляет собой изученную функцию во время обучающего набора.

Чтобы получить больше информации об изученной PredictorFunction, нужно запустить следующий код:

Code 5:
[In]: Information[predictor]
[Out]:

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

Code 6:
[In]: validationset = ExampleData[{"MachineLearning", "WineQuality"}, "TestData"];
[In]: PredictorMeasurements[predictor, validationset, {"StandardDeviation", "RSquared"}]
[Out]: {0.726808, 0.177385}

Теперь позвольте мне объяснить шаги в коде 6. Первый ввод извлекает набор данных WineQuality из репозитория MachineLearning Mathematica и автоматически выбирает часть данных для набора проверки (или набора тестов). Второй вход использует функцию PredictorMeasurements, которая оценивает стандартное отклонение остатков в наборе проверки. Он использует в качестве аргументов функцию прогнозирования, изученную в коде 4 в наборе данных проверки с параметрами «StandardDeviation» и «RSquared». Первый вариант Mathematica соответствует среднеквадратичному значению невязок. В итоге среднеквадратичное значение остатков составляет приблизительно 0,73, а коэффициент детерминации R² = 0,17.

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

Code 7:
[In]: PredictorMeasurements[predictor, validationset, "ResidualPlot"]
[Out]: 

Классификация

Теперь я покажу вам, как можно использовать Mathematica для решения задач классификации. По аналогии с функцией Predict[…] для задач регрессии соответствующей функцией для задач классификации является Classify[…]. Егоможно использовать для многих типов данных, включая числовые, текстовые, звуки и изображения, а также их комбинации.

Классификация[…] ​​совместно использует несколько опций и методов с функцией Predict[…], описанной выше. Чтобы увидеть, как работает Classify[…], лучше привести конкретный пример. Предположим, у нас есть следующие функции {1, 2, 3.5, 4, 5} и следующие соответствующие классы {"A", "A", "A", "B", "B"}. Теперь я обучаю классификатор с помощью следующего кода:

Code 8:
[In]: class = Classify[{1, 2, 3.5, 4, 5} -> {"A", "A", "A", "B", "B"}, Method -> "LogisticRegression"]
[Out]:

В Code 8 я использовал Classify[…] для обучения модели с функциями и классами, описанными выше, и результатом стала функция ClassifierFunction[…], которая является изученной функцией классификации на этапе обучения. В качестве метода обучения я использовал «Логистическую регрессию». class — это переменная в Code 8.

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

Code 9:
[In]: Information[class]
[Out]:

Проверить изученную функцию классификации на проверочном наборе данных {1.4 -> «A», 5.3 -> «B», 1.2 -> «B», 4.6 -> «B», -3 -> «A»} в нотации Mathematica. , я запускаю следующий код:

Code 10:
[In]: validationset = {1.4 -> “A”, 5.3 -> “B”, 1.2 -> “B”, 4.6 -> “B”, -3 -> “A”}
[In]: CM = ClassifierMeasurements[class, validationset]
[Out]:

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

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

Code 11:
[In]: CM["ConfusionMatrixPlot"]
[Out]:

Заключение

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

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

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

Использованная литература:

[1] П. Кортез, А. Сердейра, Ф. Алмейда, Т. Матос и Дж. Рейс.
Моделирование винных предпочтений путем извлечения данных из физико-химических свойств. В системах поддержки принятия решений, Elsevier, 47(4):547–553, 2009 г.

[2] Дуа, Д. и Графф, К. (2019). Репозиторий машинного обучения UCI [http://archive.ics.uci.edu/ml]. Ирвин, Калифорния: Калифорнийский университет, Школа информационных и компьютерных наук.

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