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

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

Обратите внимание, что для выполнения этого проекта в вашей системе должен быть установлен пакет scikit-learn python.

Если у вас нет scikit-learn, вы можете использовать эту команду в терминале для установки

pip install scikit-learn

Реализация алгоритма машинного обучения классификации раковых клеток

  1. Мы будем импортировать модуль scikit-learn python вместе с набором данных.
import sklearn
from sklearn.datasets import load_breast_cancer

2. Теперь давайте сохраним его в переменной.

data = load_breast_cancer()

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

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

здесь, если мы хотим увидеть содержимое переменной label_names, это будет:

['malignant' 'benign']

Чтобы просмотреть имена функций, эта переменная будет выглядеть так:

['mean radius' 'mean texture' 'mean perimeter' 'mean area'
 'mean smoothness' 'mean compactness' 'mean concavity'
 'mean concave points' 'mean symmetry' 'mean fractal dimension'
 'radius error' 'texture error' 'perimeter error' 'area error'
 'smoothness error' 'compactness error' 'concavity error'
 'concave points error' 'symmetry error' 'fractal dimension error'
 'worst radius' 'worst texture' 'worst perimeter' 'worst area'
 'worst smoothness' 'worst compactness' 'worst concavity'
 'worst concave points' 'worst symmetry' 'worst fractal dimension']

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

from sklearn.model_selection import train_test_split
train, test, train_labels, test_labels = train_test_split(features, labels,test_size = 0.33, random_state = 42)

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

5. Создание модели. Я быиспользовал алгоритм наивного Байеса, который обычно хорошо работает в задачах бинарной классификации. Во-первых, импортируйте модуль GaussianNB и инициализируйте его с помощью функции GaussianNB(). Затем обучите модель, подгоняя ее к данным в наборе данных с помощью метода fit().

# importing the module of the machine learning model
from sklearn.naive_bayes import GaussianNB
# initializing the classifier
gnb = GaussianNB()
# training the classifier
model = gnb.fit(train, train_labels)

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

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

Составление прогнозов

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

# making the predictions
predictions = gnb.predict(test)
# printing the predictions
print(predictions)

ВЫВОД:

[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 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1 1 0 1 1 1 1 1 1 0 0
 0 1 1]

Примечание: функцияpredict() вернула массив из нулей и единиц. Эти значения представляют собой прогнозируемые значения тестового набора для класса опухоли (злокачественная или доброкачественная).

Определение точности модели

# importing the accuracy measuring function
from sklearn.metrics import accuracy_score
# evaluating the accuracy
print(accuracy_score(test_labels, predictions))

Как только мы напечатаем его, мы получим около 94% точности нашей модели.

Что это вообще значит?

Это означает, что классификатор, который мы запрограммировали на основе алгоритма наивного Байеса, с точностью 94% предсказывает, является ли опухоль злокачественной или доброкачественной.

Что мы на самом деле делаем, используя функцию оценки точности?

Мы оцениваем точность нашей модели, сравнивая ее с фактическими метками набора тестов, т. е. сравнивая прогнозы с test_labels.