Вступление
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.