1. KNN recognizes handwritten numbers

1.1. KNN (K-nearest neighbor algorithm) recognizes handwritten numbers

1.1.1. Introduction to KNN

1) KNN (K-Nearest Neighbor) is a supervised learning method. Its working mechanism is very simple and does not require training sets. It is one of the simpler classic machine learning algorithms. It can handle regression and classification problems.

2) Method ideas

In the feature space, if most of the k nearest samples (i.e. the nearest ones in the feature space) near a sample belong to a certain category, then the sample also belongs to this category.

In official terms, the so-called K-nearest neighbor algorithm is to find the K nearest instances (i.e. the K neighbors mentioned above) to a new input instance in the training data set given a training data set. If most of these K instances belong to a certain class, the input instance is classified into this class.

3) Working principle

There is a sample data set, also called a training sample set, and each data in the sample set has a label, that is, we know the relationship between each data in the sample set and its corresponding classification. After inputting unlabeled data, each feature in the new data is compared with the feature corresponding to the data in the sample set, and the classification label of the data with the most similar features (nearest neighbor) in the sample set is extracted. Generally speaking, we only select the first K most similar data in the sample data set, which is the origin of K in the K nearest neighbor algorithm. Usually K is an integer not greater than 20. Finally, the classification with the most occurrences in the K most similar data is selected as the classification of the new data.

4) KNN advantages and disadvantages

Flexible usage, convenient for small sample prediction, high accuracy, insensitive to outliers, no data input assumptions

Lack of training phase, unable to cope with multiple samples, high computational complexity, high spatial complexity

5) KNN implementation steps:

Euclidean distance, that is

image-20220222145000137

1.1.2, Take the recognition of handwritten digits as an example to introduce the implementation of KNN algorithm

1), Dataset

The training set is the classified data, which can be found in the directory /home/yahboom/YBAMR-COBOT-EDU-00001/src/yahboom_navrobo_other/KNN/knn-digits/trainingDigits

Note: The training set has been trained. If the user wants to train by himself, he needs to back up the original training set first, as the number of training sets is relatively large.

The test set is used to test the algorithm. You can refer to the directory /home/yahboom/YBAMR-COBOT-EDU-00001/src/yahboom_navrobo_other/KNN/knn-digits/testDigits

2) Use the drawing function under Windows to make a handwritten digital picture

image-20220222151155632

image-20220222151348607

image-20220305122748713

After drawing, save it as a png image (8.png is used as an example in this example), and copy it to the project directory through the WinSCP tool

3), convert the image (.img) into text (.txt)

Code location: /home/yahboom/YBAMR-COBOT-EDU-00001/src/yahboom_navrobo_other/KNN/img2file.py

img_path: image file name

txt_name: after conversion, save in the directory /home/yahboom/YBAMR-COBOT-EDU-00001/src/yahboom_navrobo_other/KNN/knn-digits/testDigits, named 8_1.txt

After the program is run, a file named 8_1.txt will be generated in the KNN directory. Double-click it and you can see that it is like this.

image-20220222161205064

You can see that the part with the number 8 is roughly enclosed as a number 8.

4) Run the KNN recognition algorithm program

Code location: /home/yahboom/YBAMR-COBOT-EDU-00001/src/yahboom_navrobo_other/KNN/knn.py

image-20220222162113689

As shown in the figure, the recognized number is 8, which is correct. If the recognition result is different from the actual result, please copy the converted txt document to knn-digits/trainingDigits/ and name it as follows: 8_801.txt, then retrain and recognize it normally.

Naming the text file converted from the image, take 8_1 as an example, knn.py will parse this file name in the program, with underscores as the boundary, the front 8 represents the real number, and the back part can be customized, see the code,

Training first, then recognition.