SHARE
TWEET

Untitled

a guest Mar 22nd, 2019 71 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {
  2.  "cells": [
  3.   {
  4.    "cell_type": "code",
  5.    "execution_count": 1,
  6.    "metadata": {},
  7.    "outputs": [],
  8.    "source": [
  9.     "%matplotlib inline"
  10.    ]
  11.   },
  12.   {
  13.    "cell_type": "code",
  14.    "execution_count": 2,
  15.    "metadata": {},
  16.    "outputs": [],
  17.    "source": [
  18.     "import numpy as np\n",
  19.     "\n",
  20.     "import matplotlib.pyplot as plt\n",
  21.     "\n",
  22.     "from sklearn.model_selection import StratifiedShuffleSplit\n",
  23.     "from sklearn.datasets import load_iris\n",
  24.     "from matplotlib.patches import Patch"
  25.    ]
  26.   },
  27.   {
  28.    "cell_type": "code",
  29.    "execution_count": 3,
  30.    "metadata": {},
  31.    "outputs": [],
  32.    "source": [
  33.     "plt.style.use('seaborn-colorblind')"
  34.    ]
  35.   },
  36.   {
  37.    "cell_type": "code",
  38.    "execution_count": 4,
  39.    "metadata": {},
  40.    "outputs": [],
  41.    "source": [
  42.     "random_state = 42\n",
  43.     "cmap_data = plt.cm.Paired\n",
  44.     "cmap_cv = plt.cm.coolwarm"
  45.    ]
  46.   },
  47.   {
  48.    "cell_type": "code",
  49.    "execution_count": 5,
  50.    "metadata": {},
  51.    "outputs": [],
  52.    "source": [
  53.     "X, y = load_iris(return_X_y=True)"
  54.    ]
  55.   },
  56.   {
  57.    "cell_type": "code",
  58.    "execution_count": 6,
  59.    "metadata": {},
  60.    "outputs": [
  61.     {
  62.      "data": {
  63.       "text/plain": [
  64.        "(150, 4)"
  65.       ]
  66.      },
  67.      "execution_count": 6,
  68.      "metadata": {},
  69.      "output_type": "execute_result"
  70.     }
  71.    ],
  72.    "source": [
  73.     "X.shape"
  74.    ]
  75.   },
  76.   {
  77.    "cell_type": "code",
  78.    "execution_count": 7,
  79.    "metadata": {},
  80.    "outputs": [
  81.     {
  82.      "data": {
  83.       "text/plain": [
  84.        "(150,)"
  85.       ]
  86.      },
  87.      "execution_count": 7,
  88.      "metadata": {},
  89.      "output_type": "execute_result"
  90.     }
  91.    ],
  92.    "source": [
  93.     "y.shape"
  94.    ]
  95.   },
  96.   {
  97.    "cell_type": "code",
  98.    "execution_count": 8,
  99.    "metadata": {},
  100.    "outputs": [],
  101.    "source": [
  102.     "def plot_cv_indices(X, y, cv, ax=None):\n",
  103.     "    \"\"\"Create a sample plot for indices of a cross-validation object.\"\"\"\n",
  104.     "\n",
  105.     "    num_samples = len(X)\n",
  106.     "\n",
  107.     "    # Generate the training/testing visualizations for each CV split\n",
  108.     "    for i, partition_inds in enumerate(cv.split(X, y)):\n",
  109.     "\n",
  110.     "        # Fill in indices with the training/test groups\n",
  111.     "        indices = np.empty_like(y)\n",
  112.     "\n",
  113.     "        for j, ind in enumerate(partition_inds):\n",
  114.     "\n",
  115.     "            indices[ind] = j\n",
  116.     "\n",
  117.     "            # Visualize the results\n",
  118.     "            ax.scatter(range(len(indices)), [i + 0.5] * len(indices),\n",
  119.     "                       c=indices, marker='_', lw=10, cmap=cmap_cv)\n",
  120.     "#                        vmin=-0.2, vmax=1.2)\n",
  121.     "\n",
  122.     "    # Plot the data classes and groups at the end\n",
  123.     "    ax.scatter(range(num_samples), [i + 1.5] * num_samples,\n",
  124.     "               c=y, marker='_', lw=10, cmap=cmap_data)\n",
  125.     "\n",
  126.     "    n_splits = i + 1\n",
  127.     "\n",
  128.     "    # Formatting\n",
  129.     "\n",
  130.     "    yticklabels = list(range(n_splits))\n",
  131.     "    yticklabels.append('class')\n",
  132.     "\n",
  133.     "    ax.set(yticks=np.arange(n_splits+1) + 0.5, yticklabels=yticklabels,\n",
  134.     "           xlabel='Sample index', ylabel=\"CV iteration\",\n",
  135.     "           ylim=[n_splits + 1.2, -0.2], xlim=[0, num_samples])\n",
  136.     "    ax.set_title('{}'.format(type(cv).__name__), fontsize=15)\n",
  137.     "\n",
  138.     "    return ax"
  139.    ]
  140.   },
  141.   {
  142.    "cell_type": "code",
  143.    "execution_count": 9,
  144.    "metadata": {},
  145.    "outputs": [
  146.     {
  147.      "data": {
  148.       "text/plain": [
  149.        "StratifiedShuffleSplit(n_splits=1, random_state=42, test_size=0.2,\n",
  150.        "            train_size=None)"
  151.       ]
  152.      },
  153.      "execution_count": 9,
  154.      "metadata": {},
  155.      "output_type": "execute_result"
  156.     }
  157.    ],
  158.    "source": [
  159.     "sss = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=random_state)\n",
  160.     "sss"
  161.    ]
  162.   },
  163.   {
  164.    "cell_type": "code",
  165.    "execution_count": 10,
  166.    "metadata": {},
  167.    "outputs": [
  168.     {
  169.      "data": {
  170.       "text/plain": [
  171.        "1"
  172.       ]
  173.      },
  174.      "execution_count": 10,
  175.      "metadata": {},
  176.      "output_type": "execute_result"
  177.     }
  178.    ],
  179.    "source": [
  180.     "sss.get_n_splits(X, y)"
  181.    ]
  182.   },
  183.   {
  184.    "cell_type": "code",
  185.    "execution_count": 11,
  186.    "metadata": {},
  187.    "outputs": [
  188.     {
  189.      "data": {
  190.       "text/plain": [
  191.        "(array([  8, 106,  76,   9,  89, 146,  94, 133, 135, 117, 105,  78,  60,\n",
  192.        "         67,  92,  29,  19, 108, 137,  31,  72,  46, 131,  25,  81, 103,\n",
  193.        "        111,  26, 121,  40,  21,  71,  91,  15, 139, 148,  79,  59, 144,\n",
  194.        "         70,   6,  50,  16, 130,   1,  17, 101,  35,  41,  12,  45,  64,\n",
  195.        "        100,  55,   0, 149,  99, 136,  47, 142,  36,  53, 113,  24,  83,\n",
  196.        "         90, 122,  66,  54, 115,  39,  23,   4, 119,  82, 129,  80, 145,\n",
  197.        "        123,  85,  34, 114,  68,  43, 120,  32, 109,  98,  86,  30,  97,\n",
  198.        "        110,  44,  13, 124, 118, 112,  87, 126,   5, 143,  96, 125, 102,\n",
  199.        "         48,  74,  73,  95,  88,  65,  27, 128,  62,  61,  11,  37,   2,\n",
  200.        "         33,  52,   3]),\n",
  201.        " array([ 38, 127,  57,  93,  42,  56,  22,  20, 147,  84, 107, 141, 104,\n",
  202.        "         51,   7,  49,  14,  69,  63, 138,  10, 140,  58, 134, 132,  77,\n",
  203.        "         75,  18, 116,  28]))"
  204.       ]
  205.      },
  206.      "execution_count": 11,
  207.      "metadata": {},
  208.      "output_type": "execute_result"
  209.     }
  210.    ],
  211.    "source": [
  212.     "train_index, test_index = next(sss.split(X, y))\n",
  213.     "train_index, test_index"
  214.    ]
  215.   },
  216.   {
  217.    "cell_type": "code",
  218.    "execution_count": 12,
  219.    "metadata": {},
  220.    "outputs": [
  221.     {
  222.      "data": {
  223.       "image/png": "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\n",
  224.       "text/plain": [
  225.        "<Figure size 720x72 with 1 Axes>"
  226.       ]
  227.      },
  228.      "metadata": {
  229.       "needs_background": "light"
  230.      },
  231.      "output_type": "display_data"
  232.     }
  233.    ],
  234.    "source": [
  235.     "fig, ax = plt.subplots(figsize=(10, 1))\n",
  236.     "\n",
  237.     "plot_cv_indices(X, y, sss, ax=ax)\n",
  238.     "\n",
  239.     "plt.show()"
  240.    ]
  241.   },
  242.   {
  243.    "cell_type": "markdown",
  244.    "metadata": {},
  245.    "source": [
  246.     "#### Train-test Proportion\n",
  247.     "\n",
  248.     "Verify that the requested train-test proportion has been satisfied:"
  249.    ]
  250.   },
  251.   {
  252.    "cell_type": "code",
  253.    "execution_count": 13,
  254.    "metadata": {},
  255.    "outputs": [
  256.     {
  257.      "data": {
  258.       "text/plain": [
  259.        "(120, 4)"
  260.       ]
  261.      },
  262.      "execution_count": 13,
  263.      "metadata": {},
  264.      "output_type": "execute_result"
  265.     }
  266.    ],
  267.    "source": [
  268.     "X[train_index].shape"
  269.    ]
  270.   },
  271.   {
  272.    "cell_type": "code",
  273.    "execution_count": 14,
  274.    "metadata": {},
  275.    "outputs": [
  276.     {
  277.      "data": {
  278.       "text/plain": [
  279.        "(30, 4)"
  280.       ]
  281.      },
  282.      "execution_count": 14,
  283.      "metadata": {},
  284.      "output_type": "execute_result"
  285.     }
  286.    ],
  287.    "source": [
  288.     "X[test_index].shape"
  289.    ]
  290.   },
  291.   {
  292.    "cell_type": "code",
  293.    "execution_count": 15,
  294.    "metadata": {},
  295.    "outputs": [
  296.     {
  297.      "data": {
  298.       "text/plain": [
  299.        "0.2"
  300.       ]
  301.      },
  302.      "execution_count": 15,
  303.      "metadata": {},
  304.      "output_type": "execute_result"
  305.     }
  306.    ],
  307.    "source": [
  308.     "len(test_index) / len(np.hstack((train_index, test_index)))"
  309.    ]
  310.   },
  311.   {
  312.    "cell_type": "markdown",
  313.    "metadata": {},
  314.    "source": [
  315.     "#### Stratified\n",
  316.     "\n",
  317.     "Verify that the proportion of class labels are stratified across splits."
  318.    ]
  319.   },
  320.   {
  321.    "cell_type": "code",
  322.    "execution_count": 16,
  323.    "metadata": {},
  324.    "outputs": [
  325.     {
  326.      "data": {
  327.       "text/plain": [
  328.        "(array([0, 1, 2]), array([40, 40, 40]))"
  329.       ]
  330.      },
  331.      "execution_count": 16,
  332.      "metadata": {},
  333.      "output_type": "execute_result"
  334.     }
  335.    ],
  336.    "source": [
  337.     "np.unique(y[train_index], return_counts=True)"
  338.    ]
  339.   },
  340.   {
  341.    "cell_type": "code",
  342.    "execution_count": 17,
  343.    "metadata": {
  344.     "scrolled": true
  345.    },
  346.    "outputs": [
  347.     {
  348.      "data": {
  349.       "text/plain": [
  350.        "(array([0, 1, 2]), array([10, 10, 10]))"
  351.       ]
  352.      },
  353.      "execution_count": 17,
  354.      "metadata": {},
  355.      "output_type": "execute_result"
  356.     }
  357.    ],
  358.    "source": [
  359.     "np.unique(y[test_index], return_counts=True)"
  360.    ]
  361.   },
  362.   {
  363.    "cell_type": "markdown",
  364.    "metadata": {},
  365.    "source": [
  366.     "### Visualization\n",
  367.     "\n",
  368.     "Visualize for a large number of CV splits (10)."
  369.    ]
  370.   },
  371.   {
  372.    "cell_type": "code",
  373.    "execution_count": 18,
  374.    "metadata": {},
  375.    "outputs": [
  376.     {
  377.      "data": {
  378.       "text/plain": [
  379.        "StratifiedShuffleSplit(n_splits=10, random_state=42, test_size=0.1,\n",
  380.        "            train_size=None)"
  381.       ]
  382.      },
  383.      "execution_count": 18,
  384.      "metadata": {},
  385.      "output_type": "execute_result"
  386.     }
  387.    ],
  388.    "source": [
  389.     "sss = StratifiedShuffleSplit(test_size=0.1, random_state=random_state)\n",
  390.     "sss"
  391.    ]
  392.   },
  393.   {
  394.    "cell_type": "code",
  395.    "execution_count": 19,
  396.    "metadata": {},
  397.    "outputs": [
  398.     {
  399.      "data": {
  400.       "image/png": "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\n",
  401.       "text/plain": [
  402.        "<Figure size 720x360 with 1 Axes>"
  403.       ]
  404.      },
  405.      "metadata": {
  406.       "needs_background": "light"
  407.      },
  408.      "output_type": "display_data"
  409.     }
  410.    ],
  411.    "source": [
  412.     "fig, ax = plt.subplots(figsize=(10, 5))\n",
  413.     "\n",
  414.     "plot_cv_indices(X, y, sss, ax=ax)\n",
  415.     "\n",
  416.     "plt.show()"
  417.    ]
  418.   },
  419.   {
  420.    "cell_type": "markdown",
  421.    "metadata": {},
  422.    "source": [
  423.     "## Generalizing to Multiple Partitions"
  424.    ]
  425.   },
  426.   {
  427.    "cell_type": "code",
  428.    "execution_count": 20,
  429.    "metadata": {},
  430.    "outputs": [],
  431.    "source": [
  432.     "class RecursiveStratifiedShuffleSplit(StratifiedShuffleSplit):\n",
  433.     "    \n",
  434.     "    def __init__(self, n_splits=10, partition_sizes=None, random_state=None):\n",
  435.     "\n",
  436.     "        if partition_sizes is None:\n",
  437.     "\n",
  438.     "            partition_sizes = ['default']\n",
  439.     "\n",
  440.     "        head_size, *tail_sizes = partition_sizes\n",
  441.     "\n",
  442.     "        if tail_sizes:\n",
  443.     "\n",
  444.     "            self.rsss_tail = RecursiveStratifiedShuffleSplit(n_splits=1,\n",
  445.     "                                                             partition_sizes=tail_sizes,\n",
  446.     "                                                             random_state=random_state)\n",
  447.     "        else:\n",
  448.     "\n",
  449.     "            self.rsss_tail = None\n",
  450.     "\n",
  451.     "        super(RecursiveStratifiedShuffleSplit, self).__init__(n_splits=n_splits, \n",
  452.     "                                                              test_size=head_size, \n",
  453.     "                                                              random_state=random_state)    \n",
  454.     "\n",
  455.     "    def split(self, X, y, groups=None):\n",
  456.     "        \n",
  457.     "        # iterate over `n_splits` splits\n",
  458.     "        for a_ind, b_ind in super(RecursiveStratifiedShuffleSplit, self).split(X, y):\n",
  459.     "\n",
  460.     "            inds = [a_ind]\n",
  461.     "\n",
  462.     "            if self.rsss_tail is None:\n",
  463.     "\n",
  464.     "                inds.append(b_ind)\n",
  465.     "\n",
  466.     "            else:\n",
  467.     "\n",
  468.     "                # generator yields only `n_splits=1` split by definition\n",
  469.     "                tail_inds = next(self.rsss_tail.split(X[b_ind], y[b_ind]))\n",
  470.     "\n",
  471.     "                # iterate through `len(partition_sizes) + 1` indices\n",
  472.     "                for ind in tail_inds:\n",
  473.     "\n",
  474.     "                    inds.append(b_ind[ind])\n",
  475.     "  \n",
  476.     "            yield tuple(inds)"
  477.    ]
  478.   },
  479.   {
  480.    "cell_type": "code",
  481.    "execution_count": 21,
  482.    "metadata": {},
  483.    "outputs": [],
  484.    "source": [
  485.     "rsss = RecursiveStratifiedShuffleSplit(n_splits=1, partition_sizes=[0.2, 0.5], random_state=random_state)"
  486.    ]
  487.   },
  488.   {
  489.    "cell_type": "code",
  490.    "execution_count": 22,
  491.    "metadata": {},
  492.    "outputs": [
  493.     {
  494.      "data": {
  495.       "text/plain": [
  496.        "1"
  497.       ]
  498.      },
  499.      "execution_count": 22,
  500.      "metadata": {},
  501.      "output_type": "execute_result"
  502.     }
  503.    ],
  504.    "source": [
  505.     "rsss.get_n_splits()"
  506.    ]
  507.   },
  508.   {
  509.    "cell_type": "code",
  510.    "execution_count": 23,
  511.    "metadata": {},
  512.    "outputs": [
  513.     {
  514.      "data": {
  515.       "text/plain": [
  516.        "(array([  8, 106,  76,   9,  89, 146,  94, 133, 135, 117, 105,  78,  60,\n",
  517.        "         67,  92,  29,  19, 108, 137,  31,  72,  46, 131,  25,  81, 103,\n",
  518.        "        111,  26, 121,  40,  21,  71,  91,  15, 139, 148,  79,  59, 144,\n",
  519.        "         70,   6,  50,  16, 130,   1,  17, 101,  35,  41,  12,  45,  64,\n",
  520.        "        100,  55,   0, 149,  99, 136,  47, 142,  36,  53, 113,  24,  83,\n",
  521.        "         90, 122,  66,  54, 115,  39,  23,   4, 119,  82, 129,  80, 145,\n",
  522.        "        123,  85,  34, 114,  68,  43, 120,  32, 109,  98,  86,  30,  97,\n",
  523.        "        110,  44,  13, 124, 118, 112,  87, 126,   5, 143,  96, 125, 102,\n",
  524.        "         48,  74,  73,  95,  88,  65,  27, 128,  62,  61,  11,  37,   2,\n",
  525.        "         33,  52,   3]),\n",
  526.        " array([ 42, 127,  10, 116, 140,  77,  93,  38,  49,  18,  69, 132,  57,\n",
  527.        "         84, 107]),\n",
  528.        " array([  7,  75, 147,  22, 141, 138,  51,  56, 134,  20,  28, 104,  63,\n",
  529.        "         14,  58]))"
  530.       ]
  531.      },
  532.      "execution_count": 23,
  533.      "metadata": {},
  534.      "output_type": "execute_result"
  535.     }
  536.    ],
  537.    "source": [
  538.     "train_index, val_index, test_index = next(rsss.split(X, y))\n",
  539.     "train_index, val_index, test_index"
  540.    ]
  541.   },
  542.   {
  543.    "cell_type": "code",
  544.    "execution_count": 24,
  545.    "metadata": {},
  546.    "outputs": [
  547.     {
  548.      "data": {
  549.       "image/png": "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\n",
  550.       "text/plain": [
  551.        "<Figure size 720x72 with 1 Axes>"
  552.       ]
  553.      },
  554.      "metadata": {
  555.       "needs_background": "light"
  556.      },
  557.      "output_type": "display_data"
  558.     }
  559.    ],
  560.    "source": [
  561.     "fig, ax = plt.subplots(figsize=(10, 1))\n",
  562.     "\n",
  563.     "plot_cv_indices(X, y, rsss, ax=ax)\n",
  564.     "\n",
  565.     "plt.show()"
  566.    ]
  567.   },
  568.   {
  569.    "cell_type": "markdown",
  570.    "metadata": {},
  571.    "source": [
  572.     "#### Train-val-test Proportion\n",
  573.     "\n",
  574.     "Verify that the requested train-val-test proportions have been satisfied:"
  575.    ]
  576.   },
  577.   {
  578.    "cell_type": "code",
  579.    "execution_count": 25,
  580.    "metadata": {},
  581.    "outputs": [
  582.     {
  583.      "data": {
  584.       "text/plain": [
  585.        "(120, 4)"
  586.       ]
  587.      },
  588.      "execution_count": 25,
  589.      "metadata": {},
  590.      "output_type": "execute_result"
  591.     }
  592.    ],
  593.    "source": [
  594.     "X[train_index].shape"
  595.    ]
  596.   },
  597.   {
  598.    "cell_type": "code",
  599.    "execution_count": 26,
  600.    "metadata": {},
  601.    "outputs": [
  602.     {
  603.      "data": {
  604.       "text/plain": [
  605.        "(15, 4)"
  606.       ]
  607.      },
  608.      "execution_count": 26,
  609.      "metadata": {},
  610.      "output_type": "execute_result"
  611.     }
  612.    ],
  613.    "source": [
  614.     "X[val_index].shape"
  615.    ]
  616.   },
  617.   {
  618.    "cell_type": "code",
  619.    "execution_count": 27,
  620.    "metadata": {},
  621.    "outputs": [
  622.     {
  623.      "data": {
  624.       "text/plain": [
  625.        "(15, 4)"
  626.       ]
  627.      },
  628.      "execution_count": 27,
  629.      "metadata": {},
  630.      "output_type": "execute_result"
  631.     }
  632.    ],
  633.    "source": [
  634.     "X[test_index].shape"
  635.    ]
  636.   },
  637.   {
  638.    "cell_type": "code",
  639.    "execution_count": 28,
  640.    "metadata": {},
  641.    "outputs": [
  642.     {
  643.      "data": {
  644.       "text/plain": [
  645.        "0.2"
  646.       ]
  647.      },
  648.      "execution_count": 28,
  649.      "metadata": {},
  650.      "output_type": "execute_result"
  651.     }
  652.    ],
  653.    "source": [
  654.     "len(np.hstack((val_index, test_index))) / len(np.hstack((train_index, val_index, test_index)))"
  655.    ]
  656.   },
  657.   {
  658.    "cell_type": "code",
  659.    "execution_count": 29,
  660.    "metadata": {},
  661.    "outputs": [
  662.     {
  663.      "data": {
  664.       "text/plain": [
  665.        "0.5"
  666.       ]
  667.      },
  668.      "execution_count": 29,
  669.      "metadata": {},
  670.      "output_type": "execute_result"
  671.     }
  672.    ],
  673.    "source": [
  674.     "len(test_index) / len(np.hstack((val_index, test_index)))"
  675.    ]
  676.   },
  677.   {
  678.    "cell_type": "markdown",
  679.    "metadata": {},
  680.    "source": [
  681.     "#### Stratified\n",
  682.     "\n",
  683.     "Verify that the proportion of class labels are stratified across splits."
  684.    ]
  685.   },
  686.   {
  687.    "cell_type": "code",
  688.    "execution_count": 30,
  689.    "metadata": {},
  690.    "outputs": [
  691.     {
  692.      "data": {
  693.       "text/plain": [
  694.        "(array([0, 1, 2]), array([40, 40, 40]))"
  695.       ]
  696.      },
  697.      "execution_count": 30,
  698.      "metadata": {},
  699.      "output_type": "execute_result"
  700.     }
  701.    ],
  702.    "source": [
  703.     "np.unique(y[train_index], return_counts=True)"
  704.    ]
  705.   },
  706.   {
  707.    "cell_type": "code",
  708.    "execution_count": 31,
  709.    "metadata": {},
  710.    "outputs": [
  711.     {
  712.      "data": {
  713.       "text/plain": [
  714.        "(array([0, 1, 2]), array([5, 5, 5]))"
  715.       ]
  716.      },
  717.      "execution_count": 31,
  718.      "metadata": {},
  719.      "output_type": "execute_result"
  720.     }
  721.    ],
  722.    "source": [
  723.     "np.unique(y[val_index], return_counts=True)"
  724.    ]
  725.   },
  726.   {
  727.    "cell_type": "code",
  728.    "execution_count": 32,
  729.    "metadata": {
  730.     "scrolled": true
  731.    },
  732.    "outputs": [
  733.     {
  734.      "data": {
  735.       "text/plain": [
  736.        "(array([0, 1, 2]), array([5, 5, 5]))"
  737.       ]
  738.      },
  739.      "execution_count": 32,
  740.      "metadata": {},
  741.      "output_type": "execute_result"
  742.     }
  743.    ],
  744.    "source": [
  745.     "np.unique(y[test_index], return_counts=True)"
  746.    ]
  747.   },
  748.   {
  749.    "cell_type": "markdown",
  750.    "metadata": {},
  751.    "source": [
  752.     "### Visualization\n",
  753.     "\n",
  754.     "Visualize for a large number of CV splits (10). Each partition should satisfy the properties we tested above."
  755.    ]
  756.   },
  757.   {
  758.    "cell_type": "code",
  759.    "execution_count": 33,
  760.    "metadata": {},
  761.    "outputs": [
  762.     {
  763.      "data": {
  764.       "text/plain": [
  765.        "RecursiveStratifiedShuffleSplit(n_splits=10, partition_sizes=None,\n",
  766.        "                random_state=42)"
  767.       ]
  768.      },
  769.      "execution_count": 33,
  770.      "metadata": {},
  771.      "output_type": "execute_result"
  772.     }
  773.    ],
  774.    "source": [
  775.     "rsss = RecursiveStratifiedShuffleSplit(partition_sizes=[0.2, 0.5], random_state=random_state)\n",
  776.     "rsss"
  777.    ]
  778.   },
  779.   {
  780.    "cell_type": "code",
  781.    "execution_count": 34,
  782.    "metadata": {},
  783.    "outputs": [
  784.     {
  785.      "data": {
  786.       "image/png": "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\n",
  787.       "text/plain": [
  788.        "<Figure size 720x360 with 1 Axes>"
  789.       ]
  790.      },
  791.      "metadata": {
  792.       "needs_background": "light"
  793.      },
  794.      "output_type": "display_data"
  795.     }
  796.    ],
  797.    "source": [
  798.     "fig, ax = plt.subplots(figsize=(10, 5))\n",
  799.     "\n",
  800.     "plot_cv_indices(X, y, rsss, ax=ax)\n",
  801.     "\n",
  802.     "plt.show()"
  803.    ]
  804.   },
  805.   {
  806.    "cell_type": "markdown",
  807.    "metadata": {},
  808.    "source": [
  809.     "### Even more partitions\n",
  810.     "\n",
  811.     "We can approximately half the dataset, and further approximately half one of the remaining halves, and so on until this process can no longer be repeated."
  812.    ]
  813.   },
  814.   {
  815.    "cell_type": "code",
  816.    "execution_count": 35,
  817.    "metadata": {},
  818.    "outputs": [
  819.     {
  820.      "data": {
  821.       "text/plain": [
  822.        "RecursiveStratifiedShuffleSplit(n_splits=10, partition_sizes=None,\n",
  823.        "                random_state=42)"
  824.       ]
  825.      },
  826.      "execution_count": 35,
  827.      "metadata": {},
  828.      "output_type": "execute_result"
  829.     }
  830.    ],
  831.    "source": [
  832.     "rsss = RecursiveStratifiedShuffleSplit(partition_sizes=[0.5, 0.5, 0.5, 0.5], random_state=random_state)\n",
  833.     "rsss"
  834.    ]
  835.   },
  836.   {
  837.    "cell_type": "code",
  838.    "execution_count": 36,
  839.    "metadata": {},
  840.    "outputs": [
  841.     {
  842.      "data": {
  843.       "text/plain": [
  844.        "[75, 37, 19, 9, 10]"
  845.       ]
  846.      },
  847.      "execution_count": 36,
  848.      "metadata": {},
  849.      "output_type": "execute_result"
  850.     }
  851.    ],
  852.    "source": [
  853.     "[len(ind) for ind in next(rsss.split(X, y))]"
  854.    ]
  855.   },
  856.   {
  857.    "cell_type": "code",
  858.    "execution_count": 37,
  859.    "metadata": {},
  860.    "outputs": [
  861.     {
  862.      "data": {
  863.       "image/png": "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\n",
  864.       "text/plain": [
  865.        "<Figure size 720x360 with 1 Axes>"
  866.       ]
  867.      },
  868.      "metadata": {
  869.       "needs_background": "light"
  870.      },
  871.      "output_type": "display_data"
  872.     }
  873.    ],
  874.    "source": [
  875.     "fig, ax = plt.subplots(figsize=(10, 5))\n",
  876.     "\n",
  877.     "plot_cv_indices(X, y, rsss, ax=ax)\n",
  878.     "\n",
  879.     "plt.show()"
  880.    ]
  881.   }
  882.  ],
  883.  "metadata": {
  884.   "kernelspec": {
  885.    "display_name": "Python 3",
  886.    "language": "python",
  887.    "name": "python3"
  888.   },
  889.   "language_info": {
  890.    "codemirror_mode": {
  891.     "name": "ipython",
  892.     "version": 3
  893.    },
  894.    "file_extension": ".py",
  895.    "mimetype": "text/x-python",
  896.    "name": "python",
  897.    "nbconvert_exporter": "python",
  898.    "pygments_lexer": "ipython3",
  899.    "version": "3.5.2"
  900.   }
  901.  },
  902.  "nbformat": 4,
  903.  "nbformat_minor": 2
  904. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top