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

Вступление

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

Вы найдете приложения машинного обучения везде. Netflix и Amazon используют машинное обучение для разработки новых рекомендаций. Банки используют машинное обучение для выявления мошеннических действий в транзакциях по кредитным картам, а медицинские компании начинают использовать машинное обучение для мониторинга, оценки и диагностики пациентов.

В этом руководстве вы реализуете простой алгоритм машинного обучения в Python, используя Scikit-learn, инструмент машинного обучения для Python. Используя базу данных информации о раке молочной железы, вы будете использовать Naive Bayes (NB) классификатор, который предсказывает, является ли опухоль злокачественной или доброкачественной ,

К концу этого урока вы узнаете, как построить свою собственную модель машинного обучения в Python.

Предпосылки

Для завершения этого урока вам понадобится:

  • Python 3 и локальная среда программирования, настроенная на вашем компьютере. Вы можете выполнить https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-for-python-3 руководство по установке и настройке. для вашей операционной системы], чтобы настроить это.

  • Если вы новичок в Python, вы можете изучить How to Code в Python 3, чтобы ознакомиться с языком.

  • Jupyter Notebook, установленный в virtualenv для этого урока. Ноутбуки Jupyter чрезвычайно полезны при проведении экспериментов по машинному обучению. Вы можете запускать короткие блоки кода и быстро просматривать результаты, что упрощает тестирование и отладку кода.

Шаг 1 - Импорт Scikit-Learn

Начнем с установки модуля Python Scikit-learn, одного из лучших и наиболее документированных библиотек машинного обучения для Python.

Чтобы начать наш проект кодирования, давайте активируем нашу среду программирования Python 3. Убедитесь, что вы находитесь в каталоге, в котором находится ваша среда, и выполните следующую команду:

. /bin/activate

Активировав нашу среду программирования, проверьте, установлен ли модуль Scikit-learn:

python -c "import sklearn"

Если + sklearn + установлен, эта команда завершится без ошибок. Если он не установлен, вы увидите следующее сообщение об ошибке:

OutputTraceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'

Сообщение об ошибке указывает, что + sklearn + не установлен, поэтому загрузите библиотеку, используя + pip +:

pip install scikit-learn[alldeps]

После завершения установки запустите Jupyter Notebook:

jupyter notebook

В Jupyter создайте новый блокнот Python под названием * ML Tutorial *. В первой ячейке Блокнота import модуль + sklearn +:

ML Tutorial

import sklearn

Ваша записная книжка должна выглядеть следующим образом:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/2vp91eL.png [Блокнот Jupyter с одной ячейкой Python, которая импортирует sklearn]

Теперь, когда в нашей записной книжке импортирован + sklearn +, мы можем начать работать с набором данных для нашей модели машинного обучения.

Шаг 2 - Импорт набора данных Scikit-learn

Набор данных, с которым мы будем работать в этом руководстве, - это Breast Cancer Wisconsin Diagnostic Database. Набор данных включает в себя различную информацию о раковых опухолях молочной железы, а также классификационные метки * злокачественные * или * доброкачественные *. Набор данных содержит 569 instances или данных о 569 опухолях и содержит информацию о 30 attributes или функциях, таких как радиус опухоли, текстура, гладкость и площадь.

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

Scikit-learn поставляется с различными наборами данных, которые мы можем загрузить в Python, и необходимый набор данных включен. Импортируйте и загрузите набор данных:

ML Tutorial

...
from sklearn.datasets import load_breast_cancer


# Load dataset
data = load_breast_cancer()

+ Data + variable представляет объект Python, который работает как https: //www.digitalocean .com / сообщества / учебники / понимание-словари-в-питон-3 [словарь]. Важными ключами словаря, которые следует учитывать, являются имена меток классификации (+ target_names +), фактические метки (+ target +), имена атрибутов / признаков (+ feature_names +) и атрибуты (+ data +).

Атрибуты являются критической частью любого классификатора. Атрибуты фиксируют важные характеристики о характере данных. Учитывая метку, которую мы пытаемся предсказать (злокачественная или доброкачественная опухоль), возможные полезные атрибуты включают размер, радиус и текстуру опухоли.

Создайте новые переменные для каждого важного набора информации и назначьте данные:

ML Tutorial

...
# Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

Теперь у нас есть lists для каждого набора информации. Чтобы лучше понять наш набор данных, давайте взглянем на наши данные, напечатав наши метки классов, метку первого экземпляра данных, имена наших функций и значения функций для первого экземпляра данных:

ML Tutorial

...
# Look at our data
print(label_names)
print(labels[0])
print(feature_names[0])
print(features[0])

При запуске кода вы увидите следующие результаты:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/ezmZX0c.png [Блокнот Alt Jupyter с тремя ячейками Python, который печатает первый экземпляр в нашем наборе данных]

Как показано на рисунке, наши имена классов * злокачественные * и * доброкачественные *, которые затем отображаются на двоичные значения + 0 + и + 1 +, где + 0 + представляет злокачественные опухоли и `1 + `представляет доброкачественные опухоли. Таким образом, наш первый экземпляр данных - это злокачественная опухоль, средний радиус которой равен « 1.79900000e + 01 +».

Теперь, когда мы загрузили наши данные, мы можем работать с нашими данными, чтобы построить наш классификатор машинного обучения.

Шаг 3 - Организация данных в наборы

Чтобы оценить, насколько хорошо работает классификатор, вы всегда должны тестировать модель на невидимых данных. Поэтому, прежде чем строить модель, разделите ваши данные на две части: training set и test set.

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

К счастью, + sklearn + имеет функцию под названием + train_test_split () +, которая делит ваши данные на эти наборы. Импортируйте функцию, а затем используйте ее для разделения данных:

ML Tutorial

...
from sklearn.model_selection import train_test_split


# Split our data
train, test, train_labels, test_labels = train_test_split(features,
                                                         labels,
                                                         test_size=0.33,
                                                         random_state=42)

Функция случайным образом разделяет данные, используя параметр + test_size +. В этом примере у нас теперь есть набор тестов (+ test +), который представляет 33% исходного набора данных. Остальные данные (+ train +) затем составляют тренировочные данные. У нас также есть соответствующие метки для переменных поезда / теста, т.е. + train_labels + и + test_labels +.

Теперь мы можем перейти к обучению нашей первой модели.

Шаг 4 - Построение и оценка модели

Есть много моделей для машинного обучения, и каждая модель имеет свои сильные и слабые стороны. В этом руководстве мы сосредоточимся на простом алгоритме, который обычно хорошо работает в задачах двоичной классификации, а именно на Naive Bayes (NB).

Сначала импортируйте модуль + GaussianNB +. Затем инициализируйте модель с помощью функции + GaussianNB () +, затем обучите модель, подгоняя ее к данным с помощью + gnb.fit () +:

ML Tutorial

...
from sklearn.naive_bayes import GaussianNB


# Initialize our classifier
gnb = GaussianNB()

# Train our classifier
model = gnb.fit(train, train_labels)

После того, как мы обучим модель, мы можем затем использовать обученную модель, чтобы делать прогнозы на нашем тестовом наборе, что мы делаем с помощью функции +gnast () +. Функция +realt () + возвращает массив предсказаний для каждого экземпляра данных в наборе тестов. Затем мы можем напечатать наши прогнозы, чтобы понять, что определило модель.

Используйте функцию +gnast () + с установленным + test + и напечатайте результаты:

ML Tutorial

...
# Make predictions
preds = gnb.predict(test)
print(preds)

Запустите код, и вы увидите следующие результаты:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/pFeJvNA.png [Блокнот Jupyter с ячейкой Python, которая печатает прогнозные значения классификатора Наивного Байеса на наших тестовых данных]

Как вы видите в выходных данных Jupyter Notebook, функция +realt () + вернула массив + 0 + s и + 1 + s, которые представляют наши прогнозируемые значения для класса опухоли (злокачественные по сравнению с доброкачественная).

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

Шаг 5 - Оценка точности модели

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

ML Tutorial

...
from sklearn.metrics import accuracy_score


# Evaluate accuracy
print(accuracy_score(test_labels, preds))

Вы увидите следующие результаты:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/wsLAaEE.png [Блокнот Alt Jupyter с ячейкой Python, которая печатает точность нашего классификатора NB]

Как видно из результатов, классификатор NB имеет точность 94,15%. Это означает, что в 94,15% случаев классификатор может сделать правильный прогноз относительно того, является ли опухоль злокачественной или доброкачественной. Эти результаты свидетельствуют о том, что наш набор функций из 30 атрибутов являются хорошими показателями класса опухоли.

Вы успешно создали свой первый классификатор машинного обучения. Давайте организуем код, разместив все операторы + import в верхней части Блокнота или скрипта. Окончательная версия кода должна выглядеть так:

ML Tutorial

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score


# Load dataset
data = load_breast_cancer()

# Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

# Look at our data
print(label_names)
print('Class label = ', labels[0])
print(feature_names)
print(features[0])

# Split our data
train, test, train_labels, test_labels = train_test_split(features,
                                                         labels,
                                                         test_size=0.33,
                                                         random_state=42)

# Initialize our classifier
gnb = GaussianNB()

# Train our classifier
model = gnb.fit(train, train_labels)

# Make predictions
preds = gnb.predict(test)
print(preds)

# Evaluate accuracy
print(accuracy_score(test_labels, preds))

Теперь вы можете продолжить работу с вашим кодом, чтобы увидеть, сможете ли вы заставить ваш классификатор работать еще лучше. Вы можете поэкспериментировать с различными подмножествами функций или даже попробовать совершенно разные алгоритмы. Посетите Scikit-learn’s website, чтобы узнать больше идей по машинному обучению.

Заключение

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

Related