Шаг 70.
Однострочники Python. Машинное обучение. Классификация путем метода опорных векторов с помощью одной строки кода. Код и принцип работы

    На этом шаге мы приведем алгоритм и рассмотрим принцип его работы.

Код

    Можно ли создать собственный алгоритм SVM с помощью одной строки кода на Python? Взгляните на пример 4.9.


Пример 4.9. Классификация с помощью SVM в одной строке кода
## Зависимости
from sklearn import svm
import numpy as np

## Данные: оценки студентов по (математика, языки, творческие
## способности) --> предмет для изучения
X = np.array([[9, 5, 6, "computer science"],
              [10, 1, 2, "computer science"],
              [1, 8, 1, "literature"],
              [4, 9, 3, "literature"],
              [0, 1, 10, "art"],
              [5, 7, 9, "art"]])

## Однострочник
svm = svm.SVC().fit(X[:, :-1], X[:, -1])

## Результат
student_0 = svm.predict([[3, 3, 6]])
print(student_0)
student_1 = svm.predict([[8, 1, 1]])
print(student_1)
Архив с файлом можно взять здесь.

    Угадайте, что вернет этот код.

Принцип работы

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

    Поскольку данные у нас - трехмерные, метод опорных векторов разделяет их с помощью двумерных плоскостей (линейный разделитель), а не одномерных прямых. Как вы, наверное, видите, можно также разделять три класса, а не два, как в предыдущих примерах.

    Сам однострочник очень прост: сначала мы создаем модель с помощью конструктора класса svm.SVC (SVC расшифровывается как support-vector classification - классификация с помощью опорных векторов). Далее мы вызываем функцию fit(), производящую обучение на основе наших маркированных обучающих данных.

    В части "Результат" фрагмента кода мы вызываем функцию predict(), передавая ей новые наблюдения. Поскольку для student_0 указано математика = 3, языки = 3 и творческие способности = 6, то метод опорных векторов предсказывает, что способностям студента соответствует метка art. Аналогично, для student_1 с математика = 8, языки = 1 и творческие способности = 1 метод опорных векторов предсказывает, что способностям студента соответствует метка computer science.

    Вот как выглядят итоговые результаты нашего однострочника:

## Результат
student_0 = svm.predict([[3, 3, 6]]) 
print(student_0)
# ['art']

student_1 = svm.predict([[8, 1, 1]])
print(student_1)
## ['computer science']

    Резюмируя: SVM демонстрирует хорошие результаты даже в многомерных пространствах при количестве признаков, превышающем количество обучающих векторов данных. Идея максимизации "запаса прочности" вполне интуитивна и демонстрирует хорошие результаты даже при классификации граничных случаев (boundary cases) - векторов, попадающих в рамки этого "запаса прочности". В следующем шаге мы рассмотрим более общую картину - метаалгоритм классификации: обучение ансамблей с помощью случайных лесов.

    На следующем шаге мы рассмотрим классификацию с помощью случайных лесов в одной строке кода.




Предыдущий шаг Содержание