├── .gitignore
├── LICENSE
├── README.md
├── math-symbols.md
├── playground
├── multi-agent
│ └── README.md
└── single-agent
│ └── README.md
├── quantum-symbols.md
└── resources
└── Machine Learning for OpenCV
├── Chapter01
├── Old
│ └── code-reviewer-instructions.md
└── code-reviewer-instructions.md
├── Chapter02
├── Old
│ └── code-reviewer-instructions.md
└── code-reviewer-instructions.md
├── Chapter03
├── New
│ └── code-reviewer-instructions.md
└── code-reviewer-instructions.md
├── Chapter04
└── code-reviewer-instructions.md
├── Chapter05
├── 05.00-Using-Decision-Trees-to-Make-a-Medical-Diagnosis.ipynb
├── 05.01-Building-Our-First-Decision-Tree.ipynb
├── 05.02-Using-Decision-Trees-to-Diagnose-Breast-Cancer.ipynb
└── 05.03-Using-Decision-Trees-for-Regression.ipynb
├── Chapter06
└── code-reviewer-instructions.md
├── Chapter07
└── code-reviewer-instructions.md
├── Chapter08
└── code-reviewer-instructions.md
├── Chapter09
└── code-reviewer-instructions.md
├── Chapter10
└── code-reviewer-instructions.md
├── Chapter11
└── code-reviewer-instructions.md
├── Chapter12
└── code-reviewer-instructions.md
└── Software Hardware list.pdf
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2018 luckyzhou
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Awesome AI books
2 |
3 | Some awesome AI related books and pdfs for downloading and learning.
4 |
5 | ## Preface
6 |
7 | **This repo only used for learning, do not use in business.**
8 |
9 | Welcome for providing great books in this repo or tell me which great book you need and I will try to append it in this repo, any idea you can create issue or PR here.
10 |
11 | Due to github Large file storage limition, all books pdf stored in **Yandex.Disk**.
12 |
13 | Some often used **Mathematic Symbols** can refer this [page](https://github.com/zslucky/awesome-AI-books/blob/master/math-symbols.md)
14 |
15 | ## Content
16 | - [Organization with papers/researchs](https://github.com/zslucky/awesome-AI-books#organization-with-papersresearchs)
17 | - [Training ground](https://github.com/zslucky/awesome-AI-books#training-ground)
18 | - [Books](https://github.com/zslucky/awesome-AI-books#books)
19 | - [Introductory theory and get start](https://github.com/zslucky/awesome-AI-books#introductory-theory-and-get-start)
20 | - [Mathematics](https://github.com/zslucky/awesome-AI-books#mathematics)
21 | - [Data mining](https://github.com/zslucky/awesome-AI-books#data-mining)
22 | - [Deep Learning](https://github.com/zslucky/awesome-AI-books#deep-learning)
23 | - [Philosophy](https://github.com/zslucky/awesome-AI-books#philosophy)
24 | - [Quantum with AI](https://github.com/zslucky/awesome-AI-books#quantum-with-ai)
25 | - [Quantum Basic](https://github.com/zslucky/awesome-AI-books#quantum-basic)
26 | - [Quantum AI](https://github.com/zslucky/awesome-AI-books#quantum-ai)
27 | - [Quantum Related Framework](https://github.com/zslucky/awesome-AI-books#quantum-related-framework)
28 | - [Libs With Online Books](https://github.com/zslucky/awesome-AI-books#libs-with-online-books)
29 | - [Reinforcement Learning](https://github.com/zslucky/awesome-AI-books#reinforcement-learning)
30 | - [Feature Selection](https://github.com/zslucky/awesome-AI-books#feature-selection)
31 | - [Machine Learning](https://github.com/zslucky/awesome-AI-books#machine-learning-1)
32 | - [Deep Learning](https://github.com/zslucky/awesome-AI-books#deep-learning-1)
33 | - [NLP](https://github.com/zslucky/awesome-AI-books#nlp)
34 | - [CV](https://github.com/zslucky/awesome-AI-books#cv)
35 | - [Meta Learning](https://github.com/zslucky/awesome-AI-books#meta-learning)
36 | - [Transfer Learning](https://github.com/zslucky/awesome-AI-books#transfer-learning)
37 | - [Auto ML](https://github.com/zslucky/awesome-AI-books#auto-ml)
38 | - [Dimensionality Reduction](https://github.com/zslucky/awesome-AI-books#dimensionality-reduction)
39 | - [Distributed training](https://github.com/zslucky/awesome-AI-books#distributed-training)
40 |
41 | ## Organization with papers/researchs
42 |
43 | - [arxiv.org](https://arxiv.org/)
44 | - [Science](http://www.sciencemag.org/)
45 | - [Nature](https://www.nature.com/nature/)
46 | - [DeepMind Publications](https://deepmind.com/research/publications/)
47 | - [OpenAI Research](https://openai.com/research/)
48 |
49 | ## Training ground
50 |
51 | - [OpenAI Gym](https://gym.openai.com/): A toolkit for developing and comparing reinforcement learning algorithms. (Can play with [Atari](https://en.wikipedia.org/wiki/Atari), Box2d, MuJoCo etc...)
52 | - [malmo](https://github.com/Microsoft/malmo): Project Malmö is a platform for Artificial Intelligence experimentation and research built on top of Minecraft.
53 | - [DeepMind Pysc2](https://github.com/deepmind/pysc2): StarCraft II Learning Environment.
54 | - [Procgen](https://github.com/openai/procgen): Procgen Benchmark: Procedurally-Generated Game-Like Gym-Environments.
55 | - [TorchCraftAI](https://torchcraft.github.io/TorchCraftAI/): A bot platform for machine learning research on StarCraft®: Brood War®
56 | - [Valve Dota2](https://developer.valvesoftware.com/wiki/Dota_Bot_Scripting): Dota2 game acessing api. ([CN doc](https://developer.valvesoftware.com/wiki/Dota_Bot_Scripting:zh-cn))
57 | - [Mario AI Framework](https://github.com/amidos2006/Mario-AI-Framework): A Mario AI framework for using AI methods.
58 | - [Google Dopamine](https://github.com/google/dopamine): Dopamine is a research framework for fast prototyping of reinforcement learning algorithms
59 | - [TextWorld](https://github.com/Microsoft/TextWorld): Microsoft - A learning environment sandbox for training and testing reinforcement learning (RL) agents on text-based games.
60 | - [Mini Grid](https://github.com/maximecb/gym-minigrid): Minimalistic gridworld environment for OpenAI Gym
61 | - [MAgent](https://github.com/geek-ai/MAgent): A Platform for Many-agent Reinforcement Learning
62 | - [XWorld](https://github.com/PaddlePaddle/XWorld): A C++/Python simulator package for reinforcement learning
63 | - [Neural MMO](https://github.com/openai/neural-mmo): A Massively Multiagent Game Environment
64 | - [MinAtar](https://github.com/kenjyoung/MinAtar): MinAtar is a testbed for AI agents which implements miniaturized version of several Atari 2600 games.
65 | - [craft-env](https://github.com/Feryal/craft-env): CraftEnv is a 2D crafting environment
66 | - [gym-sokoban](https://github.com/mpSchrader/gym-sokoban): Sokoban is Japanese for warehouse keeper and a traditional video game
67 | - [Pommerman](https://github.com/MultiAgentLearning/playground) Playground hosts Pommerman, a clone of Bomberman built for AI research.
68 | - [gym-miniworld](https://github.com/maximecb/gym-miniworld#introduction) MiniWorld is a minimalistic 3D interior environment simulator for reinforcement learning & robotics research
69 | - [vizdoomgym](https://github.com/shakenes/vizdoomgym) OpenAI Gym wrapper for [ViZDoom](https://github.com/mwydmuch/ViZDoom) (A Doom-based AI Research Platform for Reinforcement Learning from Raw Visual Information) enviroments.
70 | - [ddz-ai](https://github.com/freefuiiismyname/ddz-ai) 以孤立语假设和宽度优先搜索为基础,构建了一种多通道堆叠注意力Transformer结构的斗地主ai
71 |
72 |
73 | ## Books
74 |
75 | ### Introductory theory and get start
76 |
77 | - [Artificial Intelligence-A Modern Approach (3rd Edition)](https://yadi.sk/i/G6NlUUV8SAVimg) - Stuart Russell & peter Norvig
78 | - **COMMERCIAL** [Grokking Artificial Intelligence Algorithms](https://www.manning.com/books/grokking-artificial-intelligence-algorithms) - Rishal Hurbans
79 |
80 | ### Mathematics
81 |
82 | - [A First Course in ProbabilityA First Course in Probability (8th)](https://yadi.sk/i/aDvGdqWlcXxbhQ) - Sheldon M Ross
83 | - [Convex Optimization](https://yadi.sk/i/9KGVXuFJs3kakg) - Stephen Boyd
84 | - [Elements of Information Theory Elements](https://yadi.sk/i/2YWnNsAeBc9qcA) - Thomas Cover & Jay A Thomas
85 | - [Discrete Mathematics and Its Applications 7th](https://yadi.sk/i/-r3jD4gB-8jn1A) - Kenneth H. Rosen
86 | - [Introduction to Linear Algebra (5th)](http://www.mediafire.com/file/f31dl0ghup7e6gk/Introduction_to_Linear_Algebra_5th_-_Gilbert_Strang.pdf/file) - Gilbert Strang
87 | - [Linear Algebra and Its Applications (5th)](https://yadi.sk/i/uWEQVrCquqw1Ug) - David C Lay
88 | - [Probability Theory The Logic of Science](https://yadi.sk/i/TKQYNPSKGNbdUw) - Edwin Thompson Jaynes
89 | - [Probability and Statistics 4th](https://yadi.sk/i/38jrMmEXnJQZqg) - Morris H. DeGroot
90 | - [Statistical Inference (2nd)](https://yadi.sk/i/HWrbKYrYdpNMYw) - Roger Casella
91 | - [信息论基础 (原书Elements of Information Theory Elements第2版)](https://yadi.sk/i/HqGOyAkRCxCwIQ) - Thomas Cover & Jay A Thomas
92 | - [凸优化 (原书Convex Optimization)](https://yadi.sk/i/zUPPAi58v1gfkw) - Stephen Boyd
93 | - [数理统计学教程](https://yadi.sk/i/ikuXCrNgRCEVnw) - 陈希儒
94 | - [数学之美 2th](https://yadi.sk/i/QJPxzK4ZBuF8iQ) - 吴军
95 | - [概率论基础教程 (原书A First Course in ProbabilityA First Course in Probability第9版)](https://yadi.sk/i/wQZQ80UFLFZ48w) - Sheldon M Ross
96 | - [线性代数及其应用 (原书Linear Algebra and Its Applications第3版)](https://yadi.sk/i/cNNBS4eaLleR3g) - David C Lay
97 | - [统计推断 (原书Statistical Inference第二版)](https://yadi.sk/i/ksHAFRUSaoyk9g) - Roger Casella
98 | - [离散数学及其应用 (原书Discrete Mathematics and Its Applications第7版)](https://yadi.sk/i/kJHMmMA4ot66bw) - Kenneth H.Rosen
99 |
100 | ### Data mining
101 |
102 | - [Introduction to Data Mining](https://yadi.sk/i/H7wc_FaMDl9QXQ) - Pang-Ning Tan
103 | - [Programming Collective Intelligence](https://yadi.sk/i/YTjrJWu7kXVrGQ) - Toby Segaran
104 | - [Feature Engineering for Machine Learning](https://yadi.sk/i/WiO7lageMIuIfg) - Amanda Casari, Alice Zheng
105 | - [集体智慧编程](https://yadi.sk/i/0DW5reTrXQ6peQ) - Toby Segaran
106 |
107 | ### Machine Learning
108 |
109 | - [Information Theory, Inference and Learning Algorithms](https://yadi.sk/i/JXYto8yE6PJO8Q) - David J C MacKay
110 | - [Machine Learning](https://yadi.sk/i/03Jg9WMzgD2YlA) - Tom M. Mitchell
111 | - [Pattern Recognition and Machine Learning](https://yadi.sk/i/8ffTCaMH0bM8uQ) - Christopher Bishop
112 | - [The Elements of Statistical Learning](https://yadi.sk/i/hfatiRyBCwfcWw) - Trevor Hastie
113 | - [Machine Learning for OpenCV](https://yadi.sk/i/_UdlHqwuR-Wdxg) - Michael Beyeler ([Source code here](https://github.com/zslucky/awesome-AI-books/tree/master/resources/Machine%20Learning%20for%20OpenCV))
114 | - [机器学习](https://yadi.sk/i/vfoPTRRfgtEQKA) - 周志华
115 | - [机器学习 (原书Machine Learning)](https://yadi.sk/i/jTNv4kzG-lmlYQ) - Tom M. Mitchell
116 | - [统计学习方法](https://yadi.sk/i/R08dbDMOJb3KKw) - 李航
117 |
118 | ### Deep Learning
119 | - Online Quick learning
120 | - [Dive into Deep Learning](https://d2l.ai/) - (Using MXNet)An interactive deep learning book with code, math, and discussions.
121 | - [d2l-pytorch](https://github.com/dsgiitr/d2l-pytorch) - (Dive into Deep Learning) pytorch version.
122 | - [动手学深度学习](https://zh.d2l.ai/) - (Dive into Deep Learning) for chinese.
123 | - [Deep Learning](https://yadi.sk/i/2fOK_Xib-JlocQ) - Ian Goodfellow & Yoshua Bengio & Aaron Courville
124 | - [Deep Learning Methods and Applications](https://yadi.sk/i/uQAWfeKVmenmkg) - Li Deng & Dong Yu
125 | - [Learning Deep Architectures for AI](https://yadi.sk/i/AWpRq2hSB9RmoQ) - Yoshua Bengio
126 | - [Machine Learning An Algorithmic Perspective (2nd)](https://yadi.sk/i/1gOQ-Y5r4uP6Kw) - Stephen Marsland
127 | - [Neural Network Design (2nd)](https://yadi.sk/i/5LLMPfNcuaPTvQ) - Martin Hagan
128 | - [Neural Networks and Learning Machines (3rd)](https://yadi.sk/i/6s9AauRP1OGT2Q) - Simon Haykin
129 | - [Neural Networks for Applied Sciences and Engineering](https://yadi.sk/i/JK7aj5TsmoC1dA) - Sandhya Samarasinghe
130 | - [深度学习 (原书Deep Learning)](https://yadi.sk/i/DzzZU_QPosSTBQ) - Ian Goodfellow & Yoshua Bengio & Aaron Courville
131 | - [神经网络与机器学习 (原书Neural Networks and Learning Machines)](https://yadi.sk/i/ogQff9JpLEdHMg) - Simon Haykin
132 | - [神经网络设计 (原书Neural Network Design)](https://yadi.sk/i/uR2OAHHgnZHUuw) - Martin Hagan
133 | - **COMMERCIAL** [Interpretable AI](https://www.manning.com/books/interpretable-ai) - Ajay Thampi
134 | - **COMMERCIAL** [Conversational AI](https://www.manning.com/books/conversational-ai) - Andrew R. Freed
135 |
136 | ### Philosophy
137 | - **COMMERCIAL** [Human Compatible: Artificial Intelligence and the Problem of Control](https://www.amazon.com/Human-Compatible-Artificial-Intelligence-Problem-ebook/dp/B07N5J5FTS) - Stuart Russell
138 | - **COMMERCIAL** [Life 3.0: Being Human in the Age of Artificial Intelligence](https://www.amazon.com/Life-3-0-Being-Artificial-Intelligence/dp/1101946598) - Max Tegmark
139 | - **COMMERCIAL** [Superintelligence: Paths, Dangers, Strategies](https://www.amazon.com/Superintelligence-Dangers-Strategies-Nick-Bostrom/dp/0198739834/ref=pd_sbs_14_t_0/146-0357100-6717505?_encoding=UTF8&pd_rd_i=0198739834&pd_rd_r=676ace91-552c-4865-a8d3-6273db5418bf&pd_rd_w=zYEu2&pd_rd_wg=hQdGQ&pf_rd_p=5cfcfe89-300f-47d2-b1ad-a4e27203a02a&pf_rd_r=DTH77KT4FSVRMJ47GBVQ&psc=1&refRID=DTH77KT4FSVRMJ47GBVQ) - Nick Bostrom
140 |
141 | ## Quantum with AI
142 |
143 | - #### Quantum Basic
144 | - [Quantum Computing Primer](https://www.dwavesys.com/tutorials/background-reading-series/quantum-computing-primer#h1-0) - D-Wave quantum computing primer
145 | - [Quantum computing 101](https://uwaterloo.ca/institute-for-quantum-computing/quantum-computing-101) - Quantum computing 101, from University of Waterloo
146 | - [pdf](https://yadi.sk/i/0VCfWmb3HrrPuw) Quantum Computation and Quantum Information - Nielsen
147 | - [pdf](https://yadi.sk/i/mHoyVef8RaG0aA) 量子计算和量子信息(量子计算部分)- Nielsen
148 | - #### Quantum AI
149 | - [Quantum neural networks](http://axon.cs.byu.edu/papers/ezhov.fdisis00.pdf)
150 | - [An Artificial Neuron Implemented on an Actual Quantum Processor](https://arxiv.org/pdf/1811.02266.pdf)
151 | - [Classification with Quantum Neural Networks on Near Term Processors](https://arxiv.org/pdf/1802.06002.pdf)
152 | - [Black Holes as Brains: Neural Networks with Area Law Entropy](https://arxiv.org/pdf/1801.03918.pdf)
153 | - #### Quantum Related Framework
154 | - [ProjectQ](https://github.com/ProjectQ-Framework/ProjectQ) - ProjectQ is an open source effort for quantum computing.
155 |
156 | ## Libs With Online Books
157 | - #### GC (Generative Content)
158 | - [Stable Diffusion](https://github.com/CompVis/stable-diffusion) - [[Paper](https://arxiv.org/abs/2112.10752)] A latent text-to-image diffusion model
159 | - [Stable Diffusion V2](https://github.com/Stability-AI/stablediffusion) - High-Resolution Image Synthesis with Latent Diffusion Models
160 | - [GFPGAN](https://github.com/TencentARC/GFPGAN) - [[Paper](https://arxiv.org/abs/2101.04061)] GFPGAN aims at developing Practical Algorithms for Real-world Face Restoration.
161 | - [ESRGAN](https://github.com/xinntao/ESRGAN) - [[Paper](https://arxiv.org/abs/2107.10833)] ECCV18 Workshops - Enhanced SRGAN. Champion PIRM Challenge on Perceptual Super-Resolution. The training codes are in BasicSR.
162 | - [CodeFormer](https://github.com/sczhou/CodeFormer) - [[Paper](https://arxiv.org/abs/2206.11253)] - [NeurIPS 2022] Towards Robust Blind Face Restoration with Codebook Lookup Transformer
163 | - [UniPC](https://github.com/wl-zhao/UniPC) - [[Paper](https://arxiv.org/abs/2302.04867)] UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models
164 | - #### Reinforcement Learning
165 | - [A3C](https://arxiv.org/pdf/1602.01783.pdf) - Google DeepMind Asynchronous Advantage Actor-Critic algorithm
166 | - [Q-Learning](http://www.gatsby.ucl.ac.uk/~dayan/papers/cjch.pdf) SARSA [DQN](https://storage.googleapis.com/deepmind-media/dqn/DQNNaturePaper.pdf) [DDQN](https://arxiv.org/pdf/1509.06461.pdf) - Q-Learning is a value-based Reinforcement Learning algorithm
167 | - [DDPG](https://arxiv.org/pdf/1509.02971.pdf) - Deep Deterministic Policy Gradient,
168 | - [Large-Scale Curiosity](https://arxiv.org/pdf/1808.04355.pdf) - Large-Scale Study of Curiosity-Driven Learning
169 | - [PPO](https://arxiv.org/pdf/1707.06347.pdf) - OpenAI Proximal Policy Optimization Algorithms
170 | - [RND](https://arxiv.org/pdf/1810.12894.pdf) - OpenAI Random Network Distillation, an exploration bonus for deep reinforcement learning method.
171 | - [VIME](https://arxiv.org/pdf/1605.09674.pdf) - OpenAI Variational Information Maximizing Exploration
172 | - [DQV](https://arxiv.org/pdf/1810.00368.pdf) - Deep Quality-Value (DQV) Learning
173 | - [ERL](https://arxiv.org/pdf/1805.07917.pdf) - Evolution-Guided Policy Gradient in Reinforcement Learning
174 | - [MF Multi-Agent RL](https://arxiv.org/pdf/1802.05438.pdf) - Mean Field Multi-Agent Reinforcement Learning. (this paper include MF-Q and MF-AC)
175 | - [MAAC](https://arxiv.org/pdf/1810.02912.pdf) - Actor-Attention-Critic for Multi-Agent Reinforcement Learning
176 | - #### Feature Selection
177 | - [scikit-feature](http://featureselection.asu.edu/algorithms.php) - A collection of feature selection algorithms, available on [Github](https://github.com/jundongl/scikit-feature)
178 | - #### Machine Learning
179 | - [Scikit learn](https://scikit-learn.org/stable/) (**Python**) - Machine Learning in Python.
180 | - [Linfa](https://github.com/rust-ml/linfa) (**Rust**) - spirit of `scikit learn`, a rust ML lib.
181 | - [Xgboost](https://xgboost.readthedocs.io/en/latest/tutorials/model.html) (**Python, R, JVM, Julia, CLI**) - Xgboost lib's document.
182 | - [LightGBM](https://lightgbm.readthedocs.io/en/latest/Features.html#) (**Python, R, CLI**) - Microsoft lightGBM lib's features document.
183 | - [CatBoost](https://arxiv.org/pdf/1706.09516.pdf) (**Python, R, CLI**) - Yandex Catboost lib's key algorithm pdf papper.
184 | - [StackNet](https://github.com/kaz-Anova/StackNet) (**Java, CLI**) - Some model stacking algorithms implemented in this lib.
185 | - [RGF](https://arxiv.org/pdf/1109.0887.pdf) - Learning Nonlinear Functions Using `Regularized Greedy Forest` (multi-core implementation [FastRGF](https://github.com/RGF-team/rgf/tree/master/FastRGF))
186 | - [FM](https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf), [FastFM](https://arxiv.org/pdf/1505.00641.pdf), [FFM](https://arxiv.org/pdf/1701.04099.pdf), [XDeepFM](https://arxiv.org/pdf/1803.05170.pdf) - Factorization Machines and some extended Algorithms
187 | - #### Deep Learning
188 | - [GNN Papers](https://github.com/thunlp/GNNPapers) - Must-read papers on graph neural networks (GNN)
189 | - [EfficientNet](https://arxiv.org/pdf/1905.11946.pdf) - Rethinking Model Scaling for Convolutional Neural Networks
190 | - [DenseNet](https://arxiv.org/pdf/1608.06993.pdf) - Densely Connected Convolutional Networks
191 | - #### NLP
192 | - [XLNet](https://arxiv.org/pdf/1906.08237.pdf) - [repo](https://github.com/zihangdai/xlnet) XLNet: Generalized Autoregressive Pretraining for Language Understanding
193 | - [BERT](https://arxiv.org/pdf/1810.04805.pdf) - Pre-training of Deep Bidirectional Transformers for Language Understanding
194 | - [GPT-3](https://arxiv.org/pdf/2005.14165.pdf) - Language Models are Few-Shot Learners
195 | - #### CV
196 | - [Fast R-CNN](https://arxiv.org/pdf/1504.08083.pdf) - Fast Region-based Convolutional Network method (Fast R-CNN) for object detection
197 | - [Mask R-CNN](https://arxiv.org/pdf/1703.06870.pdf) - Mask R-CNN, extends Faster R-CNN by adding a branch for predicting an object mask in parallel with the existing branch for bounding box recognition.
198 | - [GQN](http://science.sciencemag.org/content/360/6394/1204/tab-pdf) - DeepMind Generative Query Network, Neural scene representation and rendering
199 | - #### Meta Learning
200 | - [MAML](https://arxiv.org/pdf/1703.03400.pdf) - Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks
201 | - #### Transfer Learning
202 | - [GCN](https://arxiv.org/pdf/1803.08035.pdf) - Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs
203 | - #### Auto ML
204 | - [Model Search](https://github.com/google/model_search) (**Python**) - Google Model search (MS) is a framework that implements AutoML algorithms for model architecture search at scale.
205 | - [TPOT](https://github.com/EpistasisLab/tpot) (**Python**) - TPOT is a lib for AutoML.
206 | - [Auto-sklearn](https://automl.github.io/auto-sklearn/master/) (**Python**) - auto-sklearn is an automated machine learning toolkit and a drop-in replacement for a scikit-learn estimator
207 | - [Auto-Keras](https://autokeras.com/) (**Python**) - Auto-Keras is an open source software library for automated machine learning (AutoML). It is developed by DATA Lab
208 | - [TransmogrifAI](https://docs.transmogrif.ai/en/stable/index.html) (**JVM**) - TransmogrifAI (pronounced trăns-mŏgˈrə-fī) is an AutoML library written in Scala that runs on top of Spark
209 | - [Auto-WEKAA](http://www.cs.ubc.ca/labs/beta/Projects/autoweka/) - Provides automatic selection of models and hyperparameters for [WEKA](https://www.cs.waikato.ac.nz/ml/weka/).
210 | - [MLBox](https://github.com/AxeldeRomblay/MLBox) (**Python**) - MLBox is a powerful Automated Machine Learning python library
211 | - #### Pipeline Training
212 | - [ZenML](https://github.com/maiot-io/zenml) (**Python**) - ZenML is built for ML practitioners who are ramping up their ML workflows towards production
213 | - #### Dimensionality Reduction
214 | - [t-SNE](http://www.cs.toronto.edu/~hinton/absps/tsne.pdf) (**Non-linear/Non-params**) - T-distributed Stochastic Neighbor Embedding (t-SNE) is a machine learning algorithm for visualization
215 | - [PCA](https://www.cs.cmu.edu/~elaw/papers/pca.pdf) (**Linear**) - Principal component analysis
216 | - [LDA](https://www.isip.piconepress.com/publications/reports/1998/isip/lda/lda_theory.pdf) (**Linear**) - Linear Discriminant Analysis
217 | - [LLE](https://cs.nyu.edu/~roweis/lle/papers/lleintro.pdf) (**Non-linear**) - Locally linear embedding
218 | - [Laplacian Eigenmaps](http://web.cse.ohio-state.edu/~belkin.8/papers/LEM_NC_03.pdf) - Laplacian Eigenmaps for Dimensionality Reduction and Data Representation
219 | - [Sammon Mapping](http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/AV0910/henderson.pdf) (**Non-linear**) - Sammon mapping is designed to minimise the differences between corresponding inter-point distances in the
220 | two spaces
221 | - #### Data Processing
222 | - [Pandas](https://github.com/pandas-dev/pandas) (**Python**) - Flexible and powerful data analysis / manipulation library for Python.
223 | - [Polars](https://github.com/pola-rs/polars) (**Rust, Python**) - Lightning-fast DataFrame library for Rust and Python.
224 |
225 | ## Distributed training
226 | - [Horovod](https://github.com/horovod/horovod#usage) - Horovod is a distributed training framework for TensorFlow, Keras, PyTorch, and MXNet. The goal of Horovod is to make distributed Deep Learning fast and easy to use.
227 | - [Acme](https://github.com/deepmind/acme) - A Research Framework for (Distributed) Reinforcement Learning.
228 | - [bagua](https://github.com/BaguaSys/bagua) - Bagua is a flexible and performant distributed training algorithm development framework.
229 |
230 | ## Support this project
231 | 
232 | 
233 |
234 |
235 | ## Contributors
236 |
237 | ### Code Contributors
238 |
239 | This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
240 |
241 |
242 | ### Financial Contributors
243 |
244 | Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/awesome-AI-books/contribute)]
245 |
246 | #### Individuals
247 |
248 |
249 |
250 | #### Organizations
251 |
252 | Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/awesome-AI-books/contribute)]
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
--------------------------------------------------------------------------------
/math-symbols.md:
--------------------------------------------------------------------------------
1 | # Mathematic Symbols
2 |
3 | Some often used Mathematic symbols' check list :mortar_board:
4 |
5 | ## Numbers
6 |
7 | Symbol | Meaning | Symbol | Meaning
8 | ------ | ------- | ------ | -------
9 | ℝ | Real numbers (实数) | ℚ | Rational numbers (有理数)
10 | ℤ | Integers (整数) | ℕ | Natural numbers (自然数)
11 | ℂ | Complex number (复数) |
12 |
13 |
--------------------------------------------------------------------------------
/playground/multi-agent/README.md:
--------------------------------------------------------------------------------
1 | # Multi-Agent Playground
2 |
3 | All tasks in this folder will show you the collaboration between multi agents.
--------------------------------------------------------------------------------
/playground/single-agent/README.md:
--------------------------------------------------------------------------------
1 | # Single-Agent Playground
2 |
3 | All tasks in this folder will show you how single agent works.
--------------------------------------------------------------------------------
/quantum-symbols.md:
--------------------------------------------------------------------------------
1 | # Quantum Symbols
2 |
3 | Some often used Quantum symbols' check list :mortar_board:
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter01/Old/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 | All you have to do is go to:
36 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
37 |
38 | However, at time of writing this (3/2/2017), MyBinder seems to be down, which
39 | probably has to do with the recent outtage of Amazon AWS:
40 | http://mybinder.org/status
41 |
42 | I hope it will be up again soon.
43 |
44 |
45 |
46 | ### Using Jupyter notebook
47 |
48 | You basically want to follow the installation instructions in Chapter 1.
49 |
50 | Installing stuff:
51 | - Download and install Python Anaconda
52 | - $ conda install opencv=3.1
53 |
54 | Cloning the GitHub repo:
55 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
56 |
57 | Running Jupyter notebook:
58 | - $ jupyter notebook
59 | - This will open up a browser window in your current directory.
60 | - Navigate to `opencv-machine-learning/notebooks`.
61 | - Click on the notebook of your choice.
62 | - Select `Kernel > Restart & Run All`.
63 |
64 | Have fun!
65 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter01/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 | All you have to do is go to:
36 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
37 |
38 | However, at time of writing this (3/2/2017), MyBinder seems to be down, which
39 | probably has to do with the recent outtage of Amazon AWS:
40 | http://mybinder.org/status
41 |
42 | I hope it will be up again soon.
43 |
44 |
45 |
46 | ### Using Jupyter notebook
47 |
48 | You basically want to follow the installation instructions in Chapter 1.
49 |
50 | Installing stuff:
51 | - Download and install Python Anaconda
52 | - $ conda install opencv=3.1
53 |
54 | Cloning the GitHub repo:
55 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
56 |
57 | Running Jupyter notebook:
58 | - $ jupyter notebook
59 | - This will open up a browser window in your current directory.
60 | - Navigate to `opencv-machine-learning/notebooks`.
61 | - Click on the notebook of your choice.
62 | - Select `Kernel > Restart & Run All`.
63 |
64 | Have fun!
65 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter02/Old/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 | All you have to do is go to:
36 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
37 |
38 | However, at time of writing this (3/2/2017), MyBinder seems to be down, which
39 | probably has to do with the recent outtage of Amazon AWS:
40 | http://mybinder.org/status
41 |
42 | I hope it will be up again soon.
43 |
44 |
45 |
46 | ### Using Jupyter notebook
47 |
48 | You basically want to follow the installation instructions in Chapter 1.
49 |
50 | Installing stuff:
51 | - Download and install Python Anaconda
52 | - $ conda install opencv=3.1
53 |
54 | Cloning the GitHub repo:
55 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
56 |
57 | Running Jupyter notebook:
58 | - $ jupyter notebook
59 | - This will open up a browser window in your current directory.
60 | - Navigate to `opencv-machine-learning/notebooks`.
61 | - Click on the notebook of your choice.
62 | - Select `Kernel > Restart & Run All`.
63 |
64 | Have fun!
65 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter02/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 | All you have to do is go to:
36 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
37 |
38 | However, at time of writing this (3/2/2017), MyBinder seems to be down, which
39 | probably has to do with the recent outtage of Amazon AWS:
40 | http://mybinder.org/status
41 |
42 | I hope it will be up again soon.
43 |
44 |
45 |
46 | ### Using Jupyter notebook
47 |
48 | You basically want to follow the installation instructions in Chapter 1.
49 |
50 | Installing stuff:
51 | - Download and install Python Anaconda
52 | - $ conda install opencv=3.1
53 |
54 | Cloning the GitHub repo:
55 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
56 |
57 | Running Jupyter notebook:
58 | - $ jupyter notebook
59 | - This will open up a browser window in your current directory.
60 | - Navigate to `opencv-machine-learning/notebooks`.
61 | - Click on the notebook of your choice.
62 | - Select `Kernel > Restart & Run All`.
63 |
64 | Have fun!
65 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter03/New/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 | All you have to do is go to:
36 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
37 |
38 | If this website does not show all corresponding notebooks of the chapter,
39 | the build is possibly outdated. In this case, please go to:
40 | http://mybinder.org/status/mbeyeler/opencv-machine-learning
41 | Then rebuild the code, and click launch. Now everything should be up-to-date.
42 |
43 |
44 |
45 | ### Using Jupyter notebook
46 |
47 | You basically want to follow the installation instructions in Chapter 1.
48 |
49 | Installing stuff:
50 | - Download and install Python Anaconda
51 | - $ conda config --add channels conda-forge
52 | - $ conda install opencv=3.1
53 |
54 | Cloning the GitHub repo:
55 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
56 |
57 | Running Jupyter notebook:
58 | - $ jupyter notebook
59 | - This will open up a browser window in your current directory.
60 | - Navigate to `opencv-machine-learning/notebooks`.
61 | - Click on the notebook of your choice.
62 | - Select `Kernel > Restart & Run All`.
63 |
64 | Have fun!
65 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter03/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 | All you have to do is go to:
36 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
37 |
38 | If this website does not show all corresponding notebooks of the chapter,
39 | the build is possibly outdated. In this case, please go to:
40 | http://mybinder.org/status/mbeyeler/opencv-machine-learning
41 | Then rebuild the code, and click launch. Now everything should be up-to-date.
42 |
43 |
44 |
45 | ### Using Jupyter notebook
46 |
47 | You basically want to follow the installation instructions in Chapter 1.
48 |
49 | Installing stuff:
50 | - Download and install Python Anaconda
51 | - $ conda config --add channels conda-forge
52 | - $ conda install opencv=3.1
53 |
54 | Cloning the GitHub repo:
55 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
56 |
57 | Running Jupyter notebook:
58 | - $ jupyter notebook
59 | - This will open up a browser window in your current directory.
60 | - Navigate to `opencv-machine-learning/notebooks`.
61 | - Click on the notebook of your choice.
62 | - Select `Kernel > Restart & Run All`.
63 |
64 | Have fun!
65 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter04/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 |
36 | First, make sure the website is currently online:
37 | http://mybinder.org/status
38 |
39 | Then go to:
40 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
41 |
42 | This will create a Docker environment that has all necessary packages installed.
43 | Simply execute the code from within the Jupyter notebook.
44 |
45 | If the website does not show all corresponding notebooks of the chapter,
46 | the build is possibly outdated. In this case, please go to:
47 | http://mybinder.org/status/mbeyeler/opencv-machine-learning
48 | Then click on rebuild the code, then click launch.
49 | Now everything should be up-to-date.
50 |
51 |
52 |
53 | ### Using Jupyter notebook
54 |
55 | You basically want to follow the installation instructions in Chapter 1.
56 |
57 | Installing stuff:
58 | - Download and install Python Anaconda
59 | - $ conda config --add channels conda-forge
60 | - $ conda install opencv=3.1
61 |
62 | Cloning the GitHub repo:
63 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
64 |
65 | Running Jupyter notebook:
66 | - $ jupyter notebook
67 | - This will open up a browser window in your current directory.
68 | - Navigate to `opencv-machine-learning/notebooks`.
69 | - Click on the notebook of your choice.
70 | - Select `Kernel > Restart & Run All`.
71 |
72 | Have fun!
73 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter05/05.00-Using-Decision-Trees-to-Make-a-Medical-Diagnosis.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {
6 | "deletable": true,
7 | "editable": true
8 | },
9 | "source": [
10 | "\n",
11 | "
\n",
12 | "*This notebook contains an excerpt from the upcoming book [Machine Learning for OpenCV](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv) by Michael Beyeler (expected Aug 2017).\n",
13 | "The code is released under the [MIT license](https://opensource.org/licenses/MIT),\n",
14 | "and is available on [GitHub](https://github.com/mbeyeler/opencv-machine-learning).*\n",
15 | "\n",
16 | "*Note that this excerpt contains only the raw code - the book is rich with additional explanations and illustrations.\n",
17 | "If you find this content useful, please consider supporting the work by\n",
18 | "[buying the book](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv)!*"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {
24 | "deletable": true,
25 | "editable": true
26 | },
27 | "source": [
28 | "\n",
29 | "< [Representing images](04.05-Representing-Images.ipynb) | [Contents](../README.md) | [Building your first decision tree](05.01-Building-Your-First-Decision-Tree.ipynb) >"
30 | ]
31 | },
32 | {
33 | "cell_type": "markdown",
34 | "metadata": {},
35 | "source": [
36 | "# Using Decision Trees to Make a Medical Diagnosis\n",
37 | "\n",
38 | "## Understanding Decision Trees\n",
39 | "\n",
40 | "Decision trees are simple yet powerful model for supervised learning problems. Like the name suggests, you can think of them as a tree in which information flows along different branches in the tree - starting at the trunk, and going all the way to the individual leaves.\n",
41 | "\n",
42 | "Let's say we have a dataset consisting of a single e-mail:"
43 | ]
44 | },
45 | {
46 | "cell_type": "code",
47 | "execution_count": 1,
48 | "metadata": {
49 | "collapsed": false,
50 | "deletable": true,
51 | "editable": true
52 | },
53 | "outputs": [],
54 | "source": [
55 | "data = [\n",
56 | " 'I am Mohammed Abacha, the son of the late Nigerian Head of '\n",
57 | " 'State who died on the 8th of June 1998. Since i have been '\n",
58 | " 'unsuccessful in locating the relatives for over 2 years now '\n",
59 | " 'I seek your consent to present you as the next of kin so '\n",
60 | " 'that the proceeds of this account valued at US$15.5 Million '\n",
61 | " 'Dollars can be paid to you. If you are capable and willing '\n",
62 | " 'to assist, contact me at once via email with following '\n",
63 | " 'details: 1. Your full name, address, and telephone number. '\n",
64 | " '2. Your Bank Name, Address. 3.Your Bank Account Number and '\n",
65 | " 'Beneficiary Name - You must be the signatory.'\n",
66 | "]"
67 | ]
68 | },
69 | {
70 | "cell_type": "markdown",
71 | "metadata": {},
72 | "source": [
73 | "This data can be vectorized using Scikit-Learn's `CountVectorizer`, which turns the e-mail into its individual words and corresponding word counts:"
74 | ]
75 | },
76 | {
77 | "cell_type": "code",
78 | "execution_count": 2,
79 | "metadata": {
80 | "collapsed": false,
81 | "deletable": true,
82 | "editable": true
83 | },
84 | "outputs": [],
85 | "source": [
86 | "from sklearn.feature_extraction.text import CountVectorizer\n",
87 | "vec = CountVectorizer()\n",
88 | "X = vec.fit_transform(data)"
89 | ]
90 | },
91 | {
92 | "cell_type": "markdown",
93 | "metadata": {},
94 | "source": [
95 | "Let's look at the first five words in the dictionaries, and their word counts:"
96 | ]
97 | },
98 | {
99 | "cell_type": "code",
100 | "execution_count": 3,
101 | "metadata": {
102 | "collapsed": false,
103 | "deletable": true,
104 | "editable": true
105 | },
106 | "outputs": [
107 | {
108 | "data": {
109 | "text/plain": [
110 | "['15', '1998', '8th', 'abacha', 'account']"
111 | ]
112 | },
113 | "execution_count": 3,
114 | "metadata": {},
115 | "output_type": "execute_result"
116 | }
117 | ],
118 | "source": [
119 | "vec.get_feature_names()[:5]"
120 | ]
121 | },
122 | {
123 | "cell_type": "code",
124 | "execution_count": 4,
125 | "metadata": {
126 | "collapsed": false,
127 | "deletable": true,
128 | "editable": true
129 | },
130 | "outputs": [
131 | {
132 | "data": {
133 | "text/plain": [
134 | "array([1, 1, 1, 1, 2], dtype=int64)"
135 | ]
136 | },
137 | "execution_count": 4,
138 | "metadata": {},
139 | "output_type": "execute_result"
140 | }
141 | ],
142 | "source": [
143 | "X.toarray()[0, :5]"
144 | ]
145 | },
146 | {
147 | "cell_type": "markdown",
148 | "metadata": {},
149 | "source": [
150 | "So, how would you have checked if the e-mail is from a Nigerian prince?\n",
151 | "\n",
152 | "One way to do this is to look if the e-mail contained both the words 'nigerian' and 'prince':"
153 | ]
154 | },
155 | {
156 | "cell_type": "code",
157 | "execution_count": 5,
158 | "metadata": {
159 | "collapsed": false,
160 | "deletable": true,
161 | "editable": true
162 | },
163 | "outputs": [
164 | {
165 | "data": {
166 | "text/plain": [
167 | "True"
168 | ]
169 | },
170 | "execution_count": 5,
171 | "metadata": {},
172 | "output_type": "execute_result"
173 | }
174 | ],
175 | "source": [
176 | "'nigerian' in vec.get_feature_names()"
177 | ]
178 | },
179 | {
180 | "cell_type": "code",
181 | "execution_count": 6,
182 | "metadata": {
183 | "collapsed": false,
184 | "deletable": true,
185 | "editable": true
186 | },
187 | "outputs": [
188 | {
189 | "data": {
190 | "text/plain": [
191 | "False"
192 | ]
193 | },
194 | "execution_count": 6,
195 | "metadata": {},
196 | "output_type": "execute_result"
197 | }
198 | ],
199 | "source": [
200 | "'prince' in vec.get_feature_names()"
201 | ]
202 | },
203 | {
204 | "cell_type": "markdown",
205 | "metadata": {
206 | "collapsed": true,
207 | "deletable": true,
208 | "editable": true
209 | },
210 | "source": [
211 | "And what do we find to our surprise? The word 'prince' does not occur in the e-mail.\n",
212 | "\n",
213 | "Does this mean the message is legit?\n",
214 | "\n",
215 | "No, of course not. Instead of 'prince', the e-mail went with the words 'head of state' instead - effectively circumventing our all-too-simple spam detector.\n",
216 | "\n",
217 | "Luckily, the theoretical framework behind decision trees provides us with help with both finding the right decision rules as well as which decisions to tackle next."
218 | ]
219 | },
220 | {
221 | "cell_type": "markdown",
222 | "metadata": {
223 | "deletable": true,
224 | "editable": true
225 | },
226 | "source": [
227 | "\n",
228 | "< [Representing images](04.05-Representing-Images.ipynb) | [Contents](../README.md) | [Building your first decision tree](05.01-Building-Your-First-Decision-Tree.ipynb) >"
229 | ]
230 | }
231 | ],
232 | "metadata": {
233 | "anaconda-cloud": {},
234 | "kernelspec": {
235 | "display_name": "Python 3",
236 | "language": "python",
237 | "name": "python3"
238 | },
239 | "language_info": {
240 | "codemirror_mode": {
241 | "name": "ipython",
242 | "version": 3
243 | },
244 | "file_extension": ".py",
245 | "mimetype": "text/x-python",
246 | "name": "python",
247 | "nbconvert_exporter": "python",
248 | "pygments_lexer": "ipython3",
249 | "version": "3.5.2"
250 | }
251 | },
252 | "nbformat": 4,
253 | "nbformat_minor": 0
254 | }
255 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter05/05.02-Using-Decision-Trees-to-Diagnose-Breast-Cancer.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "\n",
8 | "
\n",
9 | "*This notebook contains an excerpt from the upcoming book [Machine Learning for OpenCV](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv) by Michael Beyeler (expected Aug 2017).\n",
10 | "The code is released under the [MIT license](https://opensource.org/licenses/MIT),\n",
11 | "and is available on [GitHub](https://github.com/mbeyeler/opencv-machine-learning).*\n",
12 | "\n",
13 | "*Note that this excerpt contains only the raw code - the book is rich with additional explanations and illustrations.\n",
14 | "If you find this content useful, please consider supporting the work by\n",
15 | "[buying the book](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv)!*"
16 | ]
17 | },
18 | {
19 | "cell_type": "markdown",
20 | "metadata": {},
21 | "source": [
22 | "\n",
23 | "< [Building your first decision tree](05.01-Building-Your-First-Decision-Tree.ipynb) | [Contents](../README.md) | [Using Decision Trees for Regression](05.03-Using-Decision-Trees-for-Regression.ipynb) >"
24 | ]
25 | },
26 | {
27 | "cell_type": "markdown",
28 | "metadata": {},
29 | "source": [
30 | "# Using Decision Trees to Diagnose Breast Cancer\n",
31 | "\n",
32 | "Now that we have built our first decision trees, it's time to turn our attention to a real dataset: The Breast Cancer Wisconsin dataset .\n",
33 | "\n",
34 | "In order to make the take feasible, the researchers performed feature extraction on the images, like we did in Chapter 4, Representing Data and Engineering Features. They went through a total of 569 images, and extracted 30 different features that describe the characteristics of the cell nuclei present in the images, including:\n",
35 | "\n",
36 | "- cell nucleus texture (represented by the standard deviation of the gray-scale values)\n",
37 | "\n",
38 | "- cell nucleus size (calculated as the mean of distances from center to points on the perimeter)\n",
39 | "\n",
40 | "- tissue smoothness (local variation in radius lengths)\n",
41 | "\n",
42 | "- tissue compactness\n",
43 | "\n",
44 | "The goal of the research was then to classify tissue samples into benign and malignant (a binary classification task)."
45 | ]
46 | },
47 | {
48 | "cell_type": "markdown",
49 | "metadata": {},
50 | "source": [
51 | "## Loading the dataset\n",
52 | "\n",
53 | "The full dataset is part of Scikit-Learn's example datasets:"
54 | ]
55 | },
56 | {
57 | "cell_type": "code",
58 | "execution_count": 1,
59 | "metadata": {
60 | "collapsed": true,
61 | "deletable": true,
62 | "editable": true
63 | },
64 | "outputs": [],
65 | "source": [
66 | "from sklearn import datasets\n",
67 | "data = datasets.load_breast_cancer()"
68 | ]
69 | },
70 | {
71 | "cell_type": "markdown",
72 | "metadata": {},
73 | "source": [
74 | "As in previous examples, all data is contained in a 2-D feature matrix data.data, where the rows represent data samples, and the columns are the feature values:"
75 | ]
76 | },
77 | {
78 | "cell_type": "code",
79 | "execution_count": 2,
80 | "metadata": {
81 | "collapsed": false,
82 | "deletable": true,
83 | "editable": true
84 | },
85 | "outputs": [
86 | {
87 | "data": {
88 | "text/plain": [
89 | "(569, 30)"
90 | ]
91 | },
92 | "execution_count": 2,
93 | "metadata": {},
94 | "output_type": "execute_result"
95 | }
96 | ],
97 | "source": [
98 | "data.data.shape"
99 | ]
100 | },
101 | {
102 | "cell_type": "markdown",
103 | "metadata": {},
104 | "source": [
105 | "With a look at the provided feature names, we recognize some that we mentioned above:"
106 | ]
107 | },
108 | {
109 | "cell_type": "code",
110 | "execution_count": 3,
111 | "metadata": {
112 | "collapsed": false,
113 | "deletable": true,
114 | "editable": true
115 | },
116 | "outputs": [
117 | {
118 | "data": {
119 | "text/plain": [
120 | "array(['mean radius', 'mean texture', 'mean perimeter', 'mean area',\n",
121 | " 'mean smoothness', 'mean compactness', 'mean concavity',\n",
122 | " 'mean concave points', 'mean symmetry', 'mean fractal dimension',\n",
123 | " 'radius error', 'texture error', 'perimeter error', 'area error',\n",
124 | " 'smoothness error', 'compactness error', 'concavity error',\n",
125 | " 'concave points error', 'symmetry error', 'fractal dimension error',\n",
126 | " 'worst radius', 'worst texture', 'worst perimeter', 'worst area',\n",
127 | " 'worst smoothness', 'worst compactness', 'worst concavity',\n",
128 | " 'worst concave points', 'worst symmetry', 'worst fractal dimension'], \n",
129 | " dtype='"
427 | ]
428 | },
429 | "execution_count": 15,
430 | "metadata": {},
431 | "output_type": "execute_result"
432 | },
433 | {
434 | "data": {
435 | "image/png": "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\nercvv/xSqampSkhIkNPp1Hnnnaft27eHuiy0SExMVEVFhSSpoqJCCQkJIa6o5+BSaS9mWZaef/55\nDRgwQJdddlmoy4GkH/3oR/rRj34kSfrXv/6lN998U3fddVeIq0JSUpJSUlJUXFys9PR0ffnll0zi\nCTG3260dO3aosbFRUVFR+vLLL5WdnR3qstBi9OjRWrt2rXJzc7V27VqNGTMm1CX1GCzA24tt3bpV\nDz30kDIzM/3D2DfccIPOPvvsEFcG6WhwYzmQ8PD111/r+eefl9frVWpqqmbNmsXyBiH2pz/9SQUF\nBYqIiNDgwYM1c+ZMRUZGhrqsXueZZ57Rli1bVF1drcTERF1//fUaM2aMnn76aZWVlbEcSDcjuAEA\nANgE97gBAADYBMENAADAJghuAAAANkFwAwAAsAmCGwAAgE0Q3ADgJPzrX//SzJkzA/Lahw4d0vXX\nX6/m5uaAvD4A+yK4AUCIzZ49W1988UWoywBgAwQ3AAAAm+CRVwBsY/bs2frBD36gdevW6eDBgxo3\nbpxuuOEGLV26VFu3btWwYcP8K7Q/9dRTKiwsVFNTkwYPHqyf/OQnysjIkNfr1bx58zR58mRdfPHF\nMk1T8+fP11lnnaVrr732uO/d1NSkF198URs3blRSUpImTZrUar/H49FLL72kwsJCxcTE6NJLL9Ul\nl1wiybfC/969e+VwOPTZZ5+pf//+uvPOOzV48GA9++yzKisr02OPPSaHw6Frr71W559/viTpww8/\n1KuvvqqmpiZdeumluvrqqwP35QKwBUbcANjKJ598ogcffFC/+c1v9Omnn+rRRx/VDTfcoGXLlsk0\nTb399tuSpFGjRmnJkiVatmyZhgwZoiVLlkiSnE6nfvazn+lPf/qT9u3bpzVr1sg0zQ5D0WuvvaaD\nBw/q2Wef1S9/+UutXbvWv880TT322GMaPHiwXnjhBT300EN66623tHnzZv8xGzdu1Pnnn6+XXnpJ\nF1xwgZ544gl5vV797Gc/k9vt1v33369Vq1bpyiuv9J+zdetW/eY3v9GvfvUr/fnPf9a+ffu686sE\nYEMENwC2Mn36dCUlJcnlciknJ0dDhw7VkCFDFBUVpXPPPVe7d++WJE2ePFmxsbGKjIzUddddpz17\n9qiurk6SlJmZqauvvlpPPPGE3nzzTc2ZM0cOx4n/OPzHP/6hq6++WvHx8XK73br44ov9+3bu3Kmq\nqipde+21cjqd6tevn6ZMmaKCggL/MVlZWRo7dqycTqcuu+wyHTlyRDt27Djhe1533XWKiorS4MGD\nNWjQIO3Zs+dkvzYAPQSXSgHYSmJiov/nqKioNtuNjY0yTVN/+MMftH79elVVVckwDElSVVWV4uLi\nJEkTJkzQH//4R5133nnq379/h+9bUVGhlJQU/7bb7fb/XFpaqoqKCs2YMcPfZpqmRowY4d8+9lyH\nw6GUlBRVVFSc8D2TkpL8P0dHR6uhoaHDOgH0bAQ3AD3ORx99pI0bN+pXv/qV+vbtq7q6Ot16662t\njlm2bJnOPvtsff7559q6datycnJO+JpJSUkqLy9XRkaGJKmsrMy/z+12KzU11X85tj3l5eX+n03T\nVHl5uZKTk0/m4wHoxbhUCqDHqa+vl9PpVHx8vBobG/WHP/yh1f5169Zp9+7dmj17tm699Vbl5eV1\nOJp1/vnna/Xq1aqpqVF5ebneeecd/76hQ4cqNjZWa9asUVNTk0zT1DfffKOioiL/Mbt27dInn3yi\n5uZmvfXWW4qMjNSwYcMk+ULhoUOHuvEbANBTEdwA9DgTJkxQ3759NXPmTP385z/3ByTJN1K2cuVK\nzZ49WzExMbrwwguVlZWllStXnvA1r7vuOvXt21dz5szRww8/rPHjx/v3ORwO3X///fr66681e/Zs\n3X777XrhhRf899RJ0ujRo1VQUKBbb71V69at07333iun03fRIzc3V6+//rpmzJihv/zlL937ZQDo\nUQzLsqxQFwEAPdmf/vQnHThwQHfddVeoSwFgc4y4AQAA2ASTEwCgxcKFC1VYWNim/aqrrmLxWwBh\ngUulAAAANsGlUgAAAJsguAEAANgEwQ0AAMAmCG4AAAA2QXADAACwCYIbAACATfz/SHqtEyDW+CYA\nAAAASUVORK5CYII=\n",
436 | "text/plain": [
437 | ""
438 | ]
439 | },
440 | "metadata": {},
441 | "output_type": "display_data"
442 | }
443 | ],
444 | "source": [
445 | "plt.figure(figsize=(10, 6))\n",
446 | "plt.plot(max_depths, train_score, 'o-', linewidth=3, label='train')\n",
447 | "plt.plot(max_depths, test_score, 's-', linewidth=3, label='test')\n",
448 | "plt.xlabel('max_depth')\n",
449 | "plt.ylabel('score')\n",
450 | "plt.ylim(0.85, 1.1)\n",
451 | "plt.legend()"
452 | ]
453 | },
454 | {
455 | "cell_type": "markdown",
456 | "metadata": {},
457 | "source": [
458 | "Let's do one more. What about the minimum numbers of samples required to make a node a leaf node?\n",
459 | "\n",
460 | "We repeat the procedure from above:"
461 | ]
462 | },
463 | {
464 | "cell_type": "code",
465 | "execution_count": 16,
466 | "metadata": {
467 | "collapsed": false,
468 | "deletable": true,
469 | "editable": true
470 | },
471 | "outputs": [],
472 | "source": [
473 | "train_score = []\n",
474 | "test_score = []\n",
475 | "min_samples = np.array([2, 4, 8, 16, 32])\n",
476 | "for s in min_samples:\n",
477 | " dtc = tree.DecisionTreeClassifier(min_samples_leaf=s, random_state=42)\n",
478 | " dtc.fit(X_train, y_train)\n",
479 | " train_score.append(dtc.score(X_train, y_train))\n",
480 | " test_score.append(dtc.score(X_test, y_test))"
481 | ]
482 | },
483 | {
484 | "cell_type": "markdown",
485 | "metadata": {},
486 | "source": [
487 | "This leads to a plot that looks quite different from the one before:"
488 | ]
489 | },
490 | {
491 | "cell_type": "code",
492 | "execution_count": 17,
493 | "metadata": {
494 | "collapsed": false,
495 | "deletable": true,
496 | "editable": true
497 | },
498 | "outputs": [
499 | {
500 | "data": {
501 | "text/plain": [
502 | ""
503 | ]
504 | },
505 | "execution_count": 17,
506 | "metadata": {},
507 | "output_type": "execute_result"
508 | },
509 | {
510 | "data": {
511 | "image/png": "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\nHP9PSERERLLVJlqrtBYH8tqP1poY7o3kGA2GBjhutBYbNyIiIurzBEHA8EA1hgeqoas14vBlAw5d\n1rdEaxlNwMnCCpwsrECknxuSYzSYNMgbbirH2hOOjRsRERHJip+HCs/FBuDpkf7IvFmJ1Hw9Lmlb\nR2vVt0RrzYr0wRwHitZi40ZERESy1Jlorf++qMPe5mit5KEaxMo8WouNGxEREclem2itKwYczDeg\npLoRgPVoralDvKF2kd+ecGzciIiIyGF4uymxYIQ/nhpmjtZKzdPjXAfRWnNifBHq7WbHGXcNGzci\nIiJyOK2jtW6V1yO13WgtPUYH90NyjC8eGejZ56O12LgRERGRQwv9hWitc3ercU4m0Vps3IiIiMgp\nPBitlZqvR9btKpia94S7F621K1tr9fO+7kp8/HS0DWdsiY0bEREROZXW0VrFVQ04dNnQJlqrPYbm\nPePsiY0bEREROa0Bnq5torUO5OlxtVW0Vl/jWNsJExEREXXDvWit9+YMtvdUOsTGjYiIiKhZX9+c\nl40bERERkUywcSMiIiJqxdfd+lYg7b1uS3w4gYiIiKgVe2/50RFecSMiIiKSCTZuRERERDLBxo2I\niIhIJti4EREREckEGzciIiIimWDjRkRERCQTbNyIiIiIZIKNGxEREZFMsHEjIiIikgk2bkREREQy\nwcaNiIiISCbYuBERERHJBBs3IiIiIplg40ZEREQkE2zciIiIiGSCjRsRERGRTLBxIyIiIpIJNm5E\nREREMsHGjYiIiEgm2LgRERERyQQbNyIiIiKZYONGREREJBNs3IiIiIhkgo0bERERkUywcSMiIiKS\nCTZuRERERDLBxo2IiIhIJti4EREREckEGzciIiIimWDjRkRERCQTbNyIiIiIZEJlqy86d+4cdu7c\nCZPJhBkzZmDevHlt3q+qqsK2bdtQXFwMFxcXrFixAuHh4Z36LBEREZEzsMkVN5PJhB07duCNN97A\n1q1bcerUKdy6davNmD179mDw4MHYvHkzVq1ahV27dnX6s0RERETOwCaNW0FBAYKCgjBgwACoVCpM\nnDgRWVlZbcbcunULDz30EAAgJCQEWq0WBoOhU58lIiIicgY2adx0Oh38/f1bfu/v7w+dTtdmzKBB\ng3D69GkA5kZPq9VCp9N16rNEREREzsBm97j9knnz5mHXrl1YvXo1wsPDMWTIECgUXesr09LSkJaW\n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\nP91GtAAAAABJRU5ErkJggg==\n",
512 | "text/plain": [
513 | ""
514 | ]
515 | },
516 | "metadata": {},
517 | "output_type": "display_data"
518 | }
519 | ],
520 | "source": [
521 | "plt.figure(figsize=(10, 6))\n",
522 | "plt.plot(min_samples, train_score, 'o-', linewidth=3, label='train')\n",
523 | "plt.plot(min_samples, test_score, 's-', linewidth=3, label='test')\n",
524 | "plt.xlabel('min_samples_leaf')\n",
525 | "plt.ylabel('score')\n",
526 | "plt.ylim(0.9, 1)\n",
527 | "plt.legend()"
528 | ]
529 | },
530 | {
531 | "cell_type": "markdown",
532 | "metadata": {
533 | "deletable": true,
534 | "editable": true
535 | },
536 | "source": [
537 | "What does this all mean? Refer to Chapter 5 for the answers."
538 | ]
539 | },
540 | {
541 | "cell_type": "markdown",
542 | "metadata": {},
543 | "source": [
544 | "\n",
545 | "< [Building your first decision tree](05.01-Building-Your-First-Decision-Tree.ipynb) | [Contents](../README.md) | [Using Decision Trees for Regression](05.03-Using-Decision-Trees-for-Regression.ipynb) >"
546 | ]
547 | }
548 | ],
549 | "metadata": {
550 | "anaconda-cloud": {},
551 | "kernelspec": {
552 | "display_name": "Python 3",
553 | "language": "python",
554 | "name": "python3"
555 | },
556 | "language_info": {
557 | "codemirror_mode": {
558 | "name": "ipython",
559 | "version": 3
560 | },
561 | "file_extension": ".py",
562 | "mimetype": "text/x-python",
563 | "name": "python",
564 | "nbconvert_exporter": "python",
565 | "pygments_lexer": "ipython3",
566 | "version": "3.5.2"
567 | }
568 | },
569 | "nbformat": 4,
570 | "nbformat_minor": 2
571 | }
572 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter05/05.03-Using-Decision-Trees-for-Regression.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {
6 | "deletable": true,
7 | "editable": true
8 | },
9 | "source": [
10 | "\n",
11 | "
\n",
12 | "*This notebook contains an excerpt from the upcoming book [Machine Learning for OpenCV](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv) by Michael Beyeler (expected Aug 2017).\n",
13 | "The code is released under the [MIT license](https://opensource.org/licenses/MIT),\n",
14 | "and is available on [GitHub](https://github.com/mbeyeler/opencv-machine-learning).*\n",
15 | "\n",
16 | "*Note that this excerpt contains only the raw code - the book is rich with additional explanations and illustrations.\n",
17 | "If you find this content useful, please consider supporting the work by\n",
18 | "[buying the book](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv)!*"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {
24 | "deletable": true,
25 | "editable": true
26 | },
27 | "source": [
28 | "\n",
29 | "< [Using Decision Trees to Diagnose Breast Cancer](05.02-Using-Decision-Trees-to-Diagnose-Breast-Cancer.ipynb) | [Contents](../README.md) | [Detecting Pedestrians with Support Vector Machines](06.00-Detecting-Pedestrians-with-Support-Vector-Machines.ipynb) >"
30 | ]
31 | },
32 | {
33 | "cell_type": "markdown",
34 | "metadata": {},
35 | "source": [
36 | "# Using Decision Trees for Regression\n",
37 | "\n",
38 | "Although we have so far focused on using decision trees in classification tasks, you can also use them for regression. But, you will need to use Scikit-Learn again, as OpenCV does not provide this flexibility. We therefore only briefly review its functionality here.\n",
39 | "\n",
40 | "Let's say we wanted to use a decision tree to fit a sine wave. To make things interesting, we will also add some noise to the data points using NumPy's random number generator:"
41 | ]
42 | },
43 | {
44 | "cell_type": "code",
45 | "execution_count": 1,
46 | "metadata": {
47 | "collapsed": true,
48 | "deletable": true,
49 | "editable": true
50 | },
51 | "outputs": [],
52 | "source": [
53 | "import numpy as np\n",
54 | "rng = np.random.RandomState(42)"
55 | ]
56 | },
57 | {
58 | "cell_type": "markdown",
59 | "metadata": {},
60 | "source": [
61 | "We then create 100 x values between 0 and 5, and calculate the corresponding sine values:"
62 | ]
63 | },
64 | {
65 | "cell_type": "code",
66 | "execution_count": 2,
67 | "metadata": {
68 | "collapsed": false,
69 | "deletable": true,
70 | "editable": true
71 | },
72 | "outputs": [],
73 | "source": [
74 | "X = np.sort(5 * rng.rand(100, 1), axis=0)\n",
75 | "y = np.sin(X).ravel()"
76 | ]
77 | },
78 | {
79 | "cell_type": "markdown",
80 | "metadata": {},
81 | "source": [
82 | "We then add noise to every other data point in y (using y[::2]), scaled by 0.5 so we don't introduce to much jitter:"
83 | ]
84 | },
85 | {
86 | "cell_type": "code",
87 | "execution_count": 3,
88 | "metadata": {
89 | "collapsed": true,
90 | "deletable": true,
91 | "editable": true
92 | },
93 | "outputs": [],
94 | "source": [
95 | "y[::2] += 0.5 * (0.5 - rng.rand(50))"
96 | ]
97 | },
98 | {
99 | "cell_type": "markdown",
100 | "metadata": {},
101 | "source": [
102 | "You can then create regression tree like any other tree before. We will build two trees, one with a depth of 2, and one with a depth of 5:"
103 | ]
104 | },
105 | {
106 | "cell_type": "code",
107 | "execution_count": 4,
108 | "metadata": {
109 | "collapsed": true,
110 | "deletable": true,
111 | "editable": true
112 | },
113 | "outputs": [],
114 | "source": [
115 | "from sklearn import tree"
116 | ]
117 | },
118 | {
119 | "cell_type": "code",
120 | "execution_count": 5,
121 | "metadata": {
122 | "collapsed": false,
123 | "deletable": true,
124 | "editable": true
125 | },
126 | "outputs": [
127 | {
128 | "data": {
129 | "text/plain": [
130 | "DecisionTreeRegressor(criterion='mse', max_depth=2, max_features=None,\n",
131 | " max_leaf_nodes=None, min_impurity_split=1e-07,\n",
132 | " min_samples_leaf=1, min_samples_split=2,\n",
133 | " min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
134 | " splitter='best')"
135 | ]
136 | },
137 | "execution_count": 5,
138 | "metadata": {},
139 | "output_type": "execute_result"
140 | }
141 | ],
142 | "source": [
143 | "regr1 = tree.DecisionTreeRegressor(max_depth=2, random_state=42)\n",
144 | "regr1.fit(X, y)"
145 | ]
146 | },
147 | {
148 | "cell_type": "code",
149 | "execution_count": 6,
150 | "metadata": {
151 | "collapsed": false,
152 | "deletable": true,
153 | "editable": true
154 | },
155 | "outputs": [
156 | {
157 | "data": {
158 | "text/plain": [
159 | "DecisionTreeRegressor(criterion='mse', max_depth=5, max_features=None,\n",
160 | " max_leaf_nodes=None, min_impurity_split=1e-07,\n",
161 | " min_samples_leaf=1, min_samples_split=2,\n",
162 | " min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
163 | " splitter='best')"
164 | ]
165 | },
166 | "execution_count": 6,
167 | "metadata": {},
168 | "output_type": "execute_result"
169 | }
170 | ],
171 | "source": [
172 | "regr2 = tree.DecisionTreeRegressor(max_depth=5, random_state=42)\n",
173 | "regr2.fit(X, y)"
174 | ]
175 | },
176 | {
177 | "cell_type": "markdown",
178 | "metadata": {},
179 | "source": [
180 | "We can then use the decision tree like a linear regressor from Chapter 3, First Steps in Supervised Learning. For this we create a test set with x values densely sampled in the whole range from 0 through 5:"
181 | ]
182 | },
183 | {
184 | "cell_type": "code",
185 | "execution_count": 7,
186 | "metadata": {
187 | "collapsed": true,
188 | "deletable": true,
189 | "editable": true
190 | },
191 | "outputs": [],
192 | "source": [
193 | "X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]"
194 | ]
195 | },
196 | {
197 | "cell_type": "markdown",
198 | "metadata": {},
199 | "source": [
200 | "The predicted y values can then be obtained with the predict method:"
201 | ]
202 | },
203 | {
204 | "cell_type": "code",
205 | "execution_count": 8,
206 | "metadata": {
207 | "collapsed": true,
208 | "deletable": true,
209 | "editable": true
210 | },
211 | "outputs": [],
212 | "source": [
213 | "y_1 = regr1.predict(X_test)\n",
214 | "y_2 = regr2.predict(X_test)"
215 | ]
216 | },
217 | {
218 | "cell_type": "markdown",
219 | "metadata": {},
220 | "source": [
221 | "If we plot all of these together, we can see how the decision trees differ:"
222 | ]
223 | },
224 | {
225 | "cell_type": "code",
226 | "execution_count": 9,
227 | "metadata": {
228 | "collapsed": false,
229 | "deletable": true,
230 | "editable": true
231 | },
232 | "outputs": [
233 | {
234 | "data": {
235 | "text/plain": [
236 | ""
237 | ]
238 | },
239 | "execution_count": 9,
240 | "metadata": {},
241 | "output_type": "execute_result"
242 | },
243 | {
244 | "data": {
245 | "image/png": "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\n",
246 | "text/plain": [
247 | ""
248 | ]
249 | },
250 | "metadata": {},
251 | "output_type": "display_data"
252 | }
253 | ],
254 | "source": [
255 | "import matplotlib.pyplot as plt\n",
256 | "%matplotlib inline\n",
257 | "plt.style.use('ggplot')\n",
258 | "\n",
259 | "plt.figure(figsize=(10, 6))\n",
260 | "plt.scatter(X, y, c='k', s=50, label='data')\n",
261 | "plt.plot(X_test, y_1, label=\"max_depth=2\", linewidth=5)\n",
262 | "plt.plot(X_test, y_2, label=\"max_depth=5\", linewidth=3)\n",
263 | "plt.xlabel(\"data\")\n",
264 | "plt.ylabel(\"target\")\n",
265 | "plt.legend()"
266 | ]
267 | },
268 | {
269 | "cell_type": "markdown",
270 | "metadata": {
271 | "deletable": true,
272 | "editable": true
273 | },
274 | "source": [
275 | "\n",
276 | "< [Using Decision Trees to Diagnose Breast Cancer](05.02-Using-Decision-Trees-to-Diagnose-Breast-Cancer.ipynb) | [Contents](../README.md) | [Detecting Pedestrians with Support Vector Machines](06.00-Detecting-Pedestrians-with-Support-Vector-Machines.ipynb) >"
277 | ]
278 | }
279 | ],
280 | "metadata": {
281 | "anaconda-cloud": {},
282 | "kernelspec": {
283 | "display_name": "Python 3",
284 | "language": "python",
285 | "name": "python3"
286 | },
287 | "language_info": {
288 | "codemirror_mode": {
289 | "name": "ipython",
290 | "version": 3
291 | },
292 | "file_extension": ".py",
293 | "mimetype": "text/x-python",
294 | "name": "python",
295 | "nbconvert_exporter": "python",
296 | "pygments_lexer": "ipython3",
297 | "version": "3.5.2"
298 | }
299 | },
300 | "nbformat": 4,
301 | "nbformat_minor": 2
302 | }
303 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter06/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 |
36 | First, make sure the website is currently online:
37 | http://mybinder.org/status
38 |
39 | Then go to:
40 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
41 |
42 | This will create a Docker environment that has all necessary packages installed.
43 | Simply execute the code from within the Jupyter notebook.
44 |
45 | If the website does not show all corresponding notebooks of the chapter,
46 | the build is possibly outdated. In this case, please go to:
47 | http://mybinder.org/status/mbeyeler/opencv-machine-learning
48 | Then click on rebuild the code, then click launch.
49 | Now everything should be up-to-date.
50 |
51 |
52 |
53 | ### Using Jupyter notebook
54 |
55 | You basically want to follow the installation instructions in Chapter 1.
56 |
57 | Installing stuff:
58 | - Download and install Python Anaconda
59 | - $ conda config --add channels conda-forge
60 | - $ conda install opencv=3.1
61 |
62 | Cloning the GitHub repo:
63 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
64 |
65 | Running Jupyter notebook:
66 | - $ jupyter notebook
67 | - This will open up a browser window in your current directory.
68 | - Navigate to `opencv-machine-learning/notebooks`.
69 | - Click on the notebook of your choice.
70 | - Select `Kernel > Restart & Run All`.
71 |
72 | Have fun!
73 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter07/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 |
36 | First, make sure the website is currently online:
37 | http://mybinder.org/status
38 |
39 | Then go to:
40 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
41 |
42 | This will create a Docker environment that has all necessary packages installed.
43 | Simply execute the code from within the Jupyter notebook.
44 |
45 | If the website does not show all corresponding notebooks of the chapter,
46 | the build is possibly outdated. In this case, please go to:
47 | http://mybinder.org/status/mbeyeler/opencv-machine-learning
48 | Then click on rebuild the code, then click launch.
49 | Now everything should be up-to-date.
50 |
51 |
52 |
53 | ### Using Jupyter notebook
54 |
55 | You basically want to follow the installation instructions in Chapter 1.
56 |
57 | Installing stuff:
58 | - Download and install Python Anaconda
59 | - $ conda config --add channels conda-forge
60 | - $ conda install opencv=3.1
61 |
62 | Cloning the GitHub repo:
63 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
64 |
65 | Running Jupyter notebook:
66 | - $ jupyter notebook
67 | - This will open up a browser window in your current directory.
68 | - Navigate to `opencv-machine-learning/notebooks`.
69 | - Click on the notebook of your choice.
70 | - Select `Kernel > Restart & Run All`.
71 |
72 | Have fun!
73 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter08/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 |
36 | First, make sure the website is currently online:
37 | http://mybinder.org/status
38 |
39 | Then go to:
40 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
41 |
42 | This will create a Docker environment that has all necessary packages installed.
43 | Simply execute the code from within the Jupyter notebook.
44 |
45 | If the website does not show all corresponding notebooks of the chapter,
46 | the build is possibly outdated. In this case, please go to:
47 | http://mybinder.org/status/mbeyeler/opencv-machine-learning
48 | Then click on rebuild the code, then click launch.
49 | Now everything should be up-to-date.
50 |
51 |
52 |
53 | ### Using Jupyter notebook
54 |
55 | You basically want to follow the installation instructions in Chapter 1.
56 |
57 | Installing stuff:
58 | - Download and install Python Anaconda
59 | - $ conda config --add channels conda-forge
60 | - $ conda install opencv=3.1
61 |
62 | Cloning the GitHub repo:
63 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
64 |
65 | Running Jupyter notebook:
66 | - $ jupyter notebook
67 | - This will open up a browser window in your current directory.
68 | - Navigate to `opencv-machine-learning/notebooks`.
69 | - Click on the notebook of your choice.
70 | - Select `Kernel > Restart & Run All`.
71 |
72 | Have fun!
73 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter09/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 |
36 | First, make sure the website is currently online:
37 | http://mybinder.org/status
38 |
39 | Then go to:
40 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
41 |
42 | This will create a Docker environment that has all necessary packages installed.
43 | Simply execute the code from within the Jupyter notebook.
44 |
45 | If the website does not show all corresponding notebooks of the chapter,
46 | the build is possibly outdated. In this case, please go to:
47 | http://mybinder.org/status/mbeyeler/opencv-machine-learning
48 | Then click on rebuild the code, then click launch.
49 | Now everything should be up-to-date.
50 |
51 |
52 |
53 | ### Using Jupyter notebook
54 |
55 | You basically want to follow the installation instructions in Chapter 1.
56 |
57 | Installing stuff:
58 | - Download and install Python Anaconda
59 | - $ conda config --add channels conda-forge
60 | - $ conda install opencv=3.1
61 |
62 | Cloning the GitHub repo:
63 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
64 |
65 | Running Jupyter notebook:
66 | - $ jupyter notebook
67 | - This will open up a browser window in your current directory.
68 | - Navigate to `opencv-machine-learning/notebooks`.
69 | - Click on the notebook of your choice.
70 | - Select `Kernel > Restart & Run All`.
71 |
72 | Have fun!
73 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter10/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 |
36 | First, make sure the website is currently online:
37 | http://mybinder.org/status
38 |
39 | Then go to:
40 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
41 |
42 | This will create a Docker environment that has all necessary packages installed.
43 | Simply execute the code from within the Jupyter notebook.
44 |
45 | If the website does not show all corresponding notebooks of the chapter,
46 | the build is possibly outdated. In this case, please go to:
47 | http://mybinder.org/status/mbeyeler/opencv-machine-learning
48 | Then click on rebuild the code, then click launch.
49 | Now everything should be up-to-date.
50 |
51 |
52 |
53 | ### Using Jupyter notebook
54 |
55 | You basically want to follow the installation instructions in Chapter 1.
56 |
57 | Installing stuff:
58 | - Download and install Python Anaconda
59 | - $ conda config --add channels conda-forge
60 | - $ conda install opencv=3.1
61 |
62 | Cloning the GitHub repo:
63 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
64 |
65 | Running Jupyter notebook:
66 | - $ jupyter notebook
67 | - This will open up a browser window in your current directory.
68 | - Navigate to `opencv-machine-learning/notebooks`.
69 | - Click on the notebook of your choice.
70 | - Select `Kernel > Restart & Run All`.
71 |
72 | Have fun!
73 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter11/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 |
36 | First, make sure the website is currently online:
37 | http://mybinder.org/status
38 |
39 | Then go to:
40 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
41 |
42 | This will create a Docker environment that has all necessary packages installed.
43 | Simply execute the code from within the Jupyter notebook.
44 |
45 | If the website does not show all corresponding notebooks of the chapter,
46 | the build is possibly outdated. In this case, please go to:
47 | http://mybinder.org/status/mbeyeler/opencv-machine-learning
48 | Then click on rebuild the code, then click launch.
49 | Now everything should be up-to-date.
50 |
51 |
52 |
53 | ### Using Jupyter notebook
54 |
55 | You basically want to follow the installation instructions in Chapter 1.
56 |
57 | Installing stuff:
58 | - Download and install Python Anaconda
59 | - $ conda config --add channels conda-forge
60 | - $ conda install opencv=3.1
61 |
62 | Cloning the GitHub repo:
63 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
64 |
65 | Running Jupyter notebook:
66 | - $ jupyter notebook
67 | - This will open up a browser window in your current directory.
68 | - Navigate to `opencv-machine-learning/notebooks`.
69 | - Click on the notebook of your choice.
70 | - Select `Kernel > Restart & Run All`.
71 |
72 | Have fun!
73 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Chapter12/code-reviewer-instructions.md:
--------------------------------------------------------------------------------
1 | Reviewer instructions
2 | ---------------------
3 |
4 | All code for this book is maintained in Jupyter notebooks on GitHub:
5 | https://github.com/mbeyeler/opencv-machine-learning
6 |
7 |
8 | ## File organization
9 |
10 | All notebooks can be found here:
11 | https://github.com/mbeyeler/opencv-machine-learning/tree/master/notebooks
12 |
13 | They are organized by chapter and subsection.
14 | For example, the notebooks for Chapter 2 are:
15 | - 02.00-Working-with-Data-in-OpenCV.ipynb
16 | - 02.01-Dealing-with-Data-Using-Python-NumPy.ipynb
17 | - 02.02-Loading-External-Datasets-in-Python.ipynb
18 | - 02.03-Visualizing-Data-Using-Matplotlib.ipynb
19 | - 02.04-Visualizing-Data-from-an-External-Dataset.ipynb
20 | - 02.05-Dealing-with-Data-Using-the-OpenCV-TrainData-Container-in-C++.ipynb
21 |
22 |
23 |
24 | ## Running the code
25 |
26 | There are are at least two ways to run the code:
27 | - from within a Docker container using MyBinder,
28 | - from within a Jupyter notebook on your local machine.
29 |
30 |
31 |
32 | ### Using MyBinder
33 |
34 | MyBinder allows you to run Jupyter notebooks in an interactive Docker container.
35 |
36 | First, make sure the website is currently online:
37 | http://mybinder.org/status
38 |
39 | Then go to:
40 | http://mybinder.org/repo/mbeyeler/opencv-machine-learning
41 |
42 | This will create a Docker environment that has all necessary packages installed.
43 | Simply execute the code from within the Jupyter notebook.
44 |
45 | If the website does not show all corresponding notebooks of the chapter,
46 | the build is possibly outdated. In this case, please go to:
47 | http://mybinder.org/status/mbeyeler/opencv-machine-learning
48 | Then click on rebuild the code, then click launch.
49 | Now everything should be up-to-date.
50 |
51 |
52 |
53 | ### Using Jupyter notebook
54 |
55 | You basically want to follow the installation instructions in Chapter 1.
56 |
57 | Installing stuff:
58 | - Download and install Python Anaconda
59 | - $ conda config --add channels conda-forge
60 | - $ conda install opencv=3.1
61 |
62 | Cloning the GitHub repo:
63 | - $ git clone https://github.com/mbeyeler/opencv-machine-learning
64 |
65 | Running Jupyter notebook:
66 | - $ jupyter notebook
67 | - This will open up a browser window in your current directory.
68 | - Navigate to `opencv-machine-learning/notebooks`.
69 | - Click on the notebook of your choice.
70 | - Select `Kernel > Restart & Run All`.
71 |
72 | Have fun!
73 |
--------------------------------------------------------------------------------
/resources/Machine Learning for OpenCV/Software Hardware list.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zslucky/awesome-AI-books/ebdc03b572456f3f1d657fe9d77c6377c3a0b92b/resources/Machine Learning for OpenCV/Software Hardware list.pdf
--------------------------------------------------------------------------------