Классификация - Введение

Введение в классификацию

Классификацию можно определить как процесс прогнозирования класса или категории по наблюдаемым значениям или заданным точкам данных. Разделенный на категории вывод может иметь такую ​​форму, как «черный» или «белый», «спам» или «без спама».

Математически классификация - это задача аппроксимации функции отображения (f) входных переменных (X) в выходные переменные (Y). В основном это относится к контролируемому машинному обучению, в котором цели также предоставляются вместе с набором входных данных.

Примером проблемы классификации может быть обнаружение спама в электронных письмах. Может быть только две категории вывода: «спам» и «нет спама»; следовательно, это классификация бинарного типа.

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

Типы учащихся в классификации

У нас есть два типа учеников в соответствии с проблемами классификации:

Ленивые ученики

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

Активные ученики

В отличие от ленивых учеников, активные ученики создают модель классификации, не дожидаясь появления данных тестирования после сохранения данных обучения. Они тратят больше времени на тренировки, но меньше на прогнозы. Примерами активных учеников являются деревья принятия решений, наивный байесовский метод и искусственные нейронные сети (ИНС).

Построение классификатора на Python

Scikit-learn, библиотеку Python для машинного обучения можно использовать для создания классификатора на Python. Шаги по созданию классификатора в Python следующие:

Шаг 1. Импорт необходимого пакета Python

Для создания классификатора с использованием scikit-learn нам необходимо его импортировать. Мы можем импортировать его, используя следующий скрипт -

import sklearn

Шаг 2. Импорт набора данных

После импорта необходимого пакета нам понадобится набор данных для построения модели прогнозирования классификации. Мы можем импортировать его из набора данных sklearn или использовать другой в соответствии с нашими требованиями. Мы собираемся использовать диагностическую базу данных рака молочной железы sklearn Wisconsin. Мы можем импортировать его с помощью следующего скрипта -

from sklearn.datasets import load_breast_cancer

Следующий скрипт загрузит набор данных;

data = load_breast_cancer()

Нам также необходимо организовать данные, и это можно сделать с помощью следующих скриптов:

label_names = data['target_names']
   labels = data['target']
   feature_names = data['feature_names']
   features = data['data']

Следующая команда напечатает название этикеток, 'malignant' и 'benign'в случае нашей базы данных.

print(label_names)

Результатом вышеуказанной команды являются имена меток -

['malignant' 'benign']

Эти метки отображаются на двоичные значения 0 и 1. Malignant рак представлен 0 и Benign рак представлен 1.

Имена функций и значения функций этих меток можно увидеть с помощью следующих команд:

print(feature_names[0])

Результатом вышеуказанной команды являются имена функций для метки 0, т.е. Malignant рак -

mean radius

Точно так же имена функций для этикетки могут быть произведены следующим образом:

print(feature_names[1])

Результатом вышеуказанной команды являются имена функций для метки 1, т.е. Benign рак -

mean texture

Мы можем распечатать характеристики этих этикеток с помощью следующей команды -

print(features[0])

Это даст следующий результат -

[
   1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
   1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
   6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
   1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
   4.601e-01 1.189e-01
]

Мы можем распечатать характеристики этих этикеток с помощью следующей команды -

print(features[1])

Это даст следующий результат -

[
   2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02
   7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01
   5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01
   2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01
   2.750e-01 8.902e-02
]

Шаг 3. Организация данных в наборы для обучения и тестирования

Поскольку нам нужно протестировать нашу модель на невидимых данных, мы разделим наш набор данных на две части: обучающий набор и тестовый набор. Мы можем использовать функцию train_test_split () пакета python sklearn для разделения данных на наборы. Следующая команда импортирует функцию -

from sklearn.model_selection import train_test_split

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

train, test, train_labels, test_labels = train_test_split(
   features,labels,test_size = 0.40, random_state = 42
)

Шаг 4: оценка модели

После разделения данных на обучение и тестирование нам нужно построить модель. Для этого мы будем использовать алгоритм Наивного Байеса. Следующие команды импортируют модуль GaussianNB -

from sklearn.naive_bayes import GaussianNB

Теперь инициализируйте модель следующим образом -

gnb = GaussianNB()

Затем с помощью следующей команды мы можем обучить модель -

model = gnb.fit(train, train_labels)

Теперь для оценки нам нужно сделать прогнозы. Это можно сделать с помощью функции predic () следующим образом:

preds = gnb.predict(test)
print(preds)

Это даст следующий результат -

[
   1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1
   0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1
   1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0
   0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1
   1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0 
   1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 
   1

]

Вышеупомянутые серии выходных нулей и единиц представляют собой прогнозируемые значения для Malignant и Benign классы опухолей.

Шаг 5. Определение точности

Мы можем определить точность построения модели на предыдущем шаге, сравнив два массива, а именно test_labels и preds. Мы будем использовать функцию precision_score (), чтобы определить точность.

from sklearn.metrics import accuracy_score
   print(accuracy_score(test_labels,preds))
   0.951754385965

Приведенный выше вывод показывает, что классификатор NaïveBayes имеет точность 95,17%.

Метрики оценки классификации

Работа не выполняется, даже если вы завершили реализацию приложения или модели машинного обучения. Мы должны выяснить, насколько эффективна наша модель? Могут быть разные метрики оценки, но мы должны выбирать их внимательно, потому что выбор метрик влияет на то, как измеряется и сравнивается производительность алгоритма машинного обучения.

Ниже приведены некоторые важные показатели оценки классификации, среди которых вы можете выбрать в зависимости от вашего набора данных и типа проблемы.

Матрица путаницы

Это самый простой способ измерить производительность задачи классификации, когда на выходе могут быть два или более типов классов. Матрица путаницы - это не что иное, как таблица с двумя измерениями, а именно. «Фактический» и «Прогнозируемый», и, кроме того, оба измерения имеют «Истинные положительные результаты (TP)», «Истинные отрицательные результаты (TN)», «Ложные положительные результаты (FP)», «Ложные отрицательные результаты (FN)», как показано ниже -

Объяснение терминов, связанных с матрицей путаницы, следующее:

  • True Positives (TP) - Это тот случай, когда как фактический, так и прогнозируемый класс точки данных равны 1.

  • True Negatives (TN) - Это тот случай, когда как фактический, так и прогнозируемый класс точки данных равны 0.

  • False Positives (FP) - Это тот случай, когда фактический класс точки данных равен 0, а прогнозируемый класс точки данных равен 1.

  • False Negatives (FN) - Это тот случай, когда фактический класс точки данных равен 1, а прогнозируемый класс точки данных равен 0.

Мы можем найти матрицу путаницы с помощью функции confusion_matrix () программы sklearn. С помощью следующего скрипта мы можем найти матрицу путаницы выше построенного двоичного классификатора -

from sklearn.metrics import confusion_matrix

Вывод

[
   [ 73   7]
   [  4 144]
]

Точность

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

$$ = \ frac {+} {+++} $$

Для построенного выше двоичного классификатора TP + TN = 73 + 144 = 217 и TP + FP + FN + TN = 73 + 7 + 4 + 144 = 228.

Следовательно, точность = 217/228 = 0,951754385965, что такое же, как мы рассчитали после создания нашего двоичного классификатора.

Точность

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

$$ = \ frac {} {+ FP} $$

Для построенного выше двоичного классификатора TP = 73 и TP + FP = 73 + 7 = 80.

Следовательно, точность = 73/80 = 0,915.

Отзыв или чувствительность

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

$$ = \ frac {} {+ FN} $$

Для построенного выше двоичного классификатора TP = 73 и TP + FN = 73 + 4 = 77.

Следовательно, точность = 73/77 = 0,94805.

Специфика

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

$$ = \ frac {N} {N + FP} $$

Для построенного выше двоичного классификатора TN = 144 и TN + FP = 144 + 7 = 151.

Следовательно, точность = 144/151 = 0,95364.

Различные алгоритмы классификации ML

Ниже приведены некоторые важные алгоритмы классификации ML:

  • Логистическая регрессия

  • Машина опорных векторов (SVM)

  • Древо решений

  • Наивный байесовский

  • Случайный лес

Мы подробно обсудим все эти алгоритмы классификации в следующих главах.

Приложения

Некоторые из наиболее важных приложений алгоритмов классификации следующие:

  • Распознавание речи

  • Распознавание почерка

  • Биометрическая идентификация

  • Классификация документов