Знакомство с основными понятиями
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[…] являются различные параметры, которые могут быть полезны пользователю. Вот некоторые из этих вариантов:
- Метод. Этот параметр указывает, какой алгоритм регрессии использовать. Возможные алгоритмы регрессии: LinearRegression, DecisionTree, RandomForest, NearestNeighbor и т. д.
- Цель эффективности. Эта опция дает пользователю возможность использовать различные типы производительности для машинного обучения, такие как «Качество» и «Скорость» алгоритмических вычислений. «Качество» оптимизирует качество конечных результатов, а «Скорость» оптимизирует скорость получения конечного результата.
- Набор_валидации. Эта опция позволяет пользователю выбрать набор данных проверки во время процедуры обучения. Можно напрямую указать набор проверки или использовать автоматические параметры по умолчанию.
- Случайное размещение. Эта опция задает начальное значение случайного псевдогенератора, которое используется внутри во время вычислений.
Теперь пришло время привести конкретный пример того, как на самом деле работает регрессия в 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]. Ирвин, Калифорния: Калифорнийский университет, Школа информационных и компьютерных наук.