{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "100c8da8",
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"from ndslib.config import jupyter_startup\n",
"jupyter_startup()"
]
},
{
"cell_type": "markdown",
"id": "7a71e39e",
"metadata": {},
"source": [
"(core-ml)=\n",
"# The core concepts of machine learning\n",
"\n",
"We've arrived at the last chapter of the book. Hopefully you've enjoyed the\n",
"journey to this point! In this chapter, we'll dive into machine learning. There's a lot to\n",
"cover, so this will be a pretty long chapter. To keep things manageable, we've\n",
"structured the material into 7 sections. Here in {numref}`core-ml`, we'll review\n",
"some core concepts in machine learning, setting the stage for everything that\n",
"follows. In {numref}`scikit-learn`, we'll introduce the *scikit-learn* Python\n",
"package, which we'll rely on heavily throughout the chapter.\n",
"{numref}`ml-overfitting` explores the central problem of *overfitting*;\n",
"{numref}`ml-validation` and {numref}`ml-selection` then cover different ways of\n",
"diagnosing and addressing overfitting via model validation and model selection,\n",
"respectively. Finally, in {numref}`dl`, we close with a brief\n",
"review of deep learning methods -— a branch of machine learning that has made\n",
"many recent advances, and one that's recently made considerable inroads into\n",
"neuroimaging.\n",
"\n",
"Before we get into it, a quick word about our guiding philosophy. Many texts\n",
"covering machine learning adopt what we might call a \"catalog\" approach: they\n",
"try to cover as many of the different classes of machine learning algorithms as\n",
"possible. This won't be our approach here. For one thing, there's simply no way\n",
"to do justice to even a small fraction of this space within the confines of one\n",
"chapter (even a long one). More importantly, though, we think it's far more\n",
"important to develop a basic grasp on core concepts and tools in machine\n",
"learning than to have a cursory familiarity with many of the different\n",
"algorithms out there. In our anecdotal experience, neuroimaging researchers new\n",
"to machine learning are often bewildered by the sheer number of algorithms\n",
"implemented in machine learning packages like scikit-learn, and sometimes fall\n",
"into the trap of systematically applying every available algorithm to their\n",
"problem, in the hopes of identifying the \"best\" one. For reasons we'll discuss\n",
"in depth in this chapter, this kind of approach can be quite dangerous; not only\n",
"does it preempt a deeper understanding of what one is doing, but, as we'll see\n",
"in {numref}`ml-overfitting` and {numref}`ml-validation`, it can actually make\n",
"one's results considerably *worse* by increasing the risk of overfitting.\n",
"\n",
"## What *is* machine learning?\n",
"\n",
"This is a chapter on machine learning, so now is probably a good time to give a\n",
"working definition. Here's a reasonable one: **machine learning is the field of\n",
"science/engineering that seeks to build systems capable of learning from\n",
"experience.**\n",
"\n",
"This is a very broad definition, and in practice, the set of activities that get\n",
"labeled \"machine learning\" is quite broad and varied. But two elements are\n",
"common to most machine learning applications: (1) an emphasis is on developing\n",
"algorithms that can learn (semi-)autonomously from data, rather than static\n",
"rule-based systems that must be explicitly designed or updated by humans; and\n",
"(2) an approach to performance evaluation that focuses heavily on well-defined\n",
"quantitative targets.\n",
"\n",
"We can contrast machine learning with traditional scientific inference, where\n",
"the goal (or at least, *a* goal) is to *understand* or *explain* how a system\n",
"operates.\n",
"\n",
"The goals of prediction and explanation are not mutually exclusive, of course.\n",
"But most people tend to favor one over the other to some extent. And, as a rough\n",
"generalization, people who do machine learning tend to be more interested in\n",
"figuring out how to make useful predictions than in arriving at a \"true\", or\n",
"even just an approximately correct, model of the data-generating process\n",
"underlying a given phenomenon. By contrast, people interested in explanation\n",
"might be willing to accept models that don't make the strongest possible\n",
"predictions (or often, even good ones) so long as those models provide some\n",
"insight into the mechanisms that seem to underlie the data.\n",
"\n",
"We don't need to take a principled position on the prediction vs. explanation\n",
"divide here (plenty has been written on the topic; see\n",
"{numref}`ml-core-addtl-resources` below). Just be aware that, for purposes of\n",
"this chapter, we're going to assume that our goal is mainly to generate good\n",
"predictions, and that understanding and interpretability are secondary or\n",
"tertiary on our list of desiderata (though we'll still say something about them\n",
"now and then).\n",
"\n",
"## Supervised vs. unsupervised learning\n",
"\n",
"Broadly speaking, machine learning can be carved up into two forms of learning:\n",
"**supervised** and **unsupervised**. We say that learning is supervised whenever\n",
"we know the true values that our model is trying to predict, and hence, are in a\n",
"position to \"supervise\" the learning process by quantifying prediction accuracy\n",
"and the associated prediction error. \"Ordinary\" least-squares regression, in the\n",
"machine learning context, is an example of supervised learning: our model takes\n",
"as its input both a vector of *features* (conventionally labeled `X`) and a\n",
"vector of *labels* (`y`). Researchers often use different terminology in various\n",
"biomedical disciplines—often calling `X` *variables* or *predictors*, and `y`\n",
"the *outcome* or *dependent variable*—but the idea is the same.\n",
"\n",
"```{eval-rst}\n",
".. index::\n",
" single: Supervised learning\n",
"```\n",
"\n",
"```{eval-rst}\n",
".. index::\n",
" single: Unsupervised learning\n",
"```\n",
"\n",
"Here are some examples of supervised learning problems (the first of which we'll attempt later):\n",
"\n",
"* Predicting people's chronological age from structural brain differences\n",
"* Determining whether or not incoming email is spam\n",
"* Predicting a person's rating of a particular movie based on their ratings of other movies\n",
"* Discriminating schizophrenics from controls based on genetic markers\n",
"\n",
"In each of these cases, we expect to train our model using a dataset where we\n",
"know the ground truth—i.e., we have *labeled* examples of age, spam, movie\n",
"ratings, and schizophrenia diagnosis, in addition to any number of potential\n",
"features we might use to try and predict each of these labels.\n",
"\n",
"## Supervised learning: classification vs. regression\n",
"\n",
"Within the class of supervised learning problems, we can draw a further\n",
"distinction between **classification** problems and **regression** problems. In\n",
"both cases, the goal is to develop a predictive model that recovers the true\n",
"labels as accurately as possible. The difference between the two lies in the\n",
"nature of the labels: in classification, the labels reflect discrete classes; in\n",
"regression, the labelled values vary continuously.\n",
"\n",
"### Regression\n",
"\n",
"A regression problem arises any time we have a set of continuous numerical\n",
"labels and we're interested in using one or more features to try and predict\n",
"those labels. Any bivariate relationship can be conceptualized as a regression\n",
"of one variable on the other. For example, suppose we have the data displayed in\n",
"this scatterplot:\n",
"\n",
"```{eval-rst}\n",
".. index::\n",
" single: Regression\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "d93bd617",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e83e5e63",
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"# Fix the random seed here\n",
"np.random.seed(100)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "3c09b3e3",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEGCAYAAABsLkJ6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8+yak3AAAACXBIWXMAAAsTAAALEwEAmpwYAAATm0lEQVR4nO3de2xkZ3nH8d+vDmu6m6hlLyUxIZjQiDal2UK9Gy5VQRBRGjmESxHwR2FTqi1UVFRqVaVJVaQsCpRK/aOCKo3IBVTKoqalpN5EIVtu6iV4vSibi7dAiMySbCCbbAu1V/Vi8/SPOd4Y74w9Y8+c95zzfj+SteMZy/PsmePznPf2vI4IAQDy81OpAwAApEECAIBMkQAAIFMkAADIFAkAADJ1TuoAerF9+/YYHR1NHQYA1Mrhw4efiogdK5+vVQIYHR3V1NRU6jAAoFZsf6fd83QBAUCmSAAAkKlkCcD2821/yfa07YdtfyBVLACQo5RjAAuS/igivm77PEmHbd8bEdMJYwKAbCRLABHxhKQnisf/a/uopOdJIgEAqI3Z+QVNHDmumafnNLpti8Z3jujc4XrMr6lElLZHJb1U0tfavLZX0l5Juuiii8oNDABWcWjmpPbcNqkI6dTpRW3eNKR9B6Z1+zW7tWt0a+rw1pR8ENj2uZL+UdIfRsQPV74eETdHxFhEjO3YcdY0VgBIYnZ+QXtum9Tc/KJOnV6U1EoCc/OLxfMLiSNcW9IEYPtZal38Px0R/5QyFgDoxcSR4+pUTT9CmnjgeLkBrUPKWUCWdIukoxHxV6niAID1mHl67syd/0qnTi9q5qlTJUfUu5QtgFdJ+m1Jr7V9f/F1ZcJ4AKBro9u2aPOmobavbd40pNHtm0uOqHfJEkBE/FtEOCIui4hfKb7uShUPAPRifOeI7Pav2dL4ZSPlBrQOyQeBAaCOzh0+R7dfs1tbhofOtAQ2bxrSluGh4vlKTLJcVfUjBICK2jW6VZPXXaGJB45r5qlTGt2+WeOXjdTi4i+RAABgQ7YMn6O376rnGiW6gAAgUyQAAMgUCQAAMkUCAIBMMQgMoC/qXBUzV3w6ADas7lUxc0UXEIANaUJVzFyRAABsSBOqYuaKBABgQ5pQFTNXJAAAG9KEqpi5IgEA2JAmVMXMFQkAwIY0oSpmrvhkAGxY3ati5opPB0Bf1LkqZq7oAgKATJEAACBTJAAAyBQJAAAyRQIAgEyRAAAgU0wDBWqAWvsYBM4goOKotY9BoQsIqDBq7WOQSABAhVFrv7PZ+QXtnzymj9x9VPsnj2mWZNgzuoCACqPWfnt0i/UHLQCgwqi1fza6xfqHBABUGLX2z0a3WP+QAIAKo9b+2egW65/8zh6gZqi1/5OWusXaJYFcu8XWK88zCKgZau0/Y3zniPYdmG77Wq7dYutFFxCAWqFbrH84UgBqh26x/uBoAaglusU2ji4gAMgUCQAAMpU0Adi+1faTth9KGQcA5Cj1GMDtkj4m6VOJ4wBQceyJ0H9Jj15EfNX2aMoYAFQfxd8Go/JjALb32p6yPXXixInU4QAoGcXfBqfyCSAibo6IsYgY27FjR+pwKom66Ggyir8NDh1oNUfTGE1H8bfBqXwLAJ3RNEYOut0TgZZw71JPA/2MpP+U9GLbj9l+T8p46oamMXLQzZ4Ih2ZO6vIbD+qGiWnd9JVHdcPEtC6/8aAOzZwsN9iaSZoAIuKdEXFBRDwrIi6MiFtSxlM3NI2Rg7WKv4VES3idGAOoMeqiIxerFX/bP3lszZYwNYPaIwHUGHXRkZNOxd9oCa8fg8A1Rl10oPtBYpyNK0TNURcduaMlvH5cJRqAuujI2VJLeOV6GFu0hNfAkUG2KC7WHLSE18fRafi8gsbGxmJqaip1GGiAdiuol+4YWUGNprF9OCLGVj7PIDCywwpqoIUEgOywghpoIQEgO8wbB1pIAMgO88aBFhIAstNNcTEgByQAZIcV1EALZzqyxLxxgASAjLGCGrmjCwgAMkUCAIBMkQAAIFMkAADIFAkAADJFAgCATJEAACBTJAAAyBQJAAAyRQIAgEyRAAAgUyQAAMgUCQAAMkU1UKCiZucXNHHkuGaentPoti0a3zmicylX3UipPmtHp92xK2hsbCympqZShwEM3KGZk9pz26QiWvsUb940JFu6/Zrd2jW6NXV46KMyPmvbhyNibOXzdAEBFTM7v6A9t01qbn7xzOb1p04vam5+sXh+IXGE6JfUnzUJAKiYiSPH1alhHiFNPHC83IAwMKk/axIAUDEzT8+duRtc6dTpRc08darkiDAoqT9rEgBQMaPbtpzZrH6lzZuGNLp9c8kRYVBSf9YkAKBixneOyG7/mi2NXzZSbkAYmNSfNQkAqJhzh8/R7dfs1pbhoTN3h5s3DWnL8FDxPFNBmyL1Z800UKCi5uYXNPHAcc08dUqj2zdr/LIRLv4NNejPutM0UM4moKK2DJ+jt++6KHUYKEGqz5ouIADIVNIEYPsNtr9h+xHb16aMBQBykywB2B6S9HFJvynpUknvtH1pqngAIDcpWwC7JT0SEY9GxGlJ+yVdnTAeAMhKygTwPEnfXfb9Y8VzP8H2XttTtqdOnDhRWnAA0HSVHwSOiJsjYiwixnbs2JE6HABojJQJ4HFJz1/2/YXFcwCAEqRMAIckXWL7hbY3SXqHpDsTxgMAWUm2ECwiFmy/X9I9koYk3RoRD6eKBwByk3QlcETcJemulDEAyA/bbbas+T+2/QeS/i4i/ruEeAAkVubFMcWFuN0WjPsOTGe53eaaxeBsf0it/vmvS7pV0j2RqIIcxeCAwSpzL+IU+x7Pzi/o8hsPam7+7E1YtgwPafK6KxpZcG/dewJHxJ9JukTSLZL2SPqW7Rttv6jvUQIDMDu/oP2Tx/SRu49q/+QxzbKnbltl7k+bai/c1FswVk1Xs4CKO/7vFV8Lkp4j6Q7bHx1gbMCGHZo5qctvPKgbJqZ101ce1Q0T07r8xoM6NHMydWiVU+bFMdWFOPUWjFWzZgKw/QHbhyV9VNK/S/rliHifpF+V9NYBx4dMDOIuPdVdZl2VeXFMdSFOvQVj1XTT2bVV0lsi4jvLn4yIH9seH0xYyMmgBuW6ucuk3v4zli6O7S7M/b44lvley43vHNG+A9NtX8txu81uxgA+uPLiv+y1o/0PCTkZ5F06zf3elLk/baq9cFNvwVg1la8FhGYbZF8wzf3elHlxTHkh3jW6VZPXXaEPXnWp3vfqF+mDV12qyeuuyG4KqMSWkEhskHfpNPd7t3RxLGMv4jLfa6U6bbc5yLUSJAAkNci+4KW7zE5zzXNr7nerzItjnS7EKQx60dqaC8GqhIVgzVPGwpy5+YUkd5nARvTzb6PTQjD+CpBUGXfp3GWejVo41VfGLDY+cSSXsi84R9TCqYcyZrHxF4ZK4C69HMun3S5ZusjsuW2ysbVw6qiMtRJMAwUyUnYJBuowrV8ZayVI9UBGylwcR1fTxpQxPkYCADJSVgkGupr6Y9DjY3wCQEbKWhxHHab+GeT4GGMAQEbKKsFAHaZ6oAUAZKaMabepqn2iNyQAIEODnnZLHaZ6aHwXENPQgPJRdrkeGl0LKMWm0wCeQR2mauhUC6ixCaCMImMAUAedEkBju4BSbToNAHXR2ATANDQAWF1jEwDbAQLA6hqbAFJtOo3BY2YX0B+NHQVlO8BmosAY0D+NnQW0hGlozcHMLmB9st0Sko1GmoMCY0B/NT4BoDnqPrOLfXhRNZx9qI06Fxhj7AJV1NhZQGieus7sWr45ylLyOnV6UXPzi8XzzGJCGiQA1EZdC4yxKh1VVc2/GKCDMmrZ91vdxy7QXNX9qwE6qNvMrjqPXaDZ6AICBqyuYxdoviQJwPbbbD9s+8e2z1qcADRJXccu0HypzryHJL1F0t8men+gVHUcu0DzJTn7IuKoJLlTuxhooLqNXaD5uP1A1lidi5wN7Ey3fVDS+W1euj4iPt/D79kraa8kXXQRd0/oH1bnIndJq4Ha/rKkP46Irkp8rqcaKNBOnSuL0mpBr7KtBgq0U9fKorRa0E+ppoG+2fZjkl4h6YDte1LEgXzVcXUuNYXQb0kSQER8LiIujIjhiHhuRPxGijiQrzruGU1NIfQbK4GRpTquzq1jqwXVRgJAluq4OreOrRZUW/XOclRS2TNPyni/uq3OHd85on0Hptu+VtVWC6qt8ZvCY+PazTyxNbCZJ2W/X51wbLAenaaBkgCwqrLny9d5fn5Z5uYXVm21sE4AK7EOAOtS9nz5us7PL9NqNYVYJ4BeMAiMVZU984SZLuvHOgH0igSAVZU984SZLuvHOgH0igSAVZU9X76O8/OrgtYTekUCwKrKni9fx/n5VUHrCb1iFhC6stbMk7q/XxMwgwqdMA0UyADrBNAO00CBLtV5Hn3dVjcjLVoAwDLcQaOJOrUAGAQGCsyjR25IAECBefTIDQkAKDCPHrkhAQAF5tEjNyQAoMAqZOSGBAAUWIWM3HBGA8swjx454awGVlit3j7QJHQBAUCmSAAAkCkSAABkigQAAJkiAQBApkgAAJAppoECParzfgHAcpy1QA/a7Rew78A0+wWglugCQm3Nzi9o/+QxfeTuo9o/eUyzA67Xz34BaBpaAKilFHfi3ewXwApi1AktANROqjtx9gtA05AAUDupdu5ivwA0DQkAtZPqTpz9AtA0JADUTqo7cfYLQNNwxqJ2xneOaN+B6bavDfpOnP0C0CSctaidpTvxlbOAbJVyJ85+AWgKEgBqiTtxYOOS/LXY/ktJV0k6Lenbkq6JiP9JEQvqiztxYGNSDQLfK+klEXGZpG9K+tNEcQBAtpIkgIj4QkQsrda5T9KFKeIAgJxVYRro70i6u9OLtvfanrI9deLEiRLDAoBmG9gYgO2Dks5v89L1EfH54meul7Qg6dOdfk9E3CzpZkkaGxvrsP4TANCrgSWAiLhitddt75E0Lul1EZ0W9gMABiXVLKA3SPoTSa+OCCpoAUACqcYAPibpPEn32r7f9k2J4gCAbCVpAUTEz6d4XwDAM6owCwgAkADr5huKjcsBrIUrQgOxcTmAbtAF1DBsXA6gWySAhkm1XSKA+iEBNAwblwPoFgmgYdi4HEC3SAANw8blALpFAmgYNi4H0C2uBg3EdokAusEVoaHYLhHAWugCAoBMkQAAIFMkAADIFAkAADLlOu3GaPuEpO+kjqON7ZKeSh1Ej4i5HMRcnjrGXVbML4iIHSufrFUCqCrbUxExljqOXhBzOYi5PHWMO3XMdAEBQKZIAACQKRJAf9ycOoB1IOZyEHN56hh30pgZAwCATNECAIBMkQAAIFMkgHWw/TbbD9v+se2OU7hsz9h+0Pb9tqfKjLFNLN3G/Abb37D9iO1ry4yxTSxbbd9r+1vFv8/p8HOLxTG+3/adZcdZxLDqcbM9bPuzxetfsz2aIMyVMa0V8x7bJ5Yd299NEeeKmG61/aTthzq8btt/XfyfHrD9srJjbBPTWjG/xvYPlh3nPy8tuIjgq8cvSb8o6cWSvixpbJWfm5G0PXW83cYsaUjStyVdLGmTpCOSLk0Y80clXVs8vlbSX3T4udnEx3bN4ybp9yXdVDx+h6TP1iDmPZI+ljLONnH/uqSXSXqow+tXSrpbkiW9XNLXahDzayRNpIiNFsA6RMTRiPhG6jh60WXMuyU9EhGPRsRpSfslXT346Dq6WtIni8eflPSmdKGsqpvjtvz/coek19md9m4rRdU+665ExFclnVzlR66W9KlouU/Sz9q+oJzo2usi5mRIAIMVkr5g+7DtvamD6cLzJH132fePFc+l8tyIeKJ4/D1Jz+3wc8+2PWX7PttvKie0n9DNcTvzMxGxIOkHkraVEl173X7Wby26Uu6w/fxyQtuQqp3D3XqF7SO277b9S2W9KRvCdGD7oKTz27x0fUR8vstf82sR8bjtn5N0r+3/Ku4GBqJPMZdqtZiXfxMRYbvTnOUXFMf5YklftP1gRHy737Fm6F8kfSYi5m3/nlotmNcmjqmJvq7WOTxr+0pJ/yzpkjLemATQQURc0Yff8Xjx75O2P6dWs3tgCaAPMT8uafld3oXFcwOzWsy2v2/7goh4omjGP9nhdywd50dtf1nSS9Xq3y5LN8dt6Wces32OpJ+R9HQ54bW1ZswRsTy+T6g1JlN1pZ/DGxURP1z2+C7bf2N7e0QMvEgcXUADYnuL7fOWHkt6vaS2swAq5JCkS2y/0PYmtQYrk8yqKdwp6d3F43dLOqsVY/s5toeLx9slvUrSdGkRtnRz3Jb/X35L0hejGAFMZM2YV/Sdv1HS0RLjW687Jb2rmA30ckk/WNaNWEm2z18aD7K9W63rcjk3B6lHyOv4JenNavUtzkv6vqR7iudHJN1VPL5YrZkVRyQ9rFY3TKVjLr6/UtI31bqDTh3zNkn/Kulbkg5K2lo8PybpE8XjV0p6sDjOD0p6T6JYzzpukm6Q9Mbi8bMl/YOkRyRNSro45bHtMuYPF+fuEUlfkvQLFYj5M5KekPSj4nx+j6T3Snpv8bolfbz4Pz2oVWbpVSjm9y87zvdJemVZsVEKAgAyRRcQAGSKBAAAmSIBAECmSAAAkCkSAABkigQAAJkiAQBApkgAwAbY3lUUS3t2sfr7YdsvSR0X0A0WggEbZPtDaq30/WlJj0XEhxOHBHSFBABsUFFL55Ck/1NrGf9i4pCArtAFBGzcNknnSjpPrZYAUAu0AIANKvYh3i/phZIuiIj3Jw4J6Ar7AQAbYPtdkn4UEX9ve0jSf9h+bUR8MXVswFpoAQBAphgDAIBMkQAAIFMkAADIFAkAADJFAgCATJEAACBTJAAAyNT/Ax5tLmQl8nY5AAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {
"filenames": {
"image/png": "/home/runner/work/neuroimaging-data-science/neuroimaging-data-science/_build/jupyter_execute/content/007-ml/001-core-concepts_4_0.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x = np.random.normal(size=30)\n",
"y = x * 0.5 + np.random.normal(size=30)\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.scatter(x, y, s=50)\n",
"ax.set_xlabel('x')\n",
"label = ax.set_ylabel('y')"
]
},
{
"cell_type": "markdown",
"id": "7d7cbf01",
"metadata": {},
"source": [
"We can frame this as a regression problem by saying that our goal is to generate\n",
"the best possible prediction for `y` given knowledge of `x`. There are many ways\n",
"to define what constitutes the \"best\" prediction, but here we'll use the\n",
"*least-squares* criterion and say we want a model that, when given the `x`\n",
"scores as inputs, will produce predictions for `y` that minimize the sum of\n",
"squared deviations between the predicted scores and the true scores.\n",
"\n",
"This is what \"ordinary\" least-squares (OLS) regression gives us. Here's the OLS\n",
"solution: first we add a column to `x`. This column will be used to model the\n",
"intercept of the line that relates `y` to `x`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "b16645a1",
"metadata": {},
"outputs": [],
"source": [
"x_with_int = np.hstack((np.ones((len(x), 1)), x[:, None]))"
]
},
{
"cell_type": "markdown",
"id": "a0f07792",
"metadata": {},
"source": [
"```{eval-rst}\n",
".. index::\n",
" single: Ordinary least-squares regression\n",
"```\n",
"\n",
"Then, we solve the set of linear equations using `scipy`'s linear algebra\n",
"routines. This gives us parameter estimates for the intercept and the slope."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "09bf32fd",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Parameter estimates (intercept and slope): [-0.36822492 0.62140416]\n"
]
}
],
"source": [
"w = np.linalg.lstsq(x_with_int, y, rcond=None)[0]\n",
"print(\"Parameter estimates (intercept and slope):\", w)"
]
},
{
"cell_type": "markdown",
"id": "0d37bf61",
"metadata": {},
"source": [
"Then, we visualize the data and also a straight line that represents the model\n",
"of the data based on the regression:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "5fb56950",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"filenames": {
"image/png": "/home/runner/work/neuroimaging-data-science/neuroimaging-data-science/_build/jupyter_execute/content/007-ml/001-core-concepts_10_0.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"ax.scatter(x, y, s=50)\n",
"ax.set_xlabel('x')\n",
"ax.set_ylabel('y')\n",
"\n",
"xx = np.linspace(x.min(), x.max()).T\n",
"line = w[0] + w[1] * xx\n",
"\n",
"p = plt.plot(xx, line)"
]
},
{
"cell_type": "markdown",
"id": "6e680525",
"metadata": {},
"source": [
"What is this model? Based on the values of the parameters, we can say that the\n",
"linear prediction equation that produced the predicted scores above can be\n",
"written as $\\hat{y} = -0.37 + 0.62x$.\n",
"\n",
"Of course, not every model we use to generate a prediction will be quite this\n",
"simple. Most won't—either because they have more parameters, or because the\n",
"prediction can't be expressed as a simple weighted sum of the parameter values.\n",
"But what all regression problems share in common with this very simple example\n",
"is the use of one or more features to try and predict labels that vary\n",
"continuously.\n",
"\n",
"(class)=\n",
"### Classification\n",
"\n",
"Classification problems are conceptually similar to regression problems. In\n",
"classification, just like in regression, we're still trying to learn to make the\n",
"best predictions we can with respect to some target set of labels. The\n",
"difference is that the labels are now discrete rather than continuous. In the\n",
"simplest case, the labels are binary: there are only two *classes*. For example,\n",
"we can use utilities from the Scikit Learn library (we'll learn more about this\n",
"library in {numref}`scikit-learn`) to create data that look like this\n",
"\n",
"```{eval-rst}\n",
".. index::\n",
" single: Classifcation\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "4a9709a9",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"filenames": {
"image/png": "/home/runner/work/neuroimaging-data-science/neuroimaging-data-science/_build/jupyter_execute/content/007-ml/001-core-concepts_12_0.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.datasets import make_blobs\n",
"\n",
"X, y = make_blobs(centers=2, random_state=2)\n",
"fig, ax = plt.subplots()\n",
"s = ax.scatter(*X.T, c=y, s=60, edgecolor='k', linewidth=1)"
]
},
{
"cell_type": "markdown",
"id": "8fba7305",
"metadata": {},
"source": [
"Here, we have two features (on the x- and y-axes) we can use to try to correctly\n",
"*classify* each sample. The two classes are labeled by color.\n",
"\n",
"In the above example, the classification problem is quite trivial: it's clear to\n",
"the eye that the two classes are perfectly *linearly separable*, so that we can\n",
"correctly classify 100% of the samples just by drawing a line between them. Of\n",
"course, most real-world problems won't be nearly this simple. As we'll see\n",
"later, when we work with real data, the feature-space distributions of our\n",
"labeled cases will usually overlap considerably, so that no single feature (and\n",
"often, not even all of our features collectively) will be sufficient to\n",
"perfectly discriminate cases in each class from cases in other classes.\n",
"\n",
"## Unsupervised learning: clustering and dimensionality reduction\n",
"\n",
"In unsupervised learning, we don't know the ground truth. We have a dataset\n",
"containing some observations that vary on some set of features `X`, but we're\n",
"not given any set of accompanying labels `y` that we're supposed to try to\n",
"recover using `X`. Instead, the goal of unsupervised learning is to find\n",
"interesting or useful structure in the data. What counts as interesting or\n",
"useful is of course very much person and context-dependent. But the key point is\n",
"that there is no strictly right or wrong way to organize our samples (or if\n",
"there is, we don't have access to that knowledge). So we're forced to muddle\n",
"along the best we can, using only the variation in the `X` features to try and\n",
"make sense of our data in ways that we think might be helpful to us later.\n",
"\n",
"Broadly speaking, we can categorize unsupervised learning applications into two\n",
"classes: clustering and dimensionality reduction.\n",
"\n",
"### Clustering\n",
"\n",
"In clustering, our goal is to label the samples we have into discrete *clusters*\n",
"(or groups). In a sense, clustering is just *classification without ground\n",
"truth*. In classification, we're trying to recover the class assignments that we\n",
"know to be there; in clustering, we're trying to make class assignments even\n",
"though we have no idea what the classes truly are, or even if they exist at all.\n",
"\n",
"```{eval-rst}\n",
".. index::\n",
" single: Clustering\n",
"```\n",
"\n",
"The best-case scenario for a clustering application might look something like this:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "4292ec78",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"filenames": {
"image/png": "/home/runner/work/neuroimaging-data-science/neuroimaging-data-science/_build/jupyter_execute/content/007-ml/001-core-concepts_14_0.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"X, y = make_blobs(random_state=100)\n",
"fig, ax = plt.subplots()\n",
"s = ax.scatter(*X.T)"
]
},
{
"cell_type": "markdown",
"id": "f1112459",
"metadata": {},
"source": [
"Remember: we don't know the true labels for these observations (that's why\n",
"they're all assigned the same color in the above plot). So in a sense, any\n",
"cluster assignment we come up with is just our best guess as to what might going\n",
"on. Nevertheless, in this particular case, the spatial grouping of the samples\n",
"in 2 dimensions is so striking that it's hard to imagine us having any\n",
"confidence in any assignment except the following one:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "33ac73b9",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"filenames": {
"image/png": "/home/runner/work/neuroimaging-data-science/neuroimaging-data-science/_build/jupyter_execute/content/007-ml/001-core-concepts_16_0.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"X, y = make_blobs(random_state=100)\n",
"fig, ax = plt.subplots()\n",
"s = ax.scatter(*X.T, c=y)"
]
},
{
"cell_type": "markdown",
"id": "5a31a4d4",
"metadata": {},
"source": [
"Of course, just as with the toy classification problem we saw earlier,\n",
"clustering problems this neat almost never show up in nature. Worse, in the real\n",
"world, there often *aren't* actually any \"true\" clusters. Often, the underlying\n",
"data-generating process is best understood as a complex (i.e., high-dimensional)\n",
"continuous function. In such cases, clustering can still be very helpful, as it\n",
"can help reduce complexity and giving us insight into regularities in the data.\n",
"But when we use clustering methods (and, more generally, any kind of\n",
"unsupervised learning approach), we should try to always remember the adage that\n",
"*the map is not the territory*—meaning, we shouldn't mistake a description of a\n",
"phenomenon for the phenomenon itself.\n",
"\n",
"### Dimensionality reduction\n",
"\n",
"The other major class of unsupervised learning application is **dimensionality reduction**. Here, the idea, just as the name suggests, is to reduce the dimensionality of our data. The reasons why dimensionality reduction is important in machine learning will become clearer when we talk about overfitting later, but a general intuition we can build on is that most real-world datasets—especially large ones—can be efficiently described using fewer dimensions than there are nominal features in the dataset. Real-world datasets tend to contain a good deal of structure: variables are related to one another in important (though often non-trivial) ways, and some variables are *redundant* with others, in the sense that they can be redescribed as functions of other variables. The idea is that, if we can capture most of the variation in the features of a dataset using a smaller subset of those features, we can reduce the effective size of our dataset and build predictions more efficiently.\n",
"\n",
"```{eval-rst}\n",
".. index::\n",
" single: Dimensionality reduction\n",
"```\n",
"\n",
"To illustrate, consider this dataset:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "17a3036c",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"filenames": {
"image/png": "/home/runner/work/neuroimaging-data-science/neuroimaging-data-science/_build/jupyter_execute/content/007-ml/001-core-concepts_18_0.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x = np.random.normal(size=300)\n",
"y = x * 5 + np.random.normal(size=300)\n",
"\n",
"fig, ax = plt.subplots()\n",
"s = ax.scatter(x, y)"
]
},
{
"cell_type": "markdown",
"id": "d03d9127",
"metadata": {},
"source": [
"Nominally, this is a two-dimensional dataset, and we're plotting the two features on the x and y axes, respectively. But it seems clear at a glance that there aren't *really* two dimensions in the data—or at the very least, one dimension is far more important than the other. In this case, we could capture the vast majority of the variance along both dimensions with a single axis placed along the diagonal of the plot—in essence, \"rotating\" the axes to a \"simpler\" structure. If we keep only the first dimension in the new space, and lose the second dimension, we reduce our 2-dimensional dataset to 1 dimension, with very little loss of information. In the next section, we will dive into the nuts and bolts of machine learning in Python, by introducing the Scikit Learn machine learning library.\n",
"\n",
"(ml-core-addtl-resources)=\n",
"### Additional resources\n",
"\n",
"If you are interested in diving deeper into the distinction between prediction and explanation, we really recommend Leo Breiman's classical paper [\"The two cultures of statistical modeling\"](https://projecteuclid.org/download/pdf_1/euclid.ss/1009213726) {cite}`breiman2001statistical` . Another great paper on this topic is Galit Shmueli's [\"To explain or to predict?\"](https://projecteuclid.org/download/pdfview_1/euclid.ss/1294167961) {cite}`shmueli2010explain`. Finally you can read one of us weighing in on the topic, together with Jake Westfall, in a paper titled [\"Choosing Prediction Over Explanation in Psychology: Lessons From Machine Learning\"](https://talyarkoni.org/pdf/Yarkoni_PPS_2017.pdf) {cite}`yarkoni2017choosing`."
]
}
],
"metadata": {
"jupytext": {
"formats": "ipynb,md:myst",
"text_representation": {
"extension": ".md",
"format_name": "myst",
"format_version": 0.13,
"jupytext_version": "1.11.5"
}
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.12"
},
"source_map": [
15,
20,
152,
157,
164,
172,
185,
187,
197,
200,
205,
215,
244,
250,
295,
299,
308,
312,
336,
342
]
},
"nbformat": 4,
"nbformat_minor": 5
}