Skip to content

Ruslan3584/Pattern_recognition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

113 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pattern Recognition

Table of contents

Tasks and mathematical solutions

Lab 1 – Decoding of a noised number

Description

The program converts a number to a noised (bernoulli noise) image and then decodes it. Bayesian strategy for a binary loss function is used.

Usage

$ python3 decode_number.py --help                       
usage: decode_number.py [-h] --number {0,1,2,3,4,5,6,7,8,9} [--number_height NUMBER_HEIGHT] [--number_width NUMBER_WIDTH] --noise_level NOISE_LEVEL
                           [--seed SEED]

Decode noisy image of a number

options:
  -h, --help            show this help message and exit
  --number {0,1,2,3,4,5,6,7,8,9}
                        Number to encode and decode
  --number_height NUMBER_HEIGHT
                        Height of the number image.
  --number_width NUMBER_WIDTH
                        Width of the number image.
  --noise_level NOISE_LEVEL
                        Probability of Bernoulli noise. (0.0 to 1.0)
  --seed SEED           Random seed for reproducibility

Examples

$ python3 decode_number.py --number 9 --noise_level 0.56
Time: 0.022138417001769994 sec
Decoded number: 9
Original image Noised image Decoded number
9

Lab 2 – Risk minimization

Description

Bayesian strategy for interval loss function is used.

Usage

$ python3 heatmap_interval.py --help
usage: heatmap_interval.py [-h] --n N [--seed SEED]

Minimize the risk of the Bayesian strategy for interval loss function.

options:
  -h, --help   show this help message and exit
  --n N        Number probability values. [0, 250]
  --seed SEED  Random seed for reproducibility

Example

$ python3 heatmap_interval.py --n 10
Input heatmap:  [102. 179.  92.  14. 106.  71. 188.  20. 102. 121.]
Heatmap normalized:  [0.10251256 0.1798995  0.09246231 0.01407035 0.10653266 0.07135678
 0.18894473 0.0201005  0.10251256 0.12160804]
Result: 4

Lab 3 – Risk minimization

Description

Bayesian strategy for L1 loss function is used.

Usage

$ python3 heatmap_l1.py --help
usage: heatmap_l1.py [-h] --n N [--delta DELTA] [--seed SEED]

Minimize the risk of the Bayesian strategy for L1 loss function.

options:
  -h, --help     show this help message and exit
  --n N          Number probability values. [0, 250]
  --delta DELTA  Delta value for loss function.
  --seed SEED    Random seed for reproducibility

Example

$ python3 heatmap_l1.py --n 10 --delta 2
Input heatmap:  [102. 179.  92.  14. 106.  71. 188.  20. 102. 121.]
Heatmap normalized:  [0.10251256 0.1798995  0.09246231 0.01407035 0.10653266 0.07135678
 0.18894473 0.0201005  0.10251256 0.12160804]
Result: 8

Lab 4 – Analysis of Nonbayesian Strategy

Usage

$ python non_bayesian_strategy.py --help                                      
usage: non_bayesian_strategy.py [-h] --values VALUES [VALUES ...] [--seed SEED] [--samples SAMPLES]

Non-Bayesian strategy analysis.

options:
  -h, --help            show this help message and exit
  --values VALUES [VALUES ...]
  --seed SEED
  --samples SAMPLES

Example

$ python non_bayesian_strategy.py --values 0 1 2 3 4 --seed 123 --samples 5000
q_quadratic: 2.0
q_binary: 2.0
q_third: 2.0
R_binary: 0.7247191011235955
R_quadratic: 1.9803370786516852
Mean quadratic risk: 1.9026322450747408
Mean binary risk: 0.6531887423660443
R-binary R-quadratic

Lab 5 – Efficient computation of a sum of a subarray in 1D, 2D, and 3D.

Usage

$ python subsum.py                                    
Numpy Simple Sum of a Subarray. 1D Fast Sum of a Subarray. 1D

Lab 6 – Divisibility sum of digits

Description

The program generates a number image and then apply noise and checks whether it is divisible by a given number.

Usage

$ python3 division_recognition.py --help                                             
usage: division_recognition.py [-h] --n_digits N_DIGITS [--divisor DIVISOR] --noise_level NOISE_LEVEL [--height_digit HEIGHT_DIGIT] [--width_digit WIDTH_DIGIT]
                               [--n_iter N_ITER] [--seed SEED]

Generate a number image.

options:
  -h, --help            show this help message and exit
  --n_digits N_DIGITS   Number of digits to generate.
  --divisor DIVISOR     Check division by.
  --noise_level NOISE_LEVEL
                        Bernoulli noise level. (0 to 1).
  --height_digit HEIGHT_DIGIT
                        Height of the digit image.
  --width_digit WIDTH_DIGIT
                        Width of the digit image.
  --n_iter N_ITER       Test multiple times.
  --seed SEED           Random seed for reproducibility

Example

$ python3 division_recognition.py --n_digits 5 --noise_level 0.4 --n_iter 5 --seed 50
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<00:00, 4917.12it/s]
Number:  71241  Divided by 3:  True
Number:  86765  Divided by 3:  False
Number:  69853  Divided by 3:  False
Number:  49472  Divided by 3:  False
Number:  20640  Divided by 3:  True
Success divisions:  2/5
time :  0.018097166999723413 sec
Image Noised Image

Lab 7 – Binocular stereo vision

Usage

$ python3 stereo.py --help                                                              
usage: stereo.py [-h] --left LEFT --right RIGHT [--alpha ALPHA] [--maxd MAXD]

Stereo DP Algorithm.

options:
  -h, --help     show this help message and exit
  --left LEFT    Path to left image
  --right RIGHT  Path to right image
  --alpha ALPHA  Smoothness weight
  --maxd MAXD    Max disparity

Example

python3 stereo.py --left examples/im2.ppm --right examples/im5.ppm --alpha 10 --maxd 50
Left Image Right Image Disparity Map

Images - http://vision.middlebury.edu/stereo/data/

Lab 8 – Binary Clustering

Description

EM algorithm implementation.

Usage

$ python3 em.py --help                                                      
usage: em.py [-h] [--first_cluster_digit FIRST_CLUSTER_DIGIT] [--second_cluster_digit SECOND_CLUSTER_DIGIT] [--n_iter N_ITER]

EM for MNIST Clusters.

options:
  -h, --help            show this help message and exit
  --first_cluster_digit FIRST_CLUSTER_DIGIT
  --second_cluster_digit SECOND_CLUSTER_DIGIT
  --n_iter N_ITER

Example

$ python3 em.py --first_cluster_digit 0 --second_cluster_digit 2 --n_iter 50
Fetching MNIST...
Training on 10000 samples...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 50/50 [00:00<00:00, 170.35it/s]
Training completed in 0.3000 seconds
Testing on 3893 samples...
Test set accuracy: 0.9604

Kab 9 - Finding the separating circle

Description

Modification of Perceptron Algorithm where hyperplane is a circle (modified scalar product).

Usage

$ python3 perceptron_circle.py --help
usage: perceptron_circle.py [-h] [--n N] [--seed SEED]

Perceptron Circle Fit.

options:
  -h, --help   show this help message and exit
  --n N        Number of points to generate.
  --seed SEED  Random seed for reproducibility.

Example

$ python3 perceptron_circle.py --n 300 --seed 31
Original:  a=0, b=8, r=9
Predicted: a=0.261, b=8.462, r=8.711

About

Labs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages