{"course":{"slug":"machine-learning-foundations","title":"Machine Learning, Foundations","url":"https://addaly.com/learn/machine-learning-foundations","level":"intermediate","track":"start"},"lesson":{"slug":"a-toolkit-that-costs-nothing","title":"A working setup that costs nothing","url":"https://addaly.com/learn/machine-learning-foundations/a-toolkit-that-costs-nothing","position":9,"of":92,"minutes":8,"answer":"The standard toolchain for classical machine learning is free and open source; the ceiling on free compute constrains pretraining large models, not the tabular work that most jobs consist of.","keyIdea":"The standard toolchain for classical machine learning is free and open source; the ceiling on free compute constrains pretraining large models, not the tabular work that most jobs consist of."},"body":{"format":"markdown","text":"## What you actually need\n\nEverything in this course runs on free software. Nothing here requires a paid licence, a GPU, or a machine you do not already have. Job adverts will name paid tools, and it is worth knowing what they are, but the free path is not a compromised version of this subject: in classical machine learning it is the industry standard.\n\n**The stack, all free and open source:**\n\n- **Python** with **NumPy** for arrays, **pandas** for tables, **scikit-learn** for models, **matplotlib** for plots. This is what most working data scientists use, including at large companies. There is no paid tier.\n- **XGBoost**, **LightGBM** and **CatBoost**: the gradient boosting libraries that win most tabular competitions. Free, and they run on a CPU.\n- **PyTorch** for neural networks. Free. Its main commercial alternative is TensorFlow, which is also free.\n- **JupyterLab** for notebooks, or **VS Code** with the Python extension, or **VSCodium** if you prefer a build with no telemetry.\n\nThe paid tools you will see in job adverts are **MATLAB** (use **GNU Octave**, which runs most MATLAB code unchanged), **SAS** and **SPSS** (use Python or **R**, both free), **Tableau** (use **Metabase** or matplotlib), and **DataRobot** or **Vertex AI** for AutoML (see the AutoML lesson in module 9 for free equivalents). Learn to say \"I have done this in scikit-learn\" in an interview; nobody serious will hold it against you.\n\n## If you do not have a laptop\n\nThis is the more common case than the industry admits, and it is workable.\n\n- **Google Colab** gives you a free notebook in a browser with about 12 GB of RAM and, in the free tier, intermittent GPU access. It runs on a phone browser in a pinch, though typing code on a phone is miserable and you should not plan a career around it.\n- **Kaggle Notebooks** give you a free environment with roughly 30 hours a week of GPU time, which is considerably more than Colab's free tier, plus thousands of hosted datasets you can attach with one click and no download.\n- Both save to your account. Neither requires a card.\n\nFor this course, Kaggle is the better default because the datasets are already there. Open a notebook, attach a dataset, and the code in the previous lesson runs.\n\n## Installing locally, if you can\n\n```bash\npython -m venv .venv\nsource .venv/bin/activate        # Windows: .venv\\Scripts\\activate\npip install numpy pandas scikit-learn matplotlib jupyterlab\njupyter lab\n```\n\nUse a virtual environment every time. The reason is not tidiness: two projects that need different versions of the same library will fight, and the loser is whichever one you touched second. A `.venv` per project makes that impossible.\n\nIf `pip install` fights you over compiled dependencies (common on Windows and on older Macs) use **Miniconda** instead, which ships pre-built binaries:\n\n```bash\nconda create -n ml python=3.11 numpy pandas scikit-learn matplotlib jupyterlab\nconda activate ml\n```\n\n## Datasets to practise on, legally\n\nUse these rather than scraping something. Every one is free and licensed for learning.\n\n- **scikit-learn's built-in sets**: `load_diabetes`, `load_wine`, `fetch_california_housing`. They load in one line and need no download.\n- **The UCI Machine Learning Repository**: hundreds of small, well-documented, classic datasets.\n- **Kaggle Datasets**: larger and messier, which is realistic.\n- **data.gov.in**, **data.gov.uk** and equivalents: real public data with real problems in it, which is the best practice you can get.\n\nA note on the famous ones. The Boston Housing dataset was removed from scikit-learn in version 1.2 because one of its features encodes the proportion of Black residents in a way that was used as a predictor of house price. It is still in old tutorials. Do not use it; `fetch_california_housing` is the direct replacement and the reason for the swap is worth knowing, because a dataset's history is part of what you are teaching a model.\n\n## Two habits that save you\n\n**Set the random seed and record it.** `random_state=0` everywhere. Results that change every run cannot be debugged and cannot be reported.\n\n**Version the environment.** `pip freeze > requirements.txt` at the start of anything you might revisit. Six months later, an unpinned library upgrade will change your numbers, and you will spend two days finding out why.\n\n## The limitation\n\nFree compute has ceilings. Colab and Kaggle will disconnect long-running jobs, free GPU quotas run out, and neither is suitable for training a large model from scratch. Everything in this course fits comfortably inside those ceilings: classical machine learning on tabular data is not compute-hungry, and a gradient boosting model on 100,000 rows trains in under a minute on a CPU.\n\nWhat you cannot do on free hardware is pretrain a large language model. What you can do is use one that somebody else pretrained, fine-tune a small one, and do the entire body of work that most machine learning jobs actually consist of."},"check":{"question":"Why does creating a virtual environment per project matter more than it appears to for someone learning alone on one machine?","options":[{"text":"Virtual environments isolate your data files, so an experiment cannot accidentally overwrite another project's dataset.","correct":false,"tempting":"Confuses environment isolation with filesystem isolation; a venv separates installed packages, not data."},{"text":"Two projects needing different library versions will otherwise share one installation, so upgrading for the newer project silently changes the older project's results.","correct":true},{"text":"Virtual environments make imports faster because Python searches a smaller set of packages.","correct":false,"tempting":"Invents a performance rationale; import time is not a meaningful factor and is not why the practice exists."},{"text":"Without one, pip needs administrator rights and will fail on most systems.","correct":false,"tempting":"Describes a permissions annoyance that has workarounds, and would not explain why experienced practitioners use a venv even with full rights."}]},"prev":{"slug":"the-whole-loop","title":"The whole loop, once, before we slow down","url":"https://addaly.com/learn/machine-learning-foundations/the-whole-loop"},"next":{"slug":"fitting-a-line-by-hand","title":"Fitting a line to five points, by hand","url":"https://addaly.com/learn/machine-learning-foundations/fitting-a-line-by-hand"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'A working setup that costs nothing', in Machine Learning, Foundations. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/machine-learning-foundations/a-toolkit-that-costs-nothing (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"A working setup that costs nothing","courseTitle":"Machine Learning, Foundations","module":{"index":1,"slug":"what-learning-is","title":"What learning is, and what it is not"},"answer":null,"keyIdea":"The standard toolchain for classical machine learning is free and open source; the ceiling on free compute constrains pretraining large models, not the tabular work that most jobs consist of.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"what-you-actually-need","runs":[{"text":"What you actually need"}]},{"t":"p","runs":[{"text":"Everything in this course runs on free software. Nothing here requires a paid licence, a GPU, or a machine you do not already have. Job adverts will name paid tools, and it is worth knowing what they are, but the free path is not a compromised version of this subject: in classical machine learning it is the industry standard."}]},{"t":"p","runs":[{"text":"The stack, all free and open source:","b":true}]},{"t":"ul","items":[[{"text":"Python","b":true},{"text":" with "},{"text":"NumPy","b":true},{"text":" for arrays, "},{"text":"pandas","b":true},{"text":" for tables, "},{"text":"scikit-learn","b":true},{"text":" for models, "},{"text":"matplotlib","b":true},{"text":" for plots. This is what most working data scientists use, including at large companies. There is no paid tier."}],[{"text":"XGBoost","b":true},{"text":", "},{"text":"LightGBM","b":true},{"text":" and "},{"text":"CatBoost","b":true},{"text":": the gradient boosting libraries that win most tabular competitions. Free, and they run on a CPU."}],[{"text":"PyTorch","b":true},{"text":" for neural networks. Free. Its main commercial alternative is TensorFlow, which is also free."}],[{"text":"JupyterLab","b":true},{"text":" for notebooks, or "},{"text":"VS Code","b":true},{"text":" with the Python extension, or "},{"text":"VSCodium","b":true},{"text":" if you prefer a build with no telemetry."}]]},{"t":"p","runs":[{"text":"The paid tools you will see in job adverts are "},{"text":"MATLAB","b":true},{"text":" (use "},{"text":"GNU Octave","b":true},{"text":", which runs most MATLAB code unchanged), "},{"text":"SAS","b":true},{"text":" and "},{"text":"SPSS","b":true},{"text":" (use Python or "},{"text":"R","b":true},{"text":", both free), "},{"text":"Tableau","b":true},{"text":" (use "},{"text":"Metabase","b":true},{"text":" or matplotlib), and "},{"text":"DataRobot","b":true},{"text":" or "},{"text":"Vertex AI","b":true},{"text":" for AutoML (see the AutoML lesson in module 9 for free equivalents). Learn to say “I have done this in scikit-learn” in an interview; nobody serious will hold it against you."}]},{"t":"h2","id":"if-you-do-not-have-a-laptop","runs":[{"text":"If you do not have a laptop"}]},{"t":"p","runs":[{"text":"This is the more common case than the industry admits, and it is workable."}]},{"t":"ul","items":[[{"text":"Google Colab","b":true},{"text":" gives you a free notebook in a browser with about 12 GB of RAM and, in the free tier, intermittent GPU access. It runs on a phone browser in a pinch, though typing code on a phone is miserable and you should not plan a career around it."}],[{"text":"Kaggle Notebooks","b":true},{"text":" give you a free environment with roughly 30 hours a week of GPU time, which is considerably more than Colab’s free tier, plus thousands of hosted datasets you can attach with one click and no download."}],[{"text":"Both save to your account. Neither requires a card."}]]},{"t":"p","runs":[{"text":"For this course, Kaggle is the better default because the datasets are already there. Open a notebook, attach a dataset, and the code in the previous lesson runs."}]},{"t":"h2","id":"installing-locally-if-you-can","runs":[{"text":"Installing locally, if you can"}]},{"t":"code","lang":"bash","label":"Bash","text":"python -m venv .venv\nsource .venv/bin/activate        # Windows: .venv\\Scripts\\activate\npip install numpy pandas scikit-learn matplotlib jupyterlab\njupyter lab"},{"t":"p","runs":[{"text":"Use a virtual environment every time. The reason is not tidiness: two projects that need different versions of the same library will fight, and the loser is whichever one you touched second. A "},{"text":".venv","code":true},{"text":" per project makes that impossible."}]},{"t":"p","runs":[{"text":"If "},{"text":"pip install","code":true},{"text":" fights you over compiled dependencies (common on Windows and on older Macs) use "},{"text":"Miniconda","b":true},{"text":" instead, which ships pre-built binaries:"}]},{"t":"code","lang":"bash","label":"Bash","text":"conda create -n ml python=3.11 numpy pandas scikit-learn matplotlib jupyterlab\nconda activate ml"},{"t":"h2","id":"datasets-to-practise-on-legally","runs":[{"text":"Datasets to practise on, legally"}]},{"t":"p","runs":[{"text":"Use these rather than scraping something. Every one is free and licensed for learning."}]},{"t":"ul","items":[[{"text":"scikit-learn’s built-in sets","b":true},{"text":": "},{"text":"load_diabetes","code":true},{"text":", "},{"text":"load_wine","code":true},{"text":", "},{"text":"fetch_california_housing","code":true},{"text":". They load in one line and need no download."}],[{"text":"The UCI Machine Learning Repository","b":true},{"text":": hundreds of small, well-documented, classic datasets."}],[{"text":"Kaggle Datasets","b":true},{"text":": larger and messier, which is realistic."}],[{"text":"data.gov.in","b":true},{"text":", "},{"text":"data.gov.uk","b":true},{"text":" and equivalents: real public data with real problems in it, which is the best practice you can get."}]]},{"t":"p","runs":[{"text":"A note on the famous ones. The Boston Housing dataset was removed from scikit-learn in version 1.2 because one of its features encodes the proportion of Black residents in a way that was used as a predictor of house price. It is still in old tutorials. Do not use it; "},{"text":"fetch_california_housing","code":true},{"text":" is the direct replacement and the reason for the swap is worth knowing, because a dataset’s history is part of what you are teaching a model."}]},{"t":"h2","id":"two-habits-that-save-you","runs":[{"text":"Two habits that save you"}]},{"t":"p","runs":[{"text":"Set the random seed and record it.","b":true},{"text":" "},{"text":"random_state=0","code":true},{"text":" everywhere. Results that change every run cannot be debugged and cannot be reported."}]},{"t":"p","runs":[{"text":"Version the environment.","b":true},{"text":" "},{"text":"pip freeze > requirements.txt","code":true},{"text":" at the start of anything you might revisit. Six months later, an unpinned library upgrade will change your numbers, and you will spend two days finding out why."}]},{"t":"h2","id":"the-limitation","runs":[{"text":"The limitation"}],"role":"limit"},{"t":"p","runs":[{"text":"Free compute has ceilings. Colab and Kaggle will disconnect long-running jobs, free GPU quotas run out, and neither is suitable for training a large model from scratch. Everything in this course fits comfortably inside those ceilings: classical machine learning on tabular data is not compute-hungry, and a gradient boosting model on 100,000 rows trains in under a minute on a CPU."}]},{"t":"p","runs":[{"text":"What you cannot do on free hardware is pretrain a large language model. What you can do is use one that somebody else pretrained, fine-tune a small one, and do the entire body of work that most machine learning jobs actually consist of."}]}],"check":{"question":[{"text":"Why does creating a virtual environment per project matter more than it appears to for someone learning alone on one machine?"}],"options":[{"text":[{"text":"Virtual environments isolate your data files, so an experiment cannot accidentally overwrite another project’s dataset."}],"correct":false,"tempting":[{"text":"Confuses environment isolation with filesystem isolation; a venv separates installed packages, not data."}]},{"text":[{"text":"Two projects needing different library versions will otherwise share one installation, so upgrading for the newer project silently changes the older project’s results."}],"correct":true,"tempting":null},{"text":[{"text":"Virtual environments make imports faster because Python searches a smaller set of packages."}],"correct":false,"tempting":[{"text":"Invents a performance rationale; import time is not a meaningful factor and is not why the practice exists."}]},{"text":[{"text":"Without one, pip needs administrator rights and will fail on most systems."}],"correct":false,"tempting":[{"text":"Describes a permissions annoyance that has workarounds, and would not explain why experienced practitioners use a venv even with full rights."}]}],"order":[2,3,1,0],"why":null},"prev":{"slug":"the-whole-loop","title":"The whole loop, once, before we slow down","minutes":10},"next":{"slug":"fitting-a-line-by-hand","title":"Fitting a line to five points, by hand","minutes":9}}}