{"id":29041898,"url":"https://github.com/wickstrom/pattern-recognition-handbook","last_synced_at":"2026-01-31T08:32:23.300Z","repository":{"id":301164962,"uuid":"1007741356","full_name":"Wickstrom/pattern-recognition-handbook","owner":"Wickstrom","description":"Material for the Pattern Recognition course FYS-3012 at UiT The Arctic University of Norway","archived":false,"fork":false,"pushed_at":"2025-11-14T16:16:26.000Z","size":24765,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-14T18:23:52.283Z","etag":null,"topics":["bayesian-decision-theory","clustering","dimensionality-reduction","fisher-discriminant-analysis","kernel-methods","kmeans-clustering","linear-classifier","nearest-neighbor","neural-network","non-linear-classification","parzen-window","pattern-recognition","principal-component-analysis","spectral-clustering","support-vector-machines"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Wickstrom.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-24T13:08:09.000Z","updated_at":"2025-11-14T16:16:30.000Z","dependencies_parsed_at":"2025-06-25T13:47:23.197Z","dependency_job_id":"51d4961b-fe6b-4dbf-b32a-d0e8ac8caf61","html_url":"https://github.com/Wickstrom/pattern-recognition-handbook","commit_stats":null,"previous_names":["wickstrom/pattern-recognition-handbook"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Wickstrom/pattern-recognition-handbook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wickstrom%2Fpattern-recognition-handbook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wickstrom%2Fpattern-recognition-handbook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wickstrom%2Fpattern-recognition-handbook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wickstrom%2Fpattern-recognition-handbook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Wickstrom","download_url":"https://codeload.github.com/Wickstrom/pattern-recognition-handbook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wickstrom%2Fpattern-recognition-handbook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28935403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T07:49:44.436Z","status":"ssl_error","status_checked_at":"2026-01-31T07:49:34.274Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bayesian-decision-theory","clustering","dimensionality-reduction","fisher-discriminant-analysis","kernel-methods","kmeans-clustering","linear-classifier","nearest-neighbor","neural-network","non-linear-classification","parzen-window","pattern-recognition","principal-component-analysis","spectral-clustering","support-vector-machines"],"created_at":"2025-06-26T15:05:15.613Z","updated_at":"2026-01-31T08:32:23.294Z","avatar_url":"https://github.com/Wickstrom.png","language":"Jupyter Notebook","readme":"# Pattern Recognition\n\nThis is the collection of notebooks for the course *FYS-3012 - Pattern Recognition*, taught at UiT The Arctic University of Norway.\nYou can view and execute the notebooks by clicking on the buttons below.\n\n## 📑 Content\n\n1. **Introduction to pattern recognition** \n   - What is pattern recognition?\n   - Applications of pattern recognition\n   - Practical information\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/00/intro.ipynb)\n\n\u003cbr\u003e\n\n2. **Bayes decision theory** \n   - Motivation\n   - Naïve Bayes assumption\n   - Bayes classifier\n   - Probablity of error\n   - Dealing with risk\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/01/bayes_decision_theory.ipynb)\n\n\u003cbr\u003e\n\n3. **Density estimation I** \n   - Parametric density estimation\n   - Likelihood function\n   - Maximum-likelihood estimation\n   - Non-parametric density estimation\n   - Histogram approach\n   - Parzen windowing\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/02/density_estimation.ipynb)\n\n\u003cbr\u003e\n\n4. **Density estimation II** \n   - K nearest neighbor\n   - Mixture models\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/02/mixture_models.ipynb)\n\n\u003cbr\u003e\n\n5. **Linear classifiers I** \n   - Mean squared error (MSE) classifier\n   - Least sum of squares classifier\n   - Widrow-Hoff algorithm\n   - Perceptron\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/03/linear_classifiers.ipynb)\n\n\u003cbr\u003e\n\n6. **Linear classifiers II** \n   - Support vector machines\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/03/support_vector_machine.ipynb)\n\n\u003cbr\u003e\n\n7. **Non-linear classifiers I** \n   - Multilayer Perceptron\n   - Backpropagation\n   - Gradient descent\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/04/neural_networks_1.ipynb)\n\n\u003cbr\u003e\n\n8. **Non-linear classifiers II** \n   - Activation functions\n   - The vanishing gradient problem\n   - Gradient descent with momentum\n   - Multiclass classification with neural networks\n   - Softmax function\n   - Cross-entropy loss\n   - Weight initialization\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/04/neural_networks_2.ipynb)\n\n\u003cbr\u003e\n\n9. **Non-linear classifiers III** \n   - Neural networks as representation learning\n   - A vector perspective on backpropagation\n   - Connecting neural networks and support vector machines\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/04/neural_networks_3.ipynb)\n\n\u003cbr\u003e\n\n10. **Non-linear classifiers IV** \n   - Function approximation for non-linear classification\n   - Radial basis function (RBF) networks\n   - Prototypical learning\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/05/rbf_networks.ipynb)\n\n\u003cbr\u003e\n\n11. **Non-linear classifiers V**\n   - Kernel methods\n   - Mercer's theorem\n   - Kernels\n   - Non-linear SVMs\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/06/kernel_methods.ipynb)\n\n\u003cbr\u003e\n\n12. **Data transformations and dimensionality reduction I**\n   - Fisher discriminant analysis\n   - Principal component analysis (PCA)\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.jupyter.org/github/Wickstrom/pattern-recognition-handbook/blob/main/notebooks/07/linear_dim_reduction.ipynb)\n\n\u003cbr\u003e\n\n13. **Data transformations and dimensionality reduction II** \n   - Kernel PCA\n   - Laplacian Eigenmaps\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.org/urls/raw.githack.com/Wickstrom/pattern-recognition-handbook/main/notebooks/08/non_linear_dim_reduction.ipynb)\n\n\u003cbr\u003e\n\n14. **Ranking** \n   - Ranking\n   - PageRank algorithm\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.org/urls/raw.githack.com/Wickstrom/pattern-recognition-handbook/main/notebooks/09/ranking.ipynb)\n\n\u003cbr\u003e\n\n15. **Clustering I** \n   - Sequential clustering\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.org/urls/raw.githack.com/Wickstrom/pattern-recognition-handbook/main/notebooks/10/seq_clustering.ipynb)\n\n\u003cbr\u003e\n\n16. **Clustering II** \n   - Hierarchical\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.org/urls/raw.githack.com/Wickstrom/pattern-recognition-handbook/main/notebooks/11/hier_clustering.ipynb)\n\n\u003cbr\u003e\n\n17. **Clustering III** \n   - K-means\n   - Spectral clustering\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.org/urls/raw.githack.com/Wickstrom/pattern-recognition-handbook/main/notebooks/12/clustering.ipynb)\n\n\u003cbr\u003e\n\n17. **Clustering III** \n   - Clustering evaluation\n\n   [![nbviewer](https://img.shields.io/badge/-View-blue?logo=jupyter\u0026style=flat\u0026labelColor=gray)](https://nbviewer.org/urls/raw.githack.com/Wickstrom/pattern-recognition-handbook/main/notebooks/13/clustering_eval.ipynb)\n\n\u003cbr\u003e\n\n\n## 💻 How to code locally\n\nTo run the notebooks locally the recommended steps are the following:\n\n1. Download and install [Miniconda](https://docs.conda.io/projects/miniconda/en/latest/miniconda-install.html).\n\n2. Download the [env.yml](https://github.com/FilippoMB/python-time-series-handbook/blob/main/env.yml) file.\n\n3. Open the shell and navigate to the location with the `yml` file you just downloaded.\n    - If you are on Windows, open the Miniconda shell.\n\n4. Install the environment with \n   ```{bash}\n   \u003e conda env create -f env.yml\n   ```\n\n5. Activate your environment: \n   ```{bash}\n   \u003e conda activate pytsa\n   ```\n\n6. Go to the folder with the notebooks\n\n7. Launch Jupyter Lab with the command \n   ```{bash}\n   \u003e jupyter lab\n   ```\n\n## 🎥 Notebook format and slides\n\nThe notebooks are structured as a sequence of slides to be presented using [RISE](https://rise.readthedocs.io/en/latest/).\nIf you open a notebook you will see the following structure:\n\n\u003cimg src=\"https://raw.githubusercontent.com/FilippoMB/python-time-series-handbook/main/notebooks/00/media/slides_nb.png\" style=\"width: 50%\" align=\"center\"\u003e\n\nThe top-right button indicates the type of slide, which is stored in the metadata of the cell. To enable the visualization of the slide type you must first install RISE and then on the top menu select `View -\u003e Cell Toolbar -\u003e Slieshow`. Also, to split the cells like in the example, you must enable `Split Cells Notebook` from the [nbextensions](https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/index.html).\n\nBy pressing the `Enter\\Exit RISE Slideshow` button at the top you can enter the slideshow presentation.\n\n\u003cimg src=\"https://raw.githubusercontent.com/FilippoMB/python-time-series-handbook/main/notebooks/00/media/slides_rise.png\" style=\"width: 40%\" align=\"center\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/FilippoMB/python-time-series-handbook/main/notebooks/00/media/slides_rise2.png\" style=\"width: 40%\" align=\"center\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/FilippoMB/python-time-series-handbook/main/notebooks/00/media/slides_rise3.png\" style=\"width: 40%\" align=\"center\"\u003e\n\nSee the [RISE documentation](https://rise.readthedocs.io/en/latest/) for more info.\n\n## 📝 Citation\n\nIf you are using this material in your courses or in your research, please consider citing it as follows:\n\n````bibtex\n@misc{wick2024prbook,\n  author       = {Kristoffer Wickstrøm},\n  title        = {Pattern Recognition Course},\n  year         = {2025},\n  howpublished = {Online},\n  url          = {https://github.com/Wickstrom/pattern-recognition-handbook}\n}\n````\n\nThis repository is heavily based on [Time Series Analysis with Python](https://github.com/FilippoMB/python-time-series-handbook) by my collegue at UiT Filippo Maria Bianchi. If you find my repository useful, please head over there and give him a star.\n\n````bibtex\n@misc{bianchi2024tsbook,\n  author       = {Filippo Maria Bianchi},\n  title        = {Time Series Analysis with Python},\n  year         = {2024},\n  howpublished = {Online},\n  url          = {https://github.com/FilippoMB/python-time-series-handbook}\n}\n````\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwickstrom%2Fpattern-recognition-handbook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwickstrom%2Fpattern-recognition-handbook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwickstrom%2Fpattern-recognition-handbook/lists"}