As a Software Engineer, ML is an area that I have a growing interest for. Nobody can deny how Artificial Intelligence (AI) is now all the rage. Companies are adapting their approaches to solving common software engineering problems, preferring ML solutions over traditional imperative programming styles. Also, the growing availability of cloud solutions with off-the-shelf AI capabilities and the sheer volume of data collected through digital channels makes ML models more accurate than ever.
This approach to programming is cost-effective for some use cases, as the main area of challenge is to find the right model for the problem to address, and then train it enough to reach an acceptable performance. Once done, the program starts learning by itself reducing the need to rewrite your code, introducing regressions while you do ;). Indeed, the model can likely provide good results (predictions, classifications,..) for data you didn't knew while training it. Conversely, a traditional programming approach would require you to modify your code and add the necessary logic to deal with the new data characteristics before re-shipping the app to production. You got it, ML can adapt its logic on the fly.
But it's no magic! Greatly performing models require a representative dataset for the problem they need to solve, an important effort and investment upfront to tune things, greater experience to debug the model quicker. At the end of the day, coding an app poorly, without unit tests and proper architecture, can lead to dramatic consequences (i.e instable app, end-users disengagement, high corrective costs, ...). Similarly, training and modeling an ML program poorly would lead to a poor program with even a worse situation. Imagine yourself receiving from Netflix recommendations on movies that are not of your taste, you would likely start to think about switching to a better performing platform.
After having completed few years ago the famous training provided by Andrew Ng on Coursera about the topic, using Octave at that time :), I have recently started reading Aurelien Geron's book about Machine Learning (ML), namely: "Hands-on Machine Learning with Scikit-Lean & TensorFlow".
Why ? Because it's a great book, Python friendly, and one day or another I will end up having to solve a challenging ML problem, making me eager to understand the beast better, getting confortable on HOW to build quality models and avoid dramatic pitfalls.
This post, is the first one of a series of articles where I will share what I have learned from this book, highlighting best practices, common patterns, code solutions.. without further ado, let's have a look at chapter 1, The Machine Learning Landscape .