Изучая часть Урока 3, посвященную введению Udacity в машинное обучение, я узнал о машине опорных векторов, или SVM, оценщика. В моем последнем посте я обсуждал использование SVM-модели SVM для линейной классификации подлинности счетов. Этот пост можно найти здесь: - https://medium.com/mlearning-ai/how-to-use-the-support-vector-machine-svm-as-a-classifier-e3b597d1b125

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

Я написал этот сценарий в бесплатном онлайн-блокноте Jupyter, Google Colab. Самое замечательное в этом Jupyter Notebook - это то, что я могу сохранять свою работу на моем диске Google. Есть и другие блокноты Jupyter, которые можно использовать, например Saturn Cloud, Microsoft Azure или www.jupyter.org, но в настоящее время я предпочитаю Google Colab.

Создав файл, я импортировал библиотеки, которые потребуются мне для правильного запуска программы. В этом случае я решил импортировать pandas, numpy, matplotlib, seaborn и sklearn. Pandas - это библиотека, которая создает и изменяет наборы данных, поэтому является неотъемлемой частью машинного обучения. Numpy выполняет быстрые алгебраические вычисления, а также необходим из-за работы, которую он выполняет с векторами. Matplotlib и seaborn - это графические средства, которые выполняют функции построения графиков данных. И, наконец, sklearn - это основная библиотека, которая используется для выполнения операций машинного обучения.

После того, как я импортировал библиотеки, я создал набор данных, используя функцию make_moons в sklearn: -

После создания набора данных о лунах я использовал matplotlib, чтобы построить его на графике, который показан ниже: -

Затем я определил независимые переменные. Первым делом я поместил метку в переменную с именем target, а затем удалил метку из фрейма данных. Затем я поместил цель в y - переменную, которую я определил. Остальные данные, df, были помещены в X, еще одну переменную, которую я определил. X - независимая переменная, а y - зависимая.

Затем я использовал train_test_split sklearn, чтобы разделить переменные X и y для обучения и проверки: -

После создания наборов данных для обучения и проверки я определил модель. Поскольку это упражнение SVM, я был вынужден использовать SVC и настроить его параметры для достижения наилучшей производительности. В моем предыдущем посте я использовал «линейное» ядро ​​для достижения наилучших результатов в наборе данных аутентификации счетов, но в этом посте мне пришлось использовать нелинейное ядро, чтобы добиться максимальной точности. В конце концов я остановился на ядре «rbf». Радиальное базовое ядро ​​или rbf - это функция ядра, которая используется в машинном обучении для поиска нелинейного классификатора или линии регрессии.

Функция ядра rbf используется для преобразования n-мерного ввода в m-мерный ввод, где m намного больше, чем n, а затем эффективно находит скалярное произведение в более высокомерном. Основная идея использования этого ядра заключается в следующем: линейный классификатор или кривая регрессии в более высоких измерениях становится нелинейным классификатором или кривой регрессии в более низких измерениях. В этот раз я хотел бы упомянуть, что рассмотрел концепции размерности и точечных произведений, когда опубликовал обзор курса линейной алгебры Udacity, ссылка на который находится здесь: - https://medium.com/geekculture/course-review -udacitys-linear-algebra-course-with-python-1b3f4f37f457

После того, как я определил модель, я сделал прогноз на проверочном наборе и добился 100% точности!

Затем я оценил прогноз с помощью sklearn classes_report и confusion_matrix, что дало разбивку набранных мной баллов: