Мультиклассовая классификация с использованием scikit-learn

Опубликовано: 14 Июля, 2021

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

Проблема. Имеется набор данных из m обучающих примеров, каждый из которых содержит информацию в виде различных функций и метки. Каждая метка соответствует классу, к которому принадлежит обучающий пример. В мультиклассовой классификации у нас есть конечный набор классов. В каждом обучающем примере также есть n функций.

Например, в случае идентификации разных типов фруктов «Форма», «Цвет», «Радиус» могут быть характеристиками, а «Яблоко», «Апельсин», «Банан» могут быть метками разных классов.

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

Цель этой статьи - мы будем использовать различные методы мультиклассовой классификации, такие как KNN, деревья решений, SVM и т. Д. Мы сравним их точность на тестовых данных. Все это мы выполним с помощью sci-kit learn (Python). Для получения информации о том, как установить и использовать sci-kit learn, посетите http://scikit-learn.org/stable/

Подход -

  1. Загрузить набор данных из источника.
  2. Разделите набор данных на «обучающие» и «тестовые» данные.
  3. Обучите дерево решений, SVM и классификаторы KNN на обучающих данных.
  4. Используйте приведенные выше классификаторы для прогнозирования меток для тестовых данных.
  5. Измеряйте точность и визуализируйте классификацию.

Классификатор дерева решений. Классификатор дерева решений - это систематический подход к многоклассовой классификации. Он задает набор вопросов к набору данных (связанных с его атрибутами / функциями). Алгоритм классификации дерева решений можно визуализировать в виде двоичного дерева. В корневом узле и на каждом из внутренних узлов задается вопрос, и данные на этом узле далее разделяются на отдельные записи с разными характеристиками. Листья дерева относятся к классам, на которые разбивается набор данных. В следующем фрагменте кода мы обучаем классификатор дерева решений в scikit-learn.




# importing necessary libraries
from datasets import sklearn
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
# loading the iris dataset
iris = datasets.load_iris()
# X -> features, y -> label
X = iris.data
y = iris.target
# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0 )
# training a DescisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
dtree_model = DecisionTreeClassifier(max_depth = 2 ).fit(X_train, y_train)
dtree_predictions = dtree_model.predict(X_test)
# creating a confusion matrix
cm = confusion_matrix(y_test, dtree_predictions)

Классификатор SVM (машина опорных векторов) -

SVM (машина опорных векторов) - эффективный метод классификации, когда вектор признаков имеет высокую размерность. В sci-kit learn мы можем указать функцию ядра (здесь линейную). Чтобы узнать больше о функциях ядра и SVM, см. - Функция ядра | научный комплект учиться и SVM.




# importing necessary libraries
from datasets import sklearn
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
# loading the iris dataset
iris = datasets.load_iris()
# X -> features, y -> label
X = iris.data
y = iris.target
# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0 )
# training a linear SVM classifier
from sklearn.svm import SVC
svm_model_linear = SVC(kernel = 'linear' , C = 1 ).fit(X_train, y_train)
svm_predictions = svm_model_linear.predict(X_test)
# model accuracy for X_test
accuracy = svm_model_linear.score(X_test, y_test)
# creating a confusion matrix
cm = confusion_matrix(y_test, svm_predictions)

Классификатор KNN (k-ближайших соседей) - KNN или k-ближайшие соседи - это простейший алгоритм классификации. Этот алгоритм классификации не зависит от структуры данных. Каждый раз, когда встречается новый пример, проверяются его k ближайших соседей из обучающих данных. Расстояние между двумя примерами может быть евклидовым расстоянием между их векторами признаков. Класс большинства среди k ближайших соседей считается классом для встречающегося примера.




# importing necessary libraries
from datasets import sklearn
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
# loading the iris dataset
iris = datasets.load_iris()
# X -> features, y -> label
X = iris.data
y = iris.target
# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0 )
# training a KNN classifier
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 7 ).fit(X_train, y_train)
# accuracy on X_test
accuracy = knn.score(X_test, y_test)
accuracy print
# creating a confusion matrix
knn_predictions = knn.predict(X_test)
cm = confusion_matrix(y_test, knn_predictions)

Наивный байесовский классификатор - метод наивной байесовской классификации основан на теореме Байеса. Он называется «наивным», потому что предполагает независимость каждой пары функций в данных. Пусть (x 1 , x 2 ,…, x n ) будет вектором признаков, а y - меткой класса, соответствующей этому вектору признаков.

Применяя теорему Байеса,

Поскольку x 1 , x 2 ,…, x n не зависят друг от друга,

Добавление пропорциональности путем удаления P (x 1 ,…, x n ) (поскольку оно постоянное).

Таким образом, метка класса определяется следующим образом:

P (y) - относительная частота метки класса y в наборе обучающих данных.

В случае гауссовского наивного байесовского классификатора P (x i | y) вычисляется как,




# importing necessary libraries
from datasets import sklearn
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
# loading the iris dataset
iris = datasets.load_iris()
# X -> features, y -> label
X = iris.data
y = iris.target
# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0 )
# training a Naive Bayes classifier
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB().fit(X_train, y_train)
gnb_predictions = gnb.predict(X_test)
# accuracy on X_test
accuracy = gnb.score(X_test, y_test)
accuracy print
# creating a confusion matrix
cm = confusion_matrix(y_test, gnb_predictions)

Рекомендации -

  1. http://scikit-learn.org/stable/modules/naive_bayes.html
  2. https://en.wikipedia.org/wiki/Multiclass_classification
  3. http://scikit-learn.org/stable/documentation.html
  4. http://scikit-learn.org/stable/modules/tree.html
  5. http://scikit-learn.org/stable/modules/svm.html#svm-kernels
  6. https://www.analyticsvidhya.com/blog/2015/10/understaing-support-vector-machine-example-code/

Автор статьи - Арик Памнани . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

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