Поиск по сайту:

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


Введение

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

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

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

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

Предпосылки

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

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

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

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

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

    1. . my_env/bin/activate

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

    1. python -c "import sklearn"

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

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

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

    1. pip install scikit-learn[alldeps]

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

    1. jupyter notebook

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

    import sklearn
    

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

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

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

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

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

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

    ...
    from sklearn.datasets import load_breast_cancer
    
    
    # Load dataset
    data = load_breast_cancer()
    

    Словарь data. Важными ключами словаря, которые следует учитывать, являются имена меток классификации (target_names), фактические метки (target), имена атрибутов/функций (feature_names). ) и атрибуты (data).

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

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

    ...
    # 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(labels[0])
    print(feature_names[0])
    print(features[0])
    

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

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

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

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

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

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

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

    ...
    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/test, то есть train_labels и test_labels.

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

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

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

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

    ...
    from sklearn.naive_bayes import GaussianNB
    
    
    # Initialize our classifier
    gnb = GaussianNB()
    
    # Train our classifier
    model = gnb.fit(train, train_labels)
    

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

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

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

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

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

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

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

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

    ...
    from sklearn.metrics import accuracy_score
    
    
    # Evaluate accuracy
    print(accuracy_score(test_labels, preds))
    

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

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

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

    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, чтобы узнать больше об идеях машинного обучения.

    Заключение

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