Рубрики
Без рубрики

Делать свой первый классификатор машинного обучения в Scikit-Suart (Python)

Одна из самых удивительных вещей о библиотеке Scikit-Scikit-Scikit-Scikit – это то, что имеет 4-ти шаг моделирования моделирования, который позволяет легкокомировать классификатор машинного обучения. Хотя этот учебник использует классификатор, называемый логистической регрессией, процесс кодирования в этом руководстве применяется к другим классификаторам в Sklearn (дерево решений, к-ближайшие соседи и т. Д.). В этом руководстве мы используем логистическую регрессию для прогнозирования цифровых меток на основе изображений. Изображение выше показывает кучу тренировочных цифр (наблюдения) от набора данных Mnist, членство категории которого известна (этикетки 0-9). После тренировки модели с логистикой регрессией ее можно использовать для прогнозирования этикетки изображения (этикетки 0-9), учитывая изображение.

Автор оригинала: Michael.

Одна из самых удивительных вещей о библиотеке Scikit-Scikit-Scikit-Scikit – это то, что имеет 4-ти шаг моделирования моделирования, который позволяет легкокомировать классификатор машинного обучения. Хотя этот учебник использует классификатор, называемый логистической регрессией, процесс кодирования в этом руководстве применяется к другим классификаторам в Sklearn (дерево решений, к-ближайшие соседи и т. Д.). В этом руководстве мы используем логистическую регрессию для прогнозирования цифровых меток на основе изображений. Изображение выше показывает кучу тренировочных цифр (наблюдения) от набора данных Mnist, членство категории которого известна (этикетки 0-9). После тренировки модели с логистикой регрессией ее можно использовать для прогнозирования этикетки изображения (этикетки 0-9), учитывая изображение.

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

Первая часть этого учебного поста происходит на DataSet Toy (цифры набора данных), чтобы показать быстро иллюстрировать рисунок моделирования моделирования Scikit-Surrey, и показать поведение логистической регрессии альгосфма. Вторая часть учебника проходит более реалистичный набор данных (DataSet Mnist), чтобы кратко показать, как изменение параметров модели по умолчанию может повлиять на производительность (как в сроках, так и в точности модели). С этим давайте начнем. Если вы потеряетесь, я рекомендую открыть видео выше на отдельной вкладке. Код, используемый в этом руководстве, доступен в таблице ниже.

Мнист логистическая регрессия Цифры логистической регрессии

Начало работы (предварительные условия)

Если у вас уже есть установлена AnaConda, пропустите следующий раздел. Я рекомендую установить AnaConda (либо Python 2 или 3 работает хорошо для этого учебника), поэтому у вас не будет никаких библиотек для импорта проблемы.

Вы можете либо загрузить ANACONDA с официального сайта и устанавливать самостоятельно, или вы можете выполнить эти учебные пособия по установке ANACONDA ниже, чтобы настроить AnaConda в вашей операционной системе.

Установите AnaConda на Mac YouTube видео Mac
Установите AnaConda на Windows YouTube видео Окна
Установите AnaConda на Ubuntu YouTube видео Ubuntu
Управление окружающей средой с кондиционером (Python 2 + 3, настройка ноутбуков Jupyter) YouTube видео Все

Загрузка данных (цифры набора данных)

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

from sklearn.datasets import load_digits
digits = load_digits()

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

# Print to show there are 1797 images (8 by 8 images for a dimensionality of 64)
print("Image Data Shape" , digits.data.shape)

# Print to show there are 1797 labels (integers from 0-9)
print("Label Data Shape", digits.target.shape)

Чтобы увидеть, что в наборе данных 1797 изображений 1797 изображений 1797

Показывая изображения и этикетки (цифры набора данных)

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

import numpy as np 
import matplotlib.pyplot as plt

plt.figure(figsize=(20,4))
for index, (image, label) in enumerate(zip(digits.data[0:5], digits.target[0:5])):
    plt.subplot(1, 5, index + 1)
    plt.imshow(np.reshape(image, (8,8)), cmap=plt.cm.gray)
    plt.title('Training: %i\n' % label, fontsize = 20)

Визуализация изображений и ярлыков в нашем наборе данных

цифры DataSet.png.

Разделение данных в обучение и тестовые наборы (цифры набора данных)

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

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.25, random_state=0)

Скакит-изучение 4-ступенчатой модели моделирования (цифры набора данных)

Шаг 1. Импортируйте модель, которую вы хотите использовать

В Sklearn все модели обучения машины реализуются как классы Python

from sklearn.linear_model import LogisticRegression

Шаг 2. Сделать экземпляр модели

# all parameters not specified are set to their defaults
logisticRegr = LogisticRegression()

Шаг 3. Обучение модели данных, хранение информации, извлеченной из данных

Модель изучает отношения между цифрами (x_train) и метками (y_train)

logisticRegr.fit(x_train, y_train)

Шаг 4. Предсказать этикетки новых данных (новые изображения)

Использует информацию, которую модель, изученная во время процесса обучения модели

# Returns a NumPy Array
# Predict for One Observation (image)
logisticRegr.predict(x_test[0].reshape(1,-1))
# Predict for Multiple Observations (images) at Once
logisticRegr.predict(x_test[0:10])
# Make predictions on entire test data
predictions = logisticRegr.predict(x_test)

Измерение производительности модели (цифры набора данных)

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

Точность определяется как:

(Фракция правильных прогнозов): правильные прогнозы/общее количество точек данных

# Use score method to get accuracy of model
score = logisticRegr.score(x_test, y_test)
print(score)

Наша точность составила 95,3%.

Путаница матрицы (цифры набора данных)

Путаница Matrix – это таблица, которая часто используется для описания производительности модели классификации (или «классификатор») на наборе тестовых данных, для которых известны истинные значения. В этом разделе я просто показываю два пакета Python (Meanborn and Matplotlib) для создания путаницы матриц.

import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import metrics

Метод 1 (Морной)

cm = metrics.confusion_matrix(y_test, predictions)
plt.figure(figsize=(9,9))
sns.heatmap(cm, annot=True, fmt=".3f", linewidths=.5, square = True, cmap = 'Blues_r');
plt.ylabel('Actual label');
plt.xlabel('Predicted label');
all_sample_title = 'Accuracy Score: {0}'.format(score)
plt.title(all_sample_title, size = 15);

Путаница матрицы с использованием Searborn

toy_digits_confusionea corncodentory.png.png

Способ 2 (MATPLOTLIB) Этот метод явно гораздо больше кода. Я просто хотел показать людям, как это сделать в Matplotlib.

cm = metrics.confusion_matrix(y_test, predictions)

plt.figure(figsize=(9,9))
plt.imshow(cm, interpolation='nearest', cmap='Pastel1')
plt.title('Confusion matrix', size = 15)
plt.colorbar()
tick_marks = np.arange(10)
plt.xticks(tick_marks, ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], rotation=45, size = 10)
plt.yticks(tick_marks, ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], size = 10)
plt.tight_layout()
plt.ylabel('Actual label', size = 15)
plt.xlabel('Predicted label', size = 15)
width, height = cm.shape

for x in xrange(width):
    for y in xrange(height):
        plt.annotate(str(cm[x][y]), xy=(y, x), 
                    horizontalalignment='center',
                    verticalalignment='center')

Путаница матрицы с использованием MATPLOTLIB

toy_digits_confusion matplotlib codementor.png.png.png

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

Загрузка данных (Mnist)

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

from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')

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

# These are the images
# There are 70,000 images (28 by 28 images for a dimensionality of 784)
print(mnist.data.shape)

# These are the labels
print(mnist.target.shape)

Чтобы увидеть, что есть 70000 изображений и 70000 ярлыков в набор данных

Расщепление данных в обучение и тестовые наборы (Mnist)

Подпись ниже расщепляется данные в наборы обучения и тестирования данных. test_size/7.0 Делает тренировочный набор размером 60 000 изображений и тестовый набор размером 10000.

from sklearn.model_selection import train_test_split

train_img, test_img, train_lbl, test_lbl = train_test_split(
    mnist.data, mnist.target, test_size=1/7.0, random_state=0)

Показывая изображения и ярлыки (Mnist)

import numpy as np
import matplotlib.pyplot as plt


plt.figure(figsize=(20,4))
for index, (image, label) in enumerate(zip(train_img[0:5], train_lbl[0:5])):
    plt.subplot(1, 5, index + 1)
    plt.imshow(np.reshape(image, (28,28)), cmap=plt.cm.gray)
    plt.title('Training: %i\n' % label, fontsize = 20)

Визуализация изображений и ярлыков в нашем наборе данных

Mnistimages.png.png

Scikit – Узнайте 4-ступенчатую модель моделирования (Mnist)

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

Шаг 1. Импортируйте модель, которую вы хотите использовать

В Sklearn все модели обучения машины реализуются как классы Python

from sklearn.linear_model import LogisticRegression

Шаг 2. Сделать экземпляр модели

Пожалуйста, смотрите Документация Если вам любопытно, что делает изменение решателя. По сути, мы изменяем алгоритм оптимизации.

# all parameters not specified are set to their defaults
# default solver is incredibly slow thats why we change it
logisticRegr = LogisticRegression(solver = 'lbfgs')

Шаг 3. Обучение модели данных, хранение информации, извлеченной из данных

Модель изучает отношения между X (цифрами) и Y (метки)

logisticRegr.fit(train_img, train_lbl)

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

# Returns a NumPy Array
# Predict for One Observation (image)
logisticRegr.predict(test_img[0].reshape(1,-1))
# Predict for Multiple Observations (images) at Once
logisticRegr.predict(test_img[0:10])
# Make predictions on entire test data
predictions = logisticRegr.predict(test_img)

Измерение производительности модели (Mnist)

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

Точность определяется как:

(Фракция правильных прогнозов): правильные прогнозы/общее количество точек данных

score = logisticRegr.score(test_img, test_lbl)
print(score)

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

91.45 2893,1 секунды libline.
91.30 52,86 секунды lbfgs.

Этот GIF только что показывает, что некоторые алгоритмы оптимизации занимают больше времени Источник изображения

contours_evaluation_optimizers.gif.

Дисплей неправильно классифицирован изображения с прогнозируемыми метками (Mnist)

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

import numpy as np 
import matplotlib.pyplot as plt
index = 0
misclassifiedIndexes = []
for label, predict in zip(test_lbl, predictions):
    if label != predict: 
        misclassifiedIndexes.append(index)
    index +=1
plt.figure(figsize=(20,4))
for plotIndex, badIndex in enumerate(misclassifiedIndexes[0:5]):
    plt.subplot(1, 5, plotIndex + 1)
    plt.imshow(np.reshape(test_img[badIndex], (28,28)), cmap=plt.cm.gray)
(https://github.com/mGalarnyk/Python_Tutorials/tree/master/Scrapy/fundrazr/fundrazr). The file is called MiniMorningScrape.csv (it is a large file).    plt.title('Predicted: {}, Actual: {}'.format(predictions[badIndex], test_lbl[badIndex]), fontsize = 15)

Показывая неправильно классифицированные цифры

Показано неправильно классифицировано.png.

Закрытие мыслей

Важно отметить здесь, что делает модель обучения машины в Scikit – учиться не большая работа. Я надеюсь, что этот пост поможет вам с тем, на что вы работаете. Мой следующий учебник по изучению машины идет через PCA с помощью Python Отказ Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы, либо здесь, либо на Video Page YouTube !

Эта статья изначально появилась на моем средний блог