Алгоритм K-ближайшего соседа
Алгоритм машинного обучения — это алгоритм, который генерирует модель из данных, то есть алгоритм обучения. Мы передаем опыт алгоритму, и он может генерировать модели на основе эмпирических данных. Столкнувшись с новой ситуацией, модель предоставит нам прогнозируемые результаты. Например, при распознавании чисел и символов для их распознавания не требуется цвет, достаточно использовать бинарные изображения, а цифровые символы бинарных изображений состоят из 0 и 1, и машинное обучение будет сопоставлять самые близкие символы в соответствии с позициями 0 и 1. или цифры, что приводит к результату. Алгоритм K-ближайшего соседа в машинном обучении наиболее подходит для распознавания текста или числовой информации на изображениях.
Алгоритм K-ближайшего соседа, также известный как алгоритм KNN, является очень классическим алгоритмом машинного обучения. Принцип очень прост: для новой выборки, под которой можно понимать новое цифровое изображение или текстовое изображение, алгоритм K-ближайших соседей найдет K данных, наиболее похожих на него в существующих данных, или K данных, наиболее близких к ит., если большая часть данных K относится к определенной категории, то выборка также относится к этой категории.
Определить номера
В первой статье руководства по разработке OpenCV-Python мы представили бинарные изображения, которые могут различать формы и приблизительные очертания объектов. Как показано ниже:
Изображение A здесь представляет собой матричный набор 0 и 1. Число 1 представляет место с цветом, а число 0 представляет место без цвета.
Здесь образцы данных, которые мы предоставляем для машинного обучения, представляют собой одномерный массив из 1024 элементов, предоставленный через лист Excel, а изображение представляет собой матрицу, а не одномерный массив. Следовательно, при обработке исходного изображения нам необходимо преобразовать матричные данные изображения в одномерный массив, чтобы облегчить сопоставление прогнозов машинного обучения.
Настройте изображение
Во-первых, цифровое изображение, которое нам нужно распознать, может не быть бинарным изображением или даже изображением в градациях серого. Поэтому нам нужно преобразовать его в бинарное изображение.
Во-вторых, бинарное изображение, преобразованное OpenCV, представляет собой матрицу, а данные для обучения машинному обучению представляют собой одномерный массив длиной 1024. Следовательно, нам также нужно уменьшить изображение до изображения 32 * 32 пикселей, чтобы оно было преобразовано в одномерный массив с данными 1024 0, 1.
Конкретный код выглядит следующим образом:
import cv2
img = cv2.imread("40.jpg")
img = cv2.resize(img, (32, 32))
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
t, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
img[img == 255] = 1
img_array= img.reshape(1, -1) # 转换为一维数组
Здесь мы сначала получаем изображение, а затем конвертируем его в размер 32*32 пикселя. Затем преобразуйте его в изображение в градациях серого и измените изображение на два значения 0 и 255 посредством бинаризации и, наконец, замените белую часть 255 на 1. Наконец, преобразуйте его в одномерный массив.
Построение модели алгоритма K-ближайшего соседа
Будь то алгоритм K-ближайшего соседа или алгоритм машинного обучения, мы обычно строим модель машинного обучения в два этапа. Первым шагом является разделение обучающей выборки и тестовой выборки, а вторым шагом является завершение построения модели.
Ниже мы конкретно реализуем, код выглядит следующим образом:
import cv2
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier as KNN
df = pd.read_excel("手写字体识别.xlsx")
# 提取特征变量,识别数字时,其特征就是1024个0,1数据,而目标变量就是1024个数字组成对应的结果数字
X = df.drop(columns="对应数字")
Y = df['对应数字']
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=111)
knn = KNN(n_neighbors=5)
knn.fit(x_train, y_train)
answer=knn.predict(img_array)
print("图中的数字是:"+str(answer[0]))
Здесь мы сначала читаем набор данных распознавания рукописного шрифта, а затем извлекаем переменные признаков и целевые переменные.
Затем с помощью функции train_test_split разделите полученный набор данных на тестовый набор и обучающий набор. возвращает x_test, y_test.
Затем используйте данные обучающего набора для подгонки модели, где алгоритм K ближайших соседей n_neighbors=5, что означает, что 5 ближайших соседей выбираются для определения классификации цифровых изображений или оценки распознавания.
После завершения моделирования одномерный массив приведенного выше преобразованного изображения можно напрямую подставить в функцию knn.predict для получения прогнозируемого результата. Фотографии, которые мы протестировали, выглядят следующим образом:
После запуска получены следующие результаты:
Учебный документ:нажмите, чтобы скачать