## Exemple de Preprocessing Simple (Encoding + Normalisation) ```python import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler, OrdinalEncoder ``` ## Data ```python df = sns.load_dataset('diamonds') df.head() ``` <div> <style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>carat</th> <th>cut</th> <th>color</th> <th>clarity</th> <th>depth</th> <th>table</th> <th>price</th> <th>x</th> <th>y</th> <th>z</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>0.23</td> <td>Ideal</td> <td>E</td> <td>SI2</td> <td>61.5</td> <td>55.0</td> <td>326</td> <td>3.95</td> <td>3.98</td> <td>2.43</td> </tr> <tr> <th>1</th> <td>0.21</td> <td>Premium</td> <td>E</td> <td>SI1</td> <td>59.8</td> <td>61.0</td> <td>326</td> <td>3.89</td> <td>3.84</td> <td>2.31</td> </tr> <tr> <th>2</th> <td>0.23</td> <td>Good</td> <td>E</td> <td>VS1</td> <td>56.9</td> <td>65.0</td> <td>327</td> <td>4.05</td> <td>4.07</td> <td>2.31</td> </tr> <tr> <th>3</th> <td>0.29</td> <td>Premium</td> <td>I</td> <td>VS2</td> <td>62.4</td> <td>58.0</td> <td>334</td> <td>4.20</td> <td>4.23</td> <td>2.63</td> </tr> <tr> <th>4</th> <td>0.31</td> <td>Good</td> <td>J</td> <td>SI2</td> <td>63.3</td> <td>58.0</td> <td>335</td> <td>4.34</td> <td>4.35</td> <td>2.75</td> </tr> </tbody> </table> </div> ## Train Test Split ```python train_set, test_set = train_test_split(df, test_size=0.2, random_state=0) ``` ```python print("train_set:", train_set.shape) print("test_set:", test_set.shape) ``` train_set: (43152, 10) test_set: (10788, 10) ## Encoding ```python cut_order = ['Fair', 'Good', 'Very Good', 'Premium', 'Ideal'] clarity_order = ['I1', 'SI2', 'SI1', 'VS2', 'VS1', 'VVS2', 'VVS1', 'IF'] color_order = ['E', 'I', 'J', 'H', 'F', 'G', 'D'] encoder = OrdinalEncoder(categories=[cut_order, color_order, clarity_order]) encoding_result = encoder.fit_transform(train_set[['cut', 'color', 'clarity']]) encoding_result ``` array([[4., 5., 4.], [4., 5., 3.], [4., 0., 5.], ..., [3., 1., 4.], [4., 5., 7.], [4., 4., 1.]]) ```python train_set[['cut', 'color', 'clarity']] = encoding_result train_set ``` <div> <style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>carat</th> <th>cut</th> <th>color</th> <th>clarity</th> <th>depth</th> <th>table</th> <th>price</th> <th>x</th> <th>y</th> <th>z</th> </tr> </thead> <tbody> <tr> <th>26250</th> <td>1.63</td> <td>4.0</td> <td>5.0</td> <td>4.0</td> <td>61.7</td> <td>55.0</td> <td>15697</td> <td>7.56</td> <td>7.60</td> <td>4.68</td> </tr> <tr> <th>31510</th> <td>0.34</td> <td>4.0</td> <td>5.0</td> <td>3.0</td> <td>62.2</td> <td>57.0</td> <td>765</td> <td>4.47</td> <td>4.44</td> <td>2.77</td> </tr> <tr> <th>40698</th> <td>0.40</td> <td>4.0</td> <td>0.0</td> <td>5.0</td> <td>61.7</td> <td>56.0</td> <td>1158</td> <td>4.73</td> <td>4.77</td> <td>2.93</td> </tr> <tr> <th>42634</th> <td>0.58</td> <td>3.0</td> <td>3.0</td> <td>2.0</td> <td>62.1</td> <td>55.0</td> <td>1332</td> <td>5.38</td> <td>5.35</td> <td>3.33</td> </tr> <tr> <th>47714</th> <td>0.63</td> <td>2.0</td> <td>6.0</td> <td>2.0</td> <td>62.8</td> <td>57.0</td> <td>1885</td> <td>5.40</td> <td>5.46</td> <td>3.41</td> </tr> <tr> <th>...</th> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> </tr> <tr> <th>45891</th> <td>0.52</td> <td>3.0</td> <td>4.0</td> <td>3.0</td> <td>60.7</td> <td>59.0</td> <td>1720</td> <td>5.18</td> <td>5.14</td> <td>3.13</td> </tr> <tr> <th>52416</th> <td>0.70</td> <td>1.0</td> <td>6.0</td> <td>2.0</td> <td>63.6</td> <td>60.0</td> <td>2512</td> <td>5.59</td> <td>5.51</td> <td>3.51</td> </tr> <tr> <th>42613</th> <td>0.32</td> <td>3.0</td> <td>1.0</td> <td>4.0</td> <td>61.3</td> <td>58.0</td> <td>505</td> <td>4.35</td> <td>4.39</td> <td>2.68</td> </tr> <tr> <th>43567</th> <td>0.41</td> <td>4.0</td> <td>5.0</td> <td>7.0</td> <td>61.0</td> <td>57.0</td> <td>1431</td> <td>4.81</td> <td>4.79</td> <td>2.93</td> </tr> <tr> <th>2732</th> <td>0.91</td> <td>4.0</td> <td>4.0</td> <td>1.0</td> <td>61.1</td> <td>55.0</td> <td>3246</td> <td>6.24</td> <td>6.19</td> <td>3.80</td> </tr> </tbody> </table> <p>43152 rows × 10 columns</p> </div> ## Normalisation ```python normalizer = MinMaxScaler() train_set = normalizer.fit_transform(train_set) train_set ``` array([[0.2972973 , 1. , 0.83333333, ..., 0.70391061, 0.12903226, 0.14716981], [0.02910603, 1. , 0.83333333, ..., 0.41620112, 0.075382 , 0.08710692], [0.04158004, 1. , 0. , ..., 0.44040968, 0.08098472, 0.09213836], ..., [0.02494802, 0.75 , 0.16666667, ..., 0.40502793, 0.07453311, 0.08427673], [0.04365904, 1. , 0.83333333, ..., 0.44785847, 0.08132428, 0.09213836], [0.14760915, 1. , 0.66666667, ..., 0.58100559, 0.10509338, 0.11949686]]) ```python pd.DataFrame(train_set, columns=df.columns) ``` <div> <style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>carat</th> <th>cut</th> <th>color</th> <th>clarity</th> <th>depth</th> <th>table</th> <th>price</th> <th>x</th> <th>y</th> <th>z</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>0.297297</td> <td>1.00</td> <td>0.833333</td> <td>0.571429</td> <td>0.519444</td> <td>0.333333</td> <td>0.830990</td> <td>0.703911</td> <td>0.129032</td> <td>0.147170</td> </tr> <tr> <th>1</th> <td>0.029106</td> <td>1.00</td> <td>0.833333</td> <td>0.428571</td> <td>0.533333</td> <td>0.388889</td> <td>0.023681</td> <td>0.416201</td> <td>0.075382</td> <td>0.087107</td> </tr> <tr> <th>2</th> <td>0.041580</td> <td>1.00</td> <td>0.000000</td> <td>0.714286</td> <td>0.519444</td> <td>0.361111</td> <td>0.044929</td> <td>0.440410</td> <td>0.080985</td> <td>0.092138</td> </tr> <tr> <th>3</th> <td>0.079002</td> <td>0.75</td> <td>0.500000</td> <td>0.285714</td> <td>0.530556</td> <td>0.333333</td> <td>0.054336</td> <td>0.500931</td> <td>0.090832</td> <td>0.104717</td> </tr> <tr> <th>4</th> <td>0.089397</td> <td>0.50</td> <td>1.000000</td> <td>0.285714</td> <td>0.550000</td> <td>0.388889</td> <td>0.084234</td> <td>0.502793</td> <td>0.092699</td> <td>0.107233</td> </tr> <tr> <th>...</th> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> </tr> <tr> <th>43147</th> <td>0.066528</td> <td>0.75</td> <td>0.666667</td> <td>0.428571</td> <td>0.491667</td> <td>0.444444</td> <td>0.075314</td> <td>0.482309</td> <td>0.087267</td> <td>0.098428</td> </tr> <tr> <th>43148</th> <td>0.103950</td> <td>0.25</td> <td>1.000000</td> <td>0.285714</td> <td>0.572222</td> <td>0.472222</td> <td>0.118134</td> <td>0.520484</td> <td>0.093548</td> <td>0.110377</td> </tr> <tr> <th>43149</th> <td>0.024948</td> <td>0.75</td> <td>0.166667</td> <td>0.571429</td> <td>0.508333</td> <td>0.416667</td> <td>0.009624</td> <td>0.405028</td> <td>0.074533</td> <td>0.084277</td> </tr> <tr> <th>43150</th> <td>0.043659</td> <td>1.00</td> <td>0.833333</td> <td>1.000000</td> <td>0.500000</td> <td>0.388889</td> <td>0.059689</td> <td>0.447858</td> <td>0.081324</td> <td>0.092138</td> </tr> <tr> <th>43151</th> <td>0.147609</td> <td>1.00</td> <td>0.666667</td> <td>0.142857</td> <td>0.502778</td> <td>0.333333</td> <td>0.157818</td> <td>0.581006</td> <td>0.105093</td> <td>0.119497</td> </tr> </tbody> </table> <p>43152 rows × 10 columns</p> </div> ## Transformation du Test Set ```python encoding_result = encoder.transform(test_set[['cut', 'color', 'clarity']]) #attention surtout pas fit_transform !! test_set[['cut', 'color', 'clarity']] = encoding_result test_set = normalizer.transform(test_set) pd.DataFrame(test_set, columns=df.columns) ``` <div> <style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>carat</th> <th>cut</th> <th>color</th> <th>clarity</th> <th>depth</th> <th>table</th> <th>price</th> <th>x</th> <th>y</th> <th>z</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>0.187110</td> <td>1.00</td> <td>0.500000</td> <td>0.142857</td> <td>0.527778</td> <td>0.333333</td> <td>0.238214</td> <td>0.615456</td> <td>0.112903</td> <td>0.129245</td> </tr> <tr> <th>1</th> <td>0.226611</td> <td>1.00</td> <td>0.500000</td> <td>0.285714</td> <td>0.544444</td> <td>0.361111</td> <td>0.329639</td> <td>0.648045</td> <td>0.117657</td> <td>0.136792</td> </tr> <tr> <th>2</th> <td>0.207900</td> <td>0.75</td> <td>0.166667</td> <td>0.285714</td> <td>0.502778</td> <td>0.416667</td> <td>0.280223</td> <td>0.640596</td> <td>0.115450</td> <td>0.131447</td> </tr> <tr> <th>3</th> <td>0.270270</td> <td>1.00</td> <td>0.666667</td> <td>0.285714</td> <td>0.497222</td> <td>0.361111</td> <td>0.456477</td> <td>0.691806</td> <td>0.124958</td> <td>0.141509</td> </tr> <tr> <th>4</th> <td>0.145530</td> <td>0.50</td> <td>0.666667</td> <td>0.428571</td> <td>0.519444</td> <td>0.388889</td> <td>0.225238</td> <td>0.574488</td> <td>0.105433</td> <td>0.120126</td> </tr> <tr> <th>...</th> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> <td>...</td> </tr> <tr> <th>10783</th> <td>0.066528</td> <td>0.25</td> <td>0.500000</td> <td>0.428571</td> <td>0.572222</td> <td>0.388889</td> <td>0.052011</td> <td>0.470205</td> <td>0.086587</td> <td>0.101572</td> </tr> <tr> <th>10784</th> <td>0.147609</td> <td>0.50</td> <td>0.833333</td> <td>0.142857</td> <td>0.483333</td> <td>0.500000</td> <td>0.168036</td> <td>0.578212</td> <td>0.106621</td> <td>0.118553</td> </tr> <tr> <th>10785</th> <td>0.182952</td> <td>0.50</td> <td>0.666667</td> <td>0.142857</td> <td>0.566667</td> <td>0.333333</td> <td>0.190311</td> <td>0.608007</td> <td>0.110357</td> <td>0.129874</td> </tr> <tr> <th>10786</th> <td>0.170478</td> <td>1.00</td> <td>0.833333</td> <td>0.857143</td> <td>0.513889</td> <td>0.388889</td> <td>0.423929</td> <td>0.599628</td> <td>0.109847</td> <td>0.124843</td> </tr> <tr> <th>10787</th> <td>0.062370</td> <td>0.25</td> <td>0.000000</td> <td>0.714286</td> <td>0.605556</td> <td>0.416667</td> <td>0.085965</td> <td>0.462756</td> <td>0.084890</td> <td>0.101572</td> </tr> </tbody> </table> <p>10788 rows × 10 columns</p> </div> ## Simplifier te tout avec une Pipeline ```python from sklearn.pipeline import Pipeline, make_pipeline ``` ```python df = sns.load_dataset('diamonds') df.head() ``` <div> <style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>carat</th> <th>cut</th> <th>color</th> <th>clarity</th> <th>depth</th> <th>table</th> <th>price</th> <th>x</th> <th>y</th> <th>z</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>0.23</td> <td>Ideal</td> <td>E</td> <td>SI2</td> <td>61.5</td> <td>55.0</td> <td>326</td> <td>3.95</td> <td>3.98</td> <td>2.43</td> </tr> <tr> <th>1</th> <td>0.21</td> <td>Premium</td> <td>E</td> <td>SI1</td> <td>59.8</td> <td>61.0</td> <td>326</td> <td>3.89</td> <td>3.84</td> <td>2.31</td> </tr> <tr> <th>2</th> <td>0.23</td> <td>Good</td> <td>E</td> <td>VS1</td> <td>56.9</td> <td>65.0</td> <td>327</td> <td>4.05</td> <td>4.07</td> <td>2.31</td> </tr> <tr> <th>3</th> <td>0.29</td> <td>Premium</td> <td>I</td> <td>VS2</td> <td>62.4</td> <td>58.0</td> <td>334</td> <td>4.20</td> <td>4.23</td> <td>2.63</td> </tr> <tr> <th>4</th> <td>0.31</td> <td>Good</td> <td>J</td> <td>SI2</td> <td>63.3</td> <td>58.0</td> <td>335</td> <td>4.34</td> <td>4.35</td> <td>2.75</td> </tr> </tbody> </table> </div> ```python train_set, test_set = train_test_split(df, test_size=0.2, random_state=0) ``` ```python # on utilise soit la fonction pipeline : pipeline = make_pipeline(OrdinalEncoder(), MinMaxScaler()) # soit la classe Pipeline : pipeline = Pipeline([('encoder', OrdinalEncoder()), ('scaler', MinMaxScaler())]) ``` ```python pipeline ``` <style>#sk-container-id-7 { /* Definition of color scheme common for light and dark mode */ --sklearn-color-text: black; --sklearn-color-line: gray; /* Definition of color scheme for unfitted estimators */ --sklearn-color-unfitted-level-0: #fff5e6; --sklearn-color-unfitted-level-1: #f6e4d2; --sklearn-color-unfitted-level-2: #ffe0b3; --sklearn-color-unfitted-level-3: chocolate; /* Definition of color scheme for fitted estimators */ --sklearn-color-fitted-level-0: #f0f8ff; --sklearn-color-fitted-level-1: #d4ebff; --sklearn-color-fitted-level-2: #b3dbfd; --sklearn-color-fitted-level-3: cornflowerblue; /* Specific color for light theme */ --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black))); --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white))); --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black))); --sklearn-color-icon: #696969; @media (prefers-color-scheme: dark) { /* Redefinition of color scheme for dark theme */ --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white))); --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111))); --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white))); --sklearn-color-icon: #878787; } } #sk-container-id-7 { color: var(--sklearn-color-text); } #sk-container-id-7 pre { padding: 0; } #sk-container-id-7 input.sk-hidden--visually { border: 0; clip: rect(1px 1px 1px 1px); clip: rect(1px, 1px, 1px, 1px); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } #sk-container-id-7 div.sk-dashed-wrapped { border: 1px dashed var(--sklearn-color-line); margin: 0 0.4em 0.5em 0.4em; box-sizing: border-box; padding-bottom: 0.4em; background-color: var(--sklearn-color-background); } #sk-container-id-7 div.sk-container { /* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */ display: inline-block !important; position: relative; } #sk-container-id-7 div.sk-text-repr-fallback { display: none; } div.sk-parallel-item, div.sk-serial, div.sk-item { /* draw centered vertical line to link estimators */ background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background)); background-size: 2px 100%; background-repeat: no-repeat; background-position: center center; } /* Parallel-specific style estimator block */ #sk-container-id-7 div.sk-parallel-item::after { content: ""; width: 100%; border-bottom: 2px solid var(--sklearn-color-text-on-default-background); flex-grow: 1; } #sk-container-id-7 div.sk-parallel { display: flex; align-items: stretch; justify-content: center; background-color: var(--sklearn-color-background); position: relative; } #sk-container-id-7 div.sk-parallel-item { display: flex; flex-direction: column; } #sk-container-id-7 div.sk-parallel-item:first-child::after { align-self: flex-end; width: 50%; } #sk-container-id-7 div.sk-parallel-item:last-child::after { align-self: flex-start; width: 50%; } #sk-container-id-7 div.sk-parallel-item:only-child::after { width: 0; } /* Serial-specific style estimator block */ #sk-container-id-7 div.sk-serial { display: flex; flex-direction: column; align-items: center; background-color: var(--sklearn-color-background); padding-right: 1em; padding-left: 1em; } /* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is clickable and can be expanded/collapsed. - Pipeline and ColumnTransformer use this feature and define the default style - Estimators will overwrite some part of the style using the `sk-estimator` class */ /* Pipeline and ColumnTransformer style (default) */ #sk-container-id-7 div.sk-toggleable { /* Default theme specific background. It is overwritten whether we have a specific estimator or a Pipeline/ColumnTransformer */ background-color: var(--sklearn-color-background); } /* Toggleable label */ #sk-container-id-7 label.sk-toggleable__label { cursor: pointer; display: block; width: 100%; margin-bottom: 0; padding: 0.5em; box-sizing: border-box; text-align: center; } #sk-container-id-7 label.sk-toggleable__label-arrow:before { /* Arrow on the left of the label */ content: "▸"; float: left; margin-right: 0.25em; color: var(--sklearn-color-icon); } #sk-container-id-7 label.sk-toggleable__label-arrow:hover:before { color: var(--sklearn-color-text); } /* Toggleable content - dropdown */ #sk-container-id-7 div.sk-toggleable__content { max-height: 0; max-width: 0; overflow: hidden; text-align: left; /* unfitted */ background-color: var(--sklearn-color-unfitted-level-0); } #sk-container-id-7 div.sk-toggleable__content.fitted { /* fitted */ background-color: var(--sklearn-color-fitted-level-0); } #sk-container-id-7 div.sk-toggleable__content pre { margin: 0.2em; border-radius: 0.25em; color: var(--sklearn-color-text); /* unfitted */ background-color: var(--sklearn-color-unfitted-level-0); } #sk-container-id-7 div.sk-toggleable__content.fitted pre { /* unfitted */ background-color: var(--sklearn-color-fitted-level-0); } #sk-container-id-7 input.sk-toggleable__control:checked~div.sk-toggleable__content { /* Expand drop-down */ max-height: 200px; max-width: 100%; overflow: auto; } #sk-container-id-7 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before { content: "▾"; } /* Pipeline/ColumnTransformer-specific style */ #sk-container-id-7 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label { color: var(--sklearn-color-text); background-color: var(--sklearn-color-unfitted-level-2); } #sk-container-id-7 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label { background-color: var(--sklearn-color-fitted-level-2); } /* Estimator-specific style */ /* Colorize estimator box */ #sk-container-id-7 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label { /* unfitted */ background-color: var(--sklearn-color-unfitted-level-2); } #sk-container-id-7 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label { /* fitted */ background-color: var(--sklearn-color-fitted-level-2); } #sk-container-id-7 div.sk-label label.sk-toggleable__label, #sk-container-id-7 div.sk-label label { /* The background is the default theme color */ color: var(--sklearn-color-text-on-default-background); } /* On hover, darken the color of the background */ #sk-container-id-7 div.sk-label:hover label.sk-toggleable__label { color: var(--sklearn-color-text); background-color: var(--sklearn-color-unfitted-level-2); } /* Label box, darken color on hover, fitted */ #sk-container-id-7 div.sk-label.fitted:hover label.sk-toggleable__label.fitted { color: var(--sklearn-color-text); background-color: var(--sklearn-color-fitted-level-2); } /* Estimator label */ #sk-container-id-7 div.sk-label label { font-family: monospace; font-weight: bold; display: inline-block; line-height: 1.2em; } #sk-container-id-7 div.sk-label-container { text-align: center; } /* Estimator-specific */ #sk-container-id-7 div.sk-estimator { font-family: monospace; border: 1px dotted var(--sklearn-color-border-box); border-radius: 0.25em; box-sizing: border-box; margin-bottom: 0.5em; /* unfitted */ background-color: var(--sklearn-color-unfitted-level-0); } #sk-container-id-7 div.sk-estimator.fitted { /* fitted */ background-color: var(--sklearn-color-fitted-level-0); } /* on hover */ #sk-container-id-7 div.sk-estimator:hover { /* unfitted */ background-color: var(--sklearn-color-unfitted-level-2); } #sk-container-id-7 div.sk-estimator.fitted:hover { /* fitted */ background-color: var(--sklearn-color-fitted-level-2); } /* Specification for estimator info (e.g. "i" and "?") */ /* Common style for "i" and "?" */ .sk-estimator-doc-link, a:link.sk-estimator-doc-link, a:visited.sk-estimator-doc-link { float: right; font-size: smaller; line-height: 1em; font-family: monospace; background-color: var(--sklearn-color-background); border-radius: 1em; height: 1em; width: 1em; text-decoration: none !important; margin-left: 1ex; /* unfitted */ border: var(--sklearn-color-unfitted-level-1) 1pt solid; color: var(--sklearn-color-unfitted-level-1); } .sk-estimator-doc-link.fitted, a:link.sk-estimator-doc-link.fitted, a:visited.sk-estimator-doc-link.fitted { /* fitted */ border: var(--sklearn-color-fitted-level-1) 1pt solid; color: var(--sklearn-color-fitted-level-1); } /* On hover */ div.sk-estimator:hover .sk-estimator-doc-link:hover, .sk-estimator-doc-link:hover, div.sk-label-container:hover .sk-estimator-doc-link:hover, .sk-estimator-doc-link:hover { /* unfitted */ background-color: var(--sklearn-color-unfitted-level-3); color: var(--sklearn-color-background); text-decoration: none; } div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover, .sk-estimator-doc-link.fitted:hover, div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover, .sk-estimator-doc-link.fitted:hover { /* fitted */ background-color: var(--sklearn-color-fitted-level-3); color: var(--sklearn-color-background); text-decoration: none; } /* Span, style for the box shown on hovering the info icon */ .sk-estimator-doc-link span { display: none; z-index: 9999; position: relative; font-weight: normal; right: .2ex; padding: .5ex; margin: .5ex; width: min-content; min-width: 20ex; max-width: 50ex; color: var(--sklearn-color-text); box-shadow: 2pt 2pt 4pt #999; /* unfitted */ background: var(--sklearn-color-unfitted-level-0); border: .5pt solid var(--sklearn-color-unfitted-level-3); } .sk-estimator-doc-link.fitted span { /* fitted */ background: var(--sklearn-color-fitted-level-0); border: var(--sklearn-color-fitted-level-3); } .sk-estimator-doc-link:hover span { display: block; } /* "?"-specific style due to the `<a>` HTML tag */ #sk-container-id-7 a.estimator_doc_link { float: right; font-size: 1rem; line-height: 1em; font-family: monospace; background-color: var(--sklearn-color-background); border-radius: 1rem; height: 1rem; width: 1rem; text-decoration: none; /* unfitted */ color: var(--sklearn-color-unfitted-level-1); border: var(--sklearn-color-unfitted-level-1) 1pt solid; } #sk-container-id-7 a.estimator_doc_link.fitted { /* fitted */ border: var(--sklearn-color-fitted-level-1) 1pt solid; color: var(--sklearn-color-fitted-level-1); } /* On hover */ #sk-container-id-7 a.estimator_doc_link:hover { /* unfitted */ background-color: var(--sklearn-color-unfitted-level-3); color: var(--sklearn-color-background); text-decoration: none; } #sk-container-id-7 a.estimator_doc_link.fitted:hover { /* fitted */ background-color: var(--sklearn-color-fitted-level-3); } </style><div id="sk-container-id-7" class="sk-top-container"><div class="sk-text-repr-fallback"><pre>Pipeline(steps=[(&#x27;encoder&#x27;, OrdinalEncoder()), (&#x27;scaler&#x27;, MinMaxScaler())])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class="sk-container" hidden><div class="sk-item sk-dashed-wrapped"><div class="sk-label-container"><div class="sk-label sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-25" type="checkbox" ><label for="sk-estimator-id-25" class="sk-toggleable__label sk-toggleable__label-arrow ">&nbsp;&nbsp;Pipeline<a class="sk-estimator-doc-link " rel="noreferrer" target="_blank" href="https://scikit-learn.org/1.5/modules/generated/sklearn.pipeline.Pipeline.html">?<span>Documentation for Pipeline</span></a><span class="sk-estimator-doc-link ">i<span>Not fitted</span></span></label><div class="sk-toggleable__content "><pre>Pipeline(steps=[(&#x27;encoder&#x27;, OrdinalEncoder()), (&#x27;scaler&#x27;, MinMaxScaler())])</pre></div> </div></div><div class="sk-serial"><div class="sk-item"><div class="sk-estimator sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-26" type="checkbox" ><label for="sk-estimator-id-26" class="sk-toggleable__label sk-toggleable__label-arrow ">&nbsp;OrdinalEncoder<a class="sk-estimator-doc-link " rel="noreferrer" target="_blank" href="https://scikit-learn.org/1.5/modules/generated/sklearn.preprocessing.OrdinalEncoder.html">?<span>Documentation for OrdinalEncoder</span></a></label><div class="sk-toggleable__content "><pre>OrdinalEncoder()</pre></div> </div></div><div class="sk-item"><div class="sk-estimator sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-27" type="checkbox" ><label for="sk-estimator-id-27" class="sk-toggleable__label sk-toggleable__label-arrow ">&nbsp;MinMaxScaler<a class="sk-estimator-doc-link " rel="noreferrer" target="_blank" href="https://scikit-learn.org/1.5/modules/generated/sklearn.preprocessing.MinMaxScaler.html">?<span>Documentation for MinMaxScaler</span></a></label><div class="sk-toggleable__content "><pre>MinMaxScaler()</pre></div> </div></div></div></div></div></div> Attention, ici l'encoder va encoder toutes les variables, ce qui n'a pas de sens -> il faut préciser les colonnes que l'on veut encoder en créant des pipelines composées (*Column Transformer*). ## Pipeline Composée ```python from sklearn.compose import ColumnTransformer ``` ```python categorical_cols = ['cut', 'color', 'clarity'] ``` ```python Column_transformer = ColumnTransformer(transformers=[('encoder', OrdinalEncoder(), categorical_cols)], remainder='passthrough') ``` ```python pipeline = make_pipeline(Column_transformer, MinMaxScaler()) pipeline ``` <style>#sk-container-id-8 { /* Definition of color scheme common for light and dark mode */ --sklearn-color-text: black; --sklearn-color-line: gray; /* Definition of color scheme for unfitted estimators */ --sklearn-color-unfitted-level-0: #fff5e6; --sklearn-color-unfitted-level-1: #f6e4d2; --sklearn-color-unfitted-level-2: #ffe0b3; --sklearn-color-unfitted-level-3: chocolate; /* Definition of color scheme for fitted estimators */ --sklearn-color-fitted-level-0: #f0f8ff; --sklearn-color-fitted-level-1: #d4ebff; --sklearn-color-fitted-level-2: #b3dbfd; --sklearn-color-fitted-level-3: cornflowerblue; /* Specific color for light theme */ --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black))); --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white))); --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black))); --sklearn-color-icon: #696969; @media (prefers-color-scheme: dark) { /* Redefinition of color scheme for dark theme */ --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white))); --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111))); --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white))); --sklearn-color-icon: #878787; } } #sk-container-id-8 { color: var(--sklearn-color-text); } #sk-container-id-8 pre { padding: 0; } #sk-container-id-8 input.sk-hidden--visually { border: 0; clip: rect(1px 1px 1px 1px); clip: rect(1px, 1px, 1px, 1px); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } #sk-container-id-8 div.sk-dashed-wrapped { border: 1px dashed var(--sklearn-color-line); margin: 0 0.4em 0.5em 0.4em; box-sizing: border-box; padding-bottom: 0.4em; background-color: var(--sklearn-color-background); } #sk-container-id-8 div.sk-container { /* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */ display: inline-block !important; position: relative; } #sk-container-id-8 div.sk-text-repr-fallback { display: none; } div.sk-parallel-item, div.sk-serial, div.sk-item { /* draw centered vertical line to link estimators */ background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background)); background-size: 2px 100%; background-repeat: no-repeat; background-position: center center; } /* Parallel-specific style estimator block */ #sk-container-id-8 div.sk-parallel-item::after { content: ""; width: 100%; border-bottom: 2px solid var(--sklearn-color-text-on-default-background); flex-grow: 1; } #sk-container-id-8 div.sk-parallel { display: flex; align-items: stretch; justify-content: center; background-color: var(--sklearn-color-background); position: relative; } #sk-container-id-8 div.sk-parallel-item { display: flex; flex-direction: column; } #sk-container-id-8 div.sk-parallel-item:first-child::after { align-self: flex-end; width: 50%; } #sk-container-id-8 div.sk-parallel-item:last-child::after { align-self: flex-start; width: 50%; } #sk-container-id-8 div.sk-parallel-item:only-child::after { width: 0; } /* Serial-specific style estimator block */ #sk-container-id-8 div.sk-serial { display: flex; flex-direction: column; align-items: center; background-color: var(--sklearn-color-background); padding-right: 1em; padding-left: 1em; } /* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is clickable and can be expanded/collapsed. - Pipeline and ColumnTransformer use this feature and define the default style - Estimators will overwrite some part of the style using the `sk-estimator` class */ /* Pipeline and ColumnTransformer style (default) */ #sk-container-id-8 div.sk-toggleable { /* Default theme specific background. It is overwritten whether we have a specific estimator or a Pipeline/ColumnTransformer */ background-color: var(--sklearn-color-background); } /* Toggleable label */ #sk-container-id-8 label.sk-toggleable__label { cursor: pointer; display: block; width: 100%; margin-bottom: 0; padding: 0.5em; box-sizing: border-box; text-align: center; } #sk-container-id-8 label.sk-toggleable__label-arrow:before { /* Arrow on the left of the label */ content: "▸"; float: left; margin-right: 0.25em; color: var(--sklearn-color-icon); } #sk-container-id-8 label.sk-toggleable__label-arrow:hover:before { color: var(--sklearn-color-text); } /* Toggleable content - dropdown */ #sk-container-id-8 div.sk-toggleable__content { max-height: 0; max-width: 0; overflow: hidden; text-align: left; /* unfitted */ background-color: var(--sklearn-color-unfitted-level-0); } #sk-container-id-8 div.sk-toggleable__content.fitted { /* fitted */ background-color: var(--sklearn-color-fitted-level-0); } #sk-container-id-8 div.sk-toggleable__content pre { margin: 0.2em; border-radius: 0.25em; color: var(--sklearn-color-text); /* unfitted */ background-color: var(--sklearn-color-unfitted-level-0); } #sk-container-id-8 div.sk-toggleable__content.fitted pre { /* unfitted */ background-color: var(--sklearn-color-fitted-level-0); } #sk-container-id-8 input.sk-toggleable__control:checked~div.sk-toggleable__content { /* Expand drop-down */ max-height: 200px; max-width: 100%; overflow: auto; } #sk-container-id-8 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before { content: "▾"; } /* Pipeline/ColumnTransformer-specific style */ #sk-container-id-8 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label { color: var(--sklearn-color-text); background-color: var(--sklearn-color-unfitted-level-2); } #sk-container-id-8 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label { background-color: var(--sklearn-color-fitted-level-2); } /* Estimator-specific style */ /* Colorize estimator box */ #sk-container-id-8 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label { /* unfitted */ background-color: var(--sklearn-color-unfitted-level-2); } #sk-container-id-8 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label { /* fitted */ background-color: var(--sklearn-color-fitted-level-2); } #sk-container-id-8 div.sk-label label.sk-toggleable__label, #sk-container-id-8 div.sk-label label { /* The background is the default theme color */ color: var(--sklearn-color-text-on-default-background); } /* On hover, darken the color of the background */ #sk-container-id-8 div.sk-label:hover label.sk-toggleable__label { color: var(--sklearn-color-text); background-color: var(--sklearn-color-unfitted-level-2); } /* Label box, darken color on hover, fitted */ #sk-container-id-8 div.sk-label.fitted:hover label.sk-toggleable__label.fitted { color: var(--sklearn-color-text); background-color: var(--sklearn-color-fitted-level-2); } /* Estimator label */ #sk-container-id-8 div.sk-label label { font-family: monospace; font-weight: bold; display: inline-block; line-height: 1.2em; } #sk-container-id-8 div.sk-label-container { text-align: center; } /* Estimator-specific */ #sk-container-id-8 div.sk-estimator { font-family: monospace; border: 1px dotted var(--sklearn-color-border-box); border-radius: 0.25em; box-sizing: border-box; margin-bottom: 0.5em; /* unfitted */ background-color: var(--sklearn-color-unfitted-level-0); } #sk-container-id-8 div.sk-estimator.fitted { /* fitted */ background-color: var(--sklearn-color-fitted-level-0); } /* on hover */ #sk-container-id-8 div.sk-estimator:hover { /* unfitted */ background-color: var(--sklearn-color-unfitted-level-2); } #sk-container-id-8 div.sk-estimator.fitted:hover { /* fitted */ background-color: var(--sklearn-color-fitted-level-2); } /* Specification for estimator info (e.g. "i" and "?") */ /* Common style for "i" and "?" */ .sk-estimator-doc-link, a:link.sk-estimator-doc-link, a:visited.sk-estimator-doc-link { float: right; font-size: smaller; line-height: 1em; font-family: monospace; background-color: var(--sklearn-color-background); border-radius: 1em; height: 1em; width: 1em; text-decoration: none !important; margin-left: 1ex; /* unfitted */ border: var(--sklearn-color-unfitted-level-1) 1pt solid; color: var(--sklearn-color-unfitted-level-1); } .sk-estimator-doc-link.fitted, a:link.sk-estimator-doc-link.fitted, a:visited.sk-estimator-doc-link.fitted { /* fitted */ border: var(--sklearn-color-fitted-level-1) 1pt solid; color: var(--sklearn-color-fitted-level-1); } /* On hover */ div.sk-estimator:hover .sk-estimator-doc-link:hover, .sk-estimator-doc-link:hover, div.sk-label-container:hover .sk-estimator-doc-link:hover, .sk-estimator-doc-link:hover { /* unfitted */ background-color: var(--sklearn-color-unfitted-level-3); color: var(--sklearn-color-background); text-decoration: none; } div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover, .sk-estimator-doc-link.fitted:hover, div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover, .sk-estimator-doc-link.fitted:hover { /* fitted */ background-color: var(--sklearn-color-fitted-level-3); color: var(--sklearn-color-background); text-decoration: none; } /* Span, style for the box shown on hovering the info icon */ .sk-estimator-doc-link span { display: none; z-index: 9999; position: relative; font-weight: normal; right: .2ex; padding: .5ex; margin: .5ex; width: min-content; min-width: 20ex; max-width: 50ex; color: var(--sklearn-color-text); box-shadow: 2pt 2pt 4pt #999; /* unfitted */ background: var(--sklearn-color-unfitted-level-0); border: .5pt solid var(--sklearn-color-unfitted-level-3); } .sk-estimator-doc-link.fitted span { /* fitted */ background: var(--sklearn-color-fitted-level-0); border: var(--sklearn-color-fitted-level-3); } .sk-estimator-doc-link:hover span { display: block; } /* "?"-specific style due to the `<a>` HTML tag */ #sk-container-id-8 a.estimator_doc_link { float: right; font-size: 1rem; line-height: 1em; font-family: monospace; background-color: var(--sklearn-color-background); border-radius: 1rem; height: 1rem; width: 1rem; text-decoration: none; /* unfitted */ color: var(--sklearn-color-unfitted-level-1); border: var(--sklearn-color-unfitted-level-1) 1pt solid; } #sk-container-id-8 a.estimator_doc_link.fitted { /* fitted */ border: var(--sklearn-color-fitted-level-1) 1pt solid; color: var(--sklearn-color-fitted-level-1); } /* On hover */ #sk-container-id-8 a.estimator_doc_link:hover { /* unfitted */ background-color: var(--sklearn-color-unfitted-level-3); color: var(--sklearn-color-background); text-decoration: none; } #sk-container-id-8 a.estimator_doc_link.fitted:hover { /* fitted */ background-color: var(--sklearn-color-fitted-level-3); } </style><div id="sk-container-id-8" class="sk-top-container"><div class="sk-text-repr-fallback"><pre>Pipeline(steps=[(&#x27;columntransformer&#x27;, ColumnTransformer(remainder=&#x27;passthrough&#x27;, transformers=[(&#x27;encoder&#x27;, OrdinalEncoder(), [&#x27;cut&#x27;, &#x27;color&#x27;, &#x27;clarity&#x27;])])), (&#x27;minmaxscaler&#x27;, MinMaxScaler())])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class="sk-container" hidden><div class="sk-item sk-dashed-wrapped"><div class="sk-label-container"><div class="sk-label sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-28" type="checkbox" ><label for="sk-estimator-id-28" class="sk-toggleable__label sk-toggleable__label-arrow ">&nbsp;&nbsp;Pipeline<a class="sk-estimator-doc-link " rel="noreferrer" target="_blank" href="https://scikit-learn.org/1.5/modules/generated/sklearn.pipeline.Pipeline.html">?<span>Documentation for Pipeline</span></a><span class="sk-estimator-doc-link ">i<span>Not fitted</span></span></label><div class="sk-toggleable__content "><pre>Pipeline(steps=[(&#x27;columntransformer&#x27;, ColumnTransformer(remainder=&#x27;passthrough&#x27;, transformers=[(&#x27;encoder&#x27;, OrdinalEncoder(), [&#x27;cut&#x27;, &#x27;color&#x27;, &#x27;clarity&#x27;])])), (&#x27;minmaxscaler&#x27;, MinMaxScaler())])</pre></div> </div></div><div class="sk-serial"><div class="sk-item sk-dashed-wrapped"><div class="sk-label-container"><div class="sk-label sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-29" type="checkbox" ><label for="sk-estimator-id-29" class="sk-toggleable__label sk-toggleable__label-arrow ">&nbsp;columntransformer: ColumnTransformer<a class="sk-estimator-doc-link " rel="noreferrer" target="_blank" href="https://scikit-learn.org/1.5/modules/generated/sklearn.compose.ColumnTransformer.html">?<span>Documentation for columntransformer: ColumnTransformer</span></a></label><div class="sk-toggleable__content "><pre>ColumnTransformer(remainder=&#x27;passthrough&#x27;, transformers=[(&#x27;encoder&#x27;, OrdinalEncoder(), [&#x27;cut&#x27;, &#x27;color&#x27;, &#x27;clarity&#x27;])])</pre></div> </div></div><div class="sk-parallel"><div class="sk-parallel-item"><div class="sk-item"><div class="sk-label-container"><div class="sk-label sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-30" type="checkbox" ><label for="sk-estimator-id-30" class="sk-toggleable__label sk-toggleable__label-arrow ">encoder</label><div class="sk-toggleable__content "><pre>[&#x27;cut&#x27;, &#x27;color&#x27;, &#x27;clarity&#x27;]</pre></div> </div></div><div class="sk-serial"><div class="sk-item"><div class="sk-estimator sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-31" type="checkbox" ><label for="sk-estimator-id-31" class="sk-toggleable__label sk-toggleable__label-arrow ">&nbsp;OrdinalEncoder<a class="sk-estimator-doc-link " rel="noreferrer" target="_blank" href="https://scikit-learn.org/1.5/modules/generated/sklearn.preprocessing.OrdinalEncoder.html">?<span>Documentation for OrdinalEncoder</span></a></label><div class="sk-toggleable__content "><pre>OrdinalEncoder()</pre></div> </div></div></div></div></div><div class="sk-parallel-item"><div class="sk-item"><div class="sk-label-container"><div class="sk-label sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-32" type="checkbox" ><label for="sk-estimator-id-32" class="sk-toggleable__label sk-toggleable__label-arrow ">remainder</label><div class="sk-toggleable__content "><pre></pre></div> </div></div><div class="sk-serial"><div class="sk-item"><div class="sk-estimator sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-33" type="checkbox" ><label for="sk-estimator-id-33" class="sk-toggleable__label sk-toggleable__label-arrow ">passthrough</label><div class="sk-toggleable__content "><pre>passthrough</pre></div> </div></div></div></div></div></div></div><div class="sk-item"><div class="sk-estimator sk-toggleable"><input class="sk-toggleable__control sk-hidden--visually" id="sk-estimator-id-34" type="checkbox" ><label for="sk-estimator-id-34" class="sk-toggleable__label sk-toggleable__label-arrow ">&nbsp;MinMaxScaler<a class="sk-estimator-doc-link " rel="noreferrer" target="_blank" href="https://scikit-learn.org/1.5/modules/generated/sklearn.preprocessing.MinMaxScaler.html">?<span>Documentation for MinMaxScaler</span></a></label><div class="sk-toggleable__content "><pre>MinMaxScaler()</pre></div> </div></div></div></div></div></div> ```python pipeline.fit_transform(train_set) ``` array([[0.5 , 0.5 , 0.57142857, ..., 0.70391061, 0.12903226, 0.14716981], [0.5 , 0.5 , 0.71428571, ..., 0.41620112, 0.075382 , 0.08710692], [0.5 , 0.16666667, 1. , ..., 0.44040968, 0.08098472, 0.09213836], ..., [0.75 , 0.83333333, 0.57142857, ..., 0.40502793, 0.07453311, 0.08427673], [0.5 , 0.5 , 0.14285714, ..., 0.44785847, 0.08132428, 0.09213836], [0.5 , 0.33333333, 0.42857143, ..., 0.58100559, 0.10509338, 0.11949686]]) ```python pipeline.transform(test_set) ``` array([[0.5 , 0.66666667, 0.42857143, ..., 0.61545624, 0.11290323, 0.12924528], [0.5 , 0.66666667, 0.28571429, ..., 0.64804469, 0.11765705, 0.13679245], [0.75 , 0.83333333, 0.28571429, ..., 0.6405959 , 0.11544992, 0.13144654], ..., [1. , 0.33333333, 0.42857143, ..., 0.60800745, 0.11035654, 0.12987421], [0.5 , 0.5 , 0.85714286, ..., 0.59962756, 0.1098472 , 0.12484277], [0.25 , 0.16666667, 1. , ..., 0.46275605, 0.08488964, 0.10157233]])