Мультиклассовая классификация с использованием scikit-learn
Мультиклассовая классификация - популярная проблема машинного обучения с учителем.
Проблема. Имеется набор данных из m обучающих примеров, каждый из которых содержит информацию в виде различных функций и метки. Каждая метка соответствует классу, к которому принадлежит обучающий пример. В мультиклассовой классификации у нас есть конечный набор классов. В каждом обучающем примере также есть n функций.
Например, в случае идентификации разных типов фруктов «Форма», «Цвет», «Радиус» могут быть характеристиками, а «Яблоко», «Апельсин», «Банан» могут быть метками разных классов.
В мультиклассовой классификации мы обучаем классификатор, используя наши обучающие данные, и используем этот классификатор для классификации новых примеров.
Цель этой статьи - мы будем использовать различные методы мультиклассовой классификации, такие как KNN, деревья решений, SVM и т. Д. Мы сравним их точность на тестовых данных. Все это мы выполним с помощью sci-kit learn (Python). Для получения информации о том, как установить и использовать sci-kit learn, посетите http://scikit-learn.org/stable/
Подход -
- Загрузить набор данных из источника.
- Разделите набор данных на «обучающие» и «тестовые» данные.
- Обучите дерево решений, SVM и классификаторы KNN на обучающих данных.
- Используйте приведенные выше классификаторы для прогнозирования меток для тестовых данных.
- Измеряйте точность и визуализируйте классификацию.
Классификатор дерева решений. Классификатор дерева решений - это систематический подход к многоклассовой классификации. Он задает набор вопросов к набору данных (связанных с его атрибутами / функциями). Алгоритм классификации дерева решений можно визуализировать в виде двоичного дерева. В корневом узле и на каждом из внутренних узлов задается вопрос, и данные на этом узле далее разделяются на отдельные записи с разными характеристиками. Листья дерева относятся к классам, на которые разбивается набор данных. В следующем фрагменте кода мы обучаем классификатор дерева решений в 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) |
Рекомендации -
- http://scikit-learn.org/stable/modules/naive_bayes.html
- https://en.wikipedia.org/wiki/Multiclass_classification
- http://scikit-learn.org/stable/documentation.html
- http://scikit-learn.org/stable/modules/tree.html
- http://scikit-learn.org/stable/modules/svm.html#svm-kernels
- https://www.analyticsvidhya.com/blog/2015/10/understaing-support-vector-machine-example-code/
Автор статьи - Арик Памнани . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.