Люди очень хорошо распознают рукописные цифры, но задумывались ли вы когда-нибудь о том, как человеческий мозг настолько эффективен, чтобы распознавать рукописные цифры? Можем ли мы использовать эту способность мозга, чтобы машины распознавали почерк? Да! В этом блоге мы собираемся написать программу для распознавания почерка, так что приступим.
- Создание набора данных: Мы будем использовать встроенный набор данных, который предоставляет Scikit learn, для классификации цифр на руке.
from sklearn import datasets digits = datasets.load_digits() dir(digits) #OUTPUT OF DIR(DIGITS) ['DESCR', 'data', 'images', 'target', 'target_names']
Переменная digits содержит [‘DESCR’, ‘data’, ‘images’, ‘target’, ‘target_names’]. Нам требуются функции и метки для обучения распознаванию рук. В этом случае мы будем использовать изображения как функции и цели как метки.
print type(digits.images) print type(digits.target) #Output these are the numpy array <type 'numpy.ndarray'> <type 'numpy.ndarray'> digits.images.shape #Image shapes #Out: (1797, 8, 8)
digits.image - это трехмерный массив. Первое измерение индексирует изображения, и мы видим, что всего у нас 1797 изображений. Следующие два измерения соответствуют координатам x и y пикселей в каждом изображении. Каждое изображение имеет размер 8x8 = 64 пикселя. Другими словами, этот массив может быть представлен в 3D в виде стопки изображений размером 8x8 пикселей каждое. Давайте посмотрим на данные первого изображения 8x8. Каждый слот в массиве соответствует пикселю, а значение в слоте - это количество черного в пикселе.
print digits.images[0] #Out: [[ 0. 0. 5. 13. 9. 1. 0. 0.] [ 0. 0. 13. 15. 10. 15. 5. 0.] [ 0. 3. 15. 2. 0. 11. 8. 0.] [ 0. 4. 12. 0. 0. 8. 8. 0.] [ 0. 5. 8. 0. 0. 9. 8. 0.] [ 0. 4. 11. 0. 1. 12. 7. 0.] [ 0. 2. 14. 5. 10. 12. 0. 0.] [ 0. 0. 6. 13. 10. 0. 0. 0.]]
Попробуем визуализировать изображение:
import matplotlib.pyplot as plt plt.imshow(digits.images[0],cmap='binary') plt.show()
Теперь давайте исследуем целевой атрибут:
print digits.target.shape print digits.target #Out: (1797,) [0 1 2 ... 8 9 8]
Мы готовы с функциями, и цель позволяет передать эти данные алгоритму логистической регрессии для классификации распознавания рук.
Приступим к изготовлению модели.
Разделение данных на обучающие и тестовые наборы (набор цифр)
Мы создаем обучающие и тестовые наборы, чтобы убедиться, что после обучения нашего алгоритма классификации он может хорошо обобщаться для новых данных.
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)
Создайте модель для машинного обучения
from sklearn.linear_model import LogisticRegression
Создать экземпляр модели
# все не указанные параметры устанавливаются по умолчанию logisticRegr = LogisticRegression()
Обучение модели на данных, сохранение информации, полученной из данных
Модель изучает взаимосвязь между цифрами (x_train) и метками (y_train)
logisticRegr.fit(x_train, y_train)
Прогнозирование меток для новых данных (новых изображений)
Использует информацию, полученную моделью в процессе обучения модели.
# Returns a NumPy Array # Predict for One Observation (image) logisticRegr.predict(x_test[0].reshape(1,-1))
Прогноз для нескольких наблюдений (изображений) одновременно
logisticRegr.predict(x_test[0:10])
Поздравляю! Наша модель готова к анализу рукописных цифр.