Одна из самых удивительных вещей о библиотеке 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)
Визуализация изображений и ярлыков в нашем наборе данных
Разделение данных в обучение и тестовые наборы (цифры набора данных)
Мы делаем обучение и тестовые наборы, чтобы убедиться, что после того, как мы тренируем наш классификационный алгоритм, он может хорошо обобщить новых данных.
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
Способ 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
Один важный момент, чтобы подчеркнуть, что наборный набор данных, содержащийся в 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)
Визуализация изображений и ярлыков в нашем наборе данных
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 только что показывает, что некоторые алгоритмы оптимизации занимают больше времени Источник изображения
Дисплей неправильно классифицирован изображения с прогнозируемыми метками (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)
Показывая неправильно классифицированные цифры
Закрытие мыслей
Важно отметить здесь, что делает модель обучения машины в Scikit – учиться не большая работа. Я надеюсь, что этот пост поможет вам с тем, на что вы работаете. Мой следующий учебник по изучению машины идет через PCA с помощью Python Отказ Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы, либо здесь, либо на Video Page YouTube !
Эта статья изначально появилась на моем средний блог