{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "a20290f5-2a26-4622-9e8b-ce94cc1dcb1a" }, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Estimation of tree height using GEDI dataset - Clean Data - Perceptron 2 - 2022" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Base on data quality flag select more reilable tree height." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "nbpresent": { "id": "8f67df50-3050-47d2-a5d9-4329a61325fa" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import torch\n", "import torch.nn as nn\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import scipy\n", "from sklearn.metrics import r2_score\n", "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**File storing tree hight (cm) obtained by 6 algorithms, with their associate quality flags.**\n", "The quality flags can be used to refine and select the best tree height estimation and use it as tree height observation.\n", "\n", "* a?_95: tree hight (cm) at 95 quintile, for each algorithm \n", "* min_rh_95: minimum value of tree hight (cm) ammong the 6 algorithms \n", "* max_rh_95: maximum value of tree hight (cm) ammong the 6 algorithms \n", "* BEAM: 1-4 coverage beam = lower power (worse) ; 5-8 power beam = higher power (better) \n", "* digital_elev: digital mdoel elevation \n", "* elev_low: elevation of center of lowest mode \n", "* qc_a?: quality_flag for six algorithms quality_flag = 1 (better); = 0 (worse) \n", "* se_a?: sensitivity for six algorithms sensitivity < 0.95 (worse); sensitivity > 0.95 (beter ) \n", "* deg_fg: (degrade_flag) not-degraded 0 (better) ; degraded > 0 (worse) \n", "* solar_ele: solar elevation. > 0 day (worse); < 0 night (better) " ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDXYa1_95a2_95a3_95a4_95a5_95a6_95min_rh_95max_rh_95BEAMdigital_elevelev_lowqc_a1qc_a2qc_a3qc_a4qc_a5qc_a6se_a1se_a2se_a3se_a4se_a5se_a6deg_fgsolar_ele
016.05000149.727499313931393139312031393139312031395410.0383.721531111110.9620.9840.9680.9620.9890.979017.7
126.05000249.922155102223039708725596152487255965290.02374.141100000000.9480.9900.9600.9480.9940.980043.7
236.05000248.60237738013363323621336134033213404440.0435.977811111110.9470.9750.9560.9470.9810.96800.2
346.05000948.151979315331423142312731383142312731532450.0422.005371111110.9300.9700.9430.9300.9780.9620-14.2
456.05001049.588410666422165133561127233356118370.02413.748300000000.9410.9830.9460.9410.9920.969022.1
566.05001448.608456787117911877611833183376118333420.0415.515811111110.9520.9790.9610.9520.9860.97500.2
\n", "
" ], "text/plain": [ " ID X Y a1_95 a2_95 a3_95 a4_95 a5_95 a6_95 \\\n", "0 1 6.050001 49.727499 3139 3139 3139 3120 3139 3139 \n", "1 2 6.050002 49.922155 1022 2303 970 872 5596 1524 \n", "2 3 6.050002 48.602377 380 1336 332 362 1336 1340 \n", "3 4 6.050009 48.151979 3153 3142 3142 3127 3138 3142 \n", "4 5 6.050010 49.588410 666 4221 651 33 5611 2723 \n", "5 6 6.050014 48.608456 787 1179 1187 761 1833 1833 \n", "\n", " min_rh_95 max_rh_95 BEAM digital_elev elev_low qc_a1 qc_a2 qc_a3 \\\n", "0 3120 3139 5 410.0 383.72153 1 1 1 \n", "1 872 5596 5 290.0 2374.14110 0 0 0 \n", "2 332 1340 4 440.0 435.97781 1 1 1 \n", "3 3127 3153 2 450.0 422.00537 1 1 1 \n", "4 33 5611 8 370.0 2413.74830 0 0 0 \n", "5 761 1833 3 420.0 415.51581 1 1 1 \n", "\n", " qc_a4 qc_a5 qc_a6 se_a1 se_a2 se_a3 se_a4 se_a5 se_a6 deg_fg \\\n", "0 1 1 1 0.962 0.984 0.968 0.962 0.989 0.979 0 \n", "1 0 0 0 0.948 0.990 0.960 0.948 0.994 0.980 0 \n", "2 1 1 1 0.947 0.975 0.956 0.947 0.981 0.968 0 \n", "3 1 1 1 0.930 0.970 0.943 0.930 0.978 0.962 0 \n", "4 0 0 0 0.941 0.983 0.946 0.941 0.992 0.969 0 \n", "5 1 1 1 0.952 0.979 0.961 0.952 0.986 0.975 0 \n", "\n", " solar_ele \n", "0 17.7 \n", "1 43.7 \n", "2 0.2 \n", "3 -14.2 \n", "4 22.1 \n", "5 0.2 " ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "height_6algorithms = pd.read_csv(\"tree_height/txt/eu_y_x_select_6algorithms_fullTable.txt\", sep=\" \", index_col=False)\n", "pd.set_option('display.max_columns',None)\n", "height_6algorithms.head(6)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "height_6algorithms_sel = height_6algorithms.loc[(height_6algorithms['BEAM'] > 4) \n", " & (height_6algorithms['qc_a1'] == 1)\n", " & (height_6algorithms['qc_a2'] == 1)\n", " & (height_6algorithms['qc_a3'] == 1) \n", " & (height_6algorithms['qc_a4'] == 1) \n", " & (height_6algorithms['qc_a5'] == 1) \n", " & (height_6algorithms['qc_a6'] == 1)\n", " & (height_6algorithms['se_a1'] > 0.95) \n", " & (height_6algorithms['se_a2'] > 0.95)\n", " & (height_6algorithms['se_a3'] > 0.95)\n", " & (height_6algorithms['se_a4'] > 0.95)\n", " & (height_6algorithms['se_a5'] > 0.95) \n", " & (height_6algorithms['se_a6'] > 0.95)\n", " & (height_6algorithms['deg_fg'] == 0) \n", " & (height_6algorithms['solar_ele'] < 0)]" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDXYa1_95a2_95a3_95a4_95a5_95a6_95min_rh_95max_rh_95BEAMdigital_elevelev_lowqc_a1qc_a2qc_a3qc_a4qc_a5qc_a6se_a1se_a2se_a3se_a4se_a5se_a6deg_fgsolar_ele
786.05001949.921613330332883296323638573292323638577320.0297.685331111110.9710.9880.9760.9710.9920.9840-33.9
11126.05003947.995344276227362740274738932736273638935390.0368.551211111110.9750.9900.9790.9750.9940.9870-37.3
14156.05004649.865317139825052509131628482505131628486340.0330.405641111110.9730.9900.9790.9730.9940.9860-18.2
15166.05004849.050020984943947958261794794326176300.0291.225981111110.9780.9910.9820.9780.9950.9880-35.4
16176.05004948.391359336233323336335144673336333244675530.0504.781221111110.9730.9880.9770.9730.9920.9840-5.1
.......................................................................................
126720712672089.94982949.216272216028162816210432992816210432998420.0386.445561111110.9800.9930.9840.9800.9950.9890-16.9
126721112672129.94985649.881190319031793179317138223179317138226380.0363.693481111110.9680.9860.9740.9680.9900.9820-35.1
126721612672179.94988049.873435206128282046202428282828202428287380.0361.068121111110.9670.9880.9740.9670.9930.9830-35.1
126722712672289.94995849.127182366230712603553531271935535316500.0493.527921111110.9730.9890.9780.9730.9930.9850-36.0
126723712672389.94999949.936763251324902490249424902490249025135360.0346.542271111110.9680.9880.9740.9680.9930.9830-32.2
\n", "

226892 rows × 28 columns

\n", "
" ], "text/plain": [ " ID X Y a1_95 a2_95 a3_95 a4_95 a5_95 \\\n", "7 8 6.050019 49.921613 3303 3288 3296 3236 3857 \n", "11 12 6.050039 47.995344 2762 2736 2740 2747 3893 \n", "14 15 6.050046 49.865317 1398 2505 2509 1316 2848 \n", "15 16 6.050048 49.050020 984 943 947 958 2617 \n", "16 17 6.050049 48.391359 3362 3332 3336 3351 4467 \n", "... ... ... ... ... ... ... ... ... \n", "1267207 1267208 9.949829 49.216272 2160 2816 2816 2104 3299 \n", "1267211 1267212 9.949856 49.881190 3190 3179 3179 3171 3822 \n", "1267216 1267217 9.949880 49.873435 2061 2828 2046 2024 2828 \n", "1267227 1267228 9.949958 49.127182 366 2307 1260 355 3531 \n", "1267237 1267238 9.949999 49.936763 2513 2490 2490 2494 2490 \n", "\n", " a6_95 min_rh_95 max_rh_95 BEAM digital_elev elev_low qc_a1 \\\n", "7 3292 3236 3857 7 320.0 297.68533 1 \n", "11 2736 2736 3893 5 390.0 368.55121 1 \n", "14 2505 1316 2848 6 340.0 330.40564 1 \n", "15 947 943 2617 6 300.0 291.22598 1 \n", "16 3336 3332 4467 5 530.0 504.78122 1 \n", "... ... ... ... ... ... ... ... \n", "1267207 2816 2104 3299 8 420.0 386.44556 1 \n", "1267211 3179 3171 3822 6 380.0 363.69348 1 \n", "1267216 2828 2024 2828 7 380.0 361.06812 1 \n", "1267227 2719 355 3531 6 500.0 493.52792 1 \n", "1267237 2490 2490 2513 5 360.0 346.54227 1 \n", "\n", " qc_a2 qc_a3 qc_a4 qc_a5 qc_a6 se_a1 se_a2 se_a3 se_a4 se_a5 \\\n", "7 1 1 1 1 1 0.971 0.988 0.976 0.971 0.992 \n", "11 1 1 1 1 1 0.975 0.990 0.979 0.975 0.994 \n", "14 1 1 1 1 1 0.973 0.990 0.979 0.973 0.994 \n", "15 1 1 1 1 1 0.978 0.991 0.982 0.978 0.995 \n", "16 1 1 1 1 1 0.973 0.988 0.977 0.973 0.992 \n", "... ... ... ... ... ... ... ... ... ... ... \n", "1267207 1 1 1 1 1 0.980 0.993 0.984 0.980 0.995 \n", "1267211 1 1 1 1 1 0.968 0.986 0.974 0.968 0.990 \n", "1267216 1 1 1 1 1 0.967 0.988 0.974 0.967 0.993 \n", "1267227 1 1 1 1 1 0.973 0.989 0.978 0.973 0.993 \n", "1267237 1 1 1 1 1 0.968 0.988 0.974 0.968 0.993 \n", "\n", " se_a6 deg_fg solar_ele \n", "7 0.984 0 -33.9 \n", "11 0.987 0 -37.3 \n", "14 0.986 0 -18.2 \n", "15 0.988 0 -35.4 \n", "16 0.984 0 -5.1 \n", "... ... ... ... \n", "1267207 0.989 0 -16.9 \n", "1267211 0.982 0 -35.1 \n", "1267216 0.983 0 -35.1 \n", "1267227 0.985 0 -36.0 \n", "1267237 0.983 0 -32.2 \n", "\n", "[226892 rows x 28 columns]" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "height_6algorithms_sel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate the mean height excluidng the maximum and minimum values " ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "height_sel = pd.DataFrame({'ID' : height_6algorithms_sel['ID'] , \n", " 'hm_sel': (height_6algorithms_sel['a1_95'] + height_6algorithms_sel['a2_95'] + height_6algorithms_sel['a3_95'] + height_6algorithms_sel['a4_95'] \n", " + height_6algorithms_sel['a5_95'] + height_6algorithms_sel['a6_95'] - height_6algorithms_sel['min_rh_95'] - height_6algorithms_sel['max_rh_95']) / 400 } )" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDhm_sel
7832.9475
111227.4625
141522.2925
15169.5900
161733.4625
.........
1267207126720826.5200
1267211126721231.8175
1267216126721724.4075
1267227126722816.6300
1267237126723824.9100
\n", "

226892 rows × 2 columns

\n", "
" ], "text/plain": [ " ID hm_sel\n", "7 8 32.9475\n", "11 12 27.4625\n", "14 15 22.2925\n", "15 16 9.5900\n", "16 17 33.4625\n", "... ... ...\n", "1267207 1267208 26.5200\n", "1267211 1267212 31.8175\n", "1267216 1267217 24.4075\n", "1267227 1267228 16.6300\n", "1267237 1267238 24.9100\n", "\n", "[226892 rows x 2 columns]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "height_sel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Import raw data, extracted predictors and show the data distribution" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDXYhBLDFIE_WeigAverCECSOL_WeigAverCHELSA_bio18CHELSA_bio4convergencectidevmagnitudeeastnesselevforestheightglad_ard_SVVI_maxglad_ard_SVVI_medglad_ard_SVVI_minnorthnessORCDRC_WeigAveroutlet_dist_dw_basinSBIO3_Isothermality_5_15cmSBIO4_Temperature_Seasonality_5_15cmtreecover
016.05000149.7274993139.0015401321135893-10.486560-2380431201.1584170.069094353.98312423276.87109446.444092347.6654050.042500978040319.798992440.67221185
126.05000249.9221551454.751491121993591233.274361-208915344-1.7553410.269112267.51168819-49.52636719.552734-130.5417480.1827801677277720.889412457.75619585
236.05000248.602377853.50152117212459830.045293-1374797921.908780-0.016055389.7511602193.25732450.743652384.5224610.0362531489882020.695877481.87970062
346.05000948.1519793141.0015261625696130-33.654274-2672230720.9657870.067767380.20770327542.401367202.264160386.1567380.0051391583182419.375000479.41027885
456.05001049.5884102065.251547142108592327.493824-107809368-0.1626240.014065308.04278625136.048340146.835205198.1274410.0288471779696218.777500457.88006685
566.05001448.6084561246.5015151921246010-1.602039173842821.447979-0.018912364.52710018221.339844247.387207480.3879390.0427471489794519.398880474.33132962
676.05001648.5714012938.751520192169614727.856503-66516432-1.0739560.002280254.67959619125.25048887.865234160.6967770.0372541190842620.170450476.41452096
786.05001949.9216133294.751490121995591222.102139-297770784-1.4026330.309765294.92776526-86.729492-145.584229-190.0629880.2224351577278420.855963457.19540486
896.05002048.8226451623.501554181973613818.496584-25336536-0.8000160.010370240.49375922-51.470703-245.886719172.0747070.004428883913221.812290496.23111064
9106.05002449.8475221400.0015211521875886-5.660453-2786526081.477951-0.068720376.67114312277.297363273.141846-138.8959960.0988171376887321.137711466.97668570
\n", "
" ], "text/plain": [ " ID X Y h BLDFIE_WeigAver CECSOL_WeigAver \\\n", "0 1 6.050001 49.727499 3139.00 1540 13 \n", "1 2 6.050002 49.922155 1454.75 1491 12 \n", "2 3 6.050002 48.602377 853.50 1521 17 \n", "3 4 6.050009 48.151979 3141.00 1526 16 \n", "4 5 6.050010 49.588410 2065.25 1547 14 \n", "5 6 6.050014 48.608456 1246.50 1515 19 \n", "6 7 6.050016 48.571401 2938.75 1520 19 \n", "7 8 6.050019 49.921613 3294.75 1490 12 \n", "8 9 6.050020 48.822645 1623.50 1554 18 \n", "9 10 6.050024 49.847522 1400.00 1521 15 \n", "\n", " CHELSA_bio18 CHELSA_bio4 convergence cti devmagnitude eastness \\\n", "0 2113 5893 -10.486560 -238043120 1.158417 0.069094 \n", "1 1993 5912 33.274361 -208915344 -1.755341 0.269112 \n", "2 2124 5983 0.045293 -137479792 1.908780 -0.016055 \n", "3 2569 6130 -33.654274 -267223072 0.965787 0.067767 \n", "4 2108 5923 27.493824 -107809368 -0.162624 0.014065 \n", "5 2124 6010 -1.602039 17384282 1.447979 -0.018912 \n", "6 2169 6147 27.856503 -66516432 -1.073956 0.002280 \n", "7 1995 5912 22.102139 -297770784 -1.402633 0.309765 \n", "8 1973 6138 18.496584 -25336536 -0.800016 0.010370 \n", "9 2187 5886 -5.660453 -278652608 1.477951 -0.068720 \n", "\n", " elev forestheight glad_ard_SVVI_max glad_ard_SVVI_med \\\n", "0 353.983124 23 276.871094 46.444092 \n", "1 267.511688 19 -49.526367 19.552734 \n", "2 389.751160 21 93.257324 50.743652 \n", "3 380.207703 27 542.401367 202.264160 \n", "4 308.042786 25 136.048340 146.835205 \n", "5 364.527100 18 221.339844 247.387207 \n", "6 254.679596 19 125.250488 87.865234 \n", "7 294.927765 26 -86.729492 -145.584229 \n", "8 240.493759 22 -51.470703 -245.886719 \n", "9 376.671143 12 277.297363 273.141846 \n", "\n", " glad_ard_SVVI_min northness ORCDRC_WeigAver outlet_dist_dw_basin \\\n", "0 347.665405 0.042500 9 780403 \n", "1 -130.541748 0.182780 16 772777 \n", "2 384.522461 0.036253 14 898820 \n", "3 386.156738 0.005139 15 831824 \n", "4 198.127441 0.028847 17 796962 \n", "5 480.387939 0.042747 14 897945 \n", "6 160.696777 0.037254 11 908426 \n", "7 -190.062988 0.222435 15 772784 \n", "8 172.074707 0.004428 8 839132 \n", "9 -138.895996 0.098817 13 768873 \n", "\n", " SBIO3_Isothermality_5_15cm SBIO4_Temperature_Seasonality_5_15cm treecover \n", "0 19.798992 440.672211 85 \n", "1 20.889412 457.756195 85 \n", "2 20.695877 481.879700 62 \n", "3 19.375000 479.410278 85 \n", "4 18.777500 457.880066 85 \n", "5 19.398880 474.331329 62 \n", "6 20.170450 476.414520 96 \n", "7 20.855963 457.195404 86 \n", "8 21.812290 496.231110 64 \n", "9 21.137711 466.976685 70 " ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predictors = pd.read_csv(\"tree_height/txt/eu_x_y_height_predictors_select.txt\", sep=\" \", index_col=False)\n", "pd.set_option('display.max_columns',None)\n", "# change column name\n", "predictors = predictors.rename({'dev-magnitude':'devmagnitude'} , axis='columns')\n", "predictors.head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Merge the new height with the predictors table, using the ID as Primary Key" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "predictors_hm_sel = pd.merge( predictors , height_sel , left_on='ID' , right_on='ID' , how='right')" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDXYhBLDFIE_WeigAverCECSOL_WeigAverCHELSA_bio18CHELSA_bio4convergencectidevmagnitudeeastnesselevforestheightglad_ard_SVVI_maxglad_ard_SVVI_medglad_ard_SVVI_minnorthnessORCDRC_WeigAveroutlet_dist_dw_basinSBIO3_Isothermality_5_15cmSBIO4_Temperature_Seasonality_5_15cmtreecoverhm_sel
086.05001949.9216133294.751490121995591222.102139-297770784-1.4026330.309765294.92776526-86.729492-145.584229-190.0629880.2224351577278420.855963457.1954048632.9475
1126.05003947.9953442746.25152312261261813.549103-712799920.507727-0.021408322.92022726660.00610492.722168190.979736-0.0347871678480720.798000460.5012219727.4625
2156.05004649.8653172229.251517132191590131.054762-186807440-1.375050-0.126880291.41253771028.385498915.806396841.5861820.0246771676644419.941267454.1850895422.2925
3166.05004849.050020959.00152614208161009.933455-183562672-0.3828340.086874246.28801024-12.283691-58.179199174.2055660.0941751080573019.849365470.946533789.5900
4176.05004948.3913593346.2514891924865966-6.957157-2735226882.9897590.214769474.40908824125.5830086.154297128.1291500.0171641595019021.179420491.3983768533.4625
5196.05005349.877876529.0015311221845915-24.278454-3773352960.265329-0.248356335.53476025593.601074228.712402315.298340-0.1273651776471319.760756448.580811965.2900
\n", "
" ], "text/plain": [ " ID X Y h BLDFIE_WeigAver CECSOL_WeigAver \\\n", "0 8 6.050019 49.921613 3294.75 1490 12 \n", "1 12 6.050039 47.995344 2746.25 1523 12 \n", "2 15 6.050046 49.865317 2229.25 1517 13 \n", "3 16 6.050048 49.050020 959.00 1526 14 \n", "4 17 6.050049 48.391359 3346.25 1489 19 \n", "5 19 6.050053 49.877876 529.00 1531 12 \n", "\n", " CHELSA_bio18 CHELSA_bio4 convergence cti devmagnitude eastness \\\n", "0 1995 5912 22.102139 -297770784 -1.402633 0.309765 \n", "1 2612 6181 3.549103 -71279992 0.507727 -0.021408 \n", "2 2191 5901 31.054762 -186807440 -1.375050 -0.126880 \n", "3 2081 6100 9.933455 -183562672 -0.382834 0.086874 \n", "4 2486 5966 -6.957157 -273522688 2.989759 0.214769 \n", "5 2184 5915 -24.278454 -377335296 0.265329 -0.248356 \n", "\n", " elev forestheight glad_ard_SVVI_max glad_ard_SVVI_med \\\n", "0 294.927765 26 -86.729492 -145.584229 \n", "1 322.920227 26 660.006104 92.722168 \n", "2 291.412537 7 1028.385498 915.806396 \n", "3 246.288010 24 -12.283691 -58.179199 \n", "4 474.409088 24 125.583008 6.154297 \n", "5 335.534760 25 593.601074 228.712402 \n", "\n", " glad_ard_SVVI_min northness ORCDRC_WeigAver outlet_dist_dw_basin \\\n", "0 -190.062988 0.222435 15 772784 \n", "1 190.979736 -0.034787 16 784807 \n", "2 841.586182 0.024677 16 766444 \n", "3 174.205566 0.094175 10 805730 \n", "4 128.129150 0.017164 15 950190 \n", "5 315.298340 -0.127365 17 764713 \n", "\n", " SBIO3_Isothermality_5_15cm SBIO4_Temperature_Seasonality_5_15cm \\\n", "0 20.855963 457.195404 \n", "1 20.798000 460.501221 \n", "2 19.941267 454.185089 \n", "3 19.849365 470.946533 \n", "4 21.179420 491.398376 \n", "5 19.760756 448.580811 \n", "\n", " treecover hm_sel \n", "0 86 32.9475 \n", "1 97 27.4625 \n", "2 54 22.2925 \n", "3 78 9.5900 \n", "4 85 33.4625 \n", "5 96 5.2900 " ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predictors_hm_sel.head(6)" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [], "source": [ "predictors_hm_sel = predictors_hm_sel.loc[(predictors['h'] < 5000) ]" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDXYhBLDFIE_WeigAverCECSOL_WeigAverCHELSA_bio18CHELSA_bio4convergencectidevmagnitudeeastnesselevforestheightglad_ard_SVVI_maxglad_ard_SVVI_medglad_ard_SVVI_minnorthnessORCDRC_WeigAveroutlet_dist_dw_basinSBIO3_Isothermality_5_15cmSBIO4_Temperature_Seasonality_5_15cmtreecoverhm_sel
1126.05003947.9953442746.25152312261261813.549103-712799920.507727-0.021408322.92022726660.00610492.722168190.979736-0.0347871678480720.798000460.5012219727.4625
2156.05004649.8653172229.251517132191590131.054762-186807440-1.375050-0.126880291.41253771028.385498915.806396841.5861820.0246771676644419.941267454.1850895422.2925
5196.05005349.877876529.0015311221845915-24.278454-3773352960.265329-0.248356335.53476025593.601074228.712402315.298340-0.1273651776471319.760756448.580811965.2900
8276.05008349.2814393921.25148813234559153.646593-2234992480.3833140.062349309.14260925862.362305263.612793249.693115-0.0688101678112017.538614463.28024310039.2125
9356.05011949.9286101765.0015101319765917-2.138205-393005696-1.467515-0.316702301.64956720248.561035164.831299237.283447-0.1444071977364721.324263465.0464788717.6500
...........................................................................
22687612671769.94963749.8874713266.50155814207464844.993805-1966916801.2605400.044238328.01916526-144.124023-145.522949-14.3176270.020914785722917.376682463.4213879832.6650
22687812671809.94965849.856387497.001515171956656134.034641-126274136-0.9590000.047194260.8890690681.798340657.745605642.0114750.050846585722521.177349573.086243124.9700
22687912671849.94968849.3628312344.00151715226464999.1731681609678720.645957-0.011381447.67804023282.11938579.83081110.1403810.014716782415718.283070471.1674198923.4400
22688112671899.94970149.1144582014.501529122608663227.137199104082784-0.481382-0.012974447.81439221187.93408290.763672168.5271000.0456021890789418.010750473.2279667220.1450
22688212671929.94973149.8931962891.0015661520886482-36.581142-2191424961.3487700.060537331.81591821-68.830078-160.90966811.658203-0.0460481185770516.320225450.4092717528.9100
\n", "

116199 rows × 24 columns

\n", "
" ], "text/plain": [ " ID X Y h BLDFIE_WeigAver \\\n", "1 12 6.050039 47.995344 2746.25 1523 \n", "2 15 6.050046 49.865317 2229.25 1517 \n", "5 19 6.050053 49.877876 529.00 1531 \n", "8 27 6.050083 49.281439 3921.25 1488 \n", "9 35 6.050119 49.928610 1765.00 1510 \n", "... ... ... ... ... ... \n", "226876 1267176 9.949637 49.887471 3266.50 1558 \n", "226878 1267180 9.949658 49.856387 497.00 1515 \n", "226879 1267184 9.949688 49.362831 2344.00 1517 \n", "226881 1267189 9.949701 49.114458 2014.50 1529 \n", "226882 1267192 9.949731 49.893196 2891.00 1566 \n", "\n", " CECSOL_WeigAver CHELSA_bio18 CHELSA_bio4 convergence cti \\\n", "1 12 2612 6181 3.549103 -71279992 \n", "2 13 2191 5901 31.054762 -186807440 \n", "5 12 2184 5915 -24.278454 -377335296 \n", "8 13 2345 5915 3.646593 -223499248 \n", "9 13 1976 5917 -2.138205 -393005696 \n", "... ... ... ... ... ... \n", "226876 14 2074 6484 4.993805 -196691680 \n", "226878 17 1956 6561 34.034641 -126274136 \n", "226879 15 2264 6499 9.173168 160967872 \n", "226881 12 2608 6632 27.137199 104082784 \n", "226882 15 2088 6482 -36.581142 -219142496 \n", "\n", " devmagnitude eastness elev forestheight glad_ard_SVVI_max \\\n", "1 0.507727 -0.021408 322.920227 26 660.006104 \n", "2 -1.375050 -0.126880 291.412537 7 1028.385498 \n", "5 0.265329 -0.248356 335.534760 25 593.601074 \n", "8 0.383314 0.062349 309.142609 25 862.362305 \n", "9 -1.467515 -0.316702 301.649567 20 248.561035 \n", "... ... ... ... ... ... \n", "226876 1.260540 0.044238 328.019165 26 -144.124023 \n", "226878 -0.959000 0.047194 260.889069 0 681.798340 \n", "226879 0.645957 -0.011381 447.678040 23 282.119385 \n", "226881 -0.481382 -0.012974 447.814392 21 187.934082 \n", "226882 1.348770 0.060537 331.815918 21 -68.830078 \n", "\n", " glad_ard_SVVI_med glad_ard_SVVI_min northness ORCDRC_WeigAver \\\n", "1 92.722168 190.979736 -0.034787 16 \n", "2 915.806396 841.586182 0.024677 16 \n", "5 228.712402 315.298340 -0.127365 17 \n", "8 263.612793 249.693115 -0.068810 16 \n", "9 164.831299 237.283447 -0.144407 19 \n", "... ... ... ... ... \n", "226876 -145.522949 -14.317627 0.020914 7 \n", "226878 657.745605 642.011475 0.050846 5 \n", "226879 79.830811 10.140381 0.014716 7 \n", "226881 90.763672 168.527100 0.045602 18 \n", "226882 -160.909668 11.658203 -0.046048 11 \n", "\n", " outlet_dist_dw_basin SBIO3_Isothermality_5_15cm \\\n", "1 784807 20.798000 \n", "2 766444 19.941267 \n", "5 764713 19.760756 \n", "8 781120 17.538614 \n", "9 773647 21.324263 \n", "... ... ... \n", "226876 857229 17.376682 \n", "226878 857225 21.177349 \n", "226879 824157 18.283070 \n", "226881 907894 18.010750 \n", "226882 857705 16.320225 \n", "\n", " SBIO4_Temperature_Seasonality_5_15cm treecover hm_sel \n", "1 460.501221 97 27.4625 \n", "2 454.185089 54 22.2925 \n", "5 448.580811 96 5.2900 \n", "8 463.280243 100 39.2125 \n", "9 465.046478 87 17.6500 \n", "... ... ... ... \n", "226876 463.421387 98 32.6650 \n", "226878 573.086243 12 4.9700 \n", "226879 471.167419 89 23.4400 \n", "226881 473.227966 72 20.1450 \n", "226882 450.409271 75 28.9100 \n", "\n", "[116199 rows x 24 columns]" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predictors_hm_sel" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
XYhm_sel
16.05003947.99534427.4625
26.05004649.86531722.2925
56.05005349.8778765.2900
86.05008349.28143939.2125
96.05011949.92861017.6500
............
2268769.94963749.88747132.6650
2268789.94965849.8563874.9700
2268799.94968849.36283123.4400
2268819.94970149.11445820.1450
2268829.94973149.89319628.9100
\n", "

116199 rows × 3 columns

\n", "
" ], "text/plain": [ " X Y hm_sel\n", "1 6.050039 47.995344 27.4625\n", "2 6.050046 49.865317 22.2925\n", "5 6.050053 49.877876 5.2900\n", "8 6.050083 49.281439 39.2125\n", "9 6.050119 49.928610 17.6500\n", "... ... ... ...\n", "226876 9.949637 49.887471 32.6650\n", "226878 9.949658 49.856387 4.9700\n", "226879 9.949688 49.362831 23.4400\n", "226881 9.949701 49.114458 20.1450\n", "226882 9.949731 49.893196 28.9100\n", "\n", "[116199 rows x 3 columns]" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x_y_hm_sel = predictors_hm_sel[[\"X\",\"Y\",\"hm_sel\"]]\n", "x_y_hm_sel" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [], "source": [ "#Normalize the data\n", "from sklearn.preprocessing import MinMaxScaler\n", "scaler = MinMaxScaler()\n", "data = scaler.fit_transform(x_y_hm_sel)" ] }, { "cell_type": "code", "execution_count": 116, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([4.4490e+03, 2.5580e+03, 2.3750e+03, 2.2710e+03, 2.7280e+03,\n", " 3.3330e+03, 4.4110e+03, 5.5060e+03, 6.5250e+03, 7.5690e+03,\n", " 8.9780e+03, 1.0236e+04, 1.1240e+04, 1.0795e+04, 9.7710e+03,\n", " 7.9490e+03, 5.6670e+03, 3.7270e+03, 2.4290e+03, 1.4340e+03,\n", " 8.8400e+02, 4.8700e+02, 2.8500e+02, 1.5300e+02, 1.0600e+02,\n", " 6.5000e+01, 4.1000e+01, 2.4000e+01, 2.9000e+01, 2.2000e+01,\n", " 1.6000e+01, 2.0000e+01, 1.5000e+01, 1.2000e+01, 1.5000e+01,\n", " 5.0000e+00, 9.0000e+00, 8.0000e+00, 7.0000e+00, 7.0000e+00,\n", " 7.0000e+00, 3.0000e+00, 2.0000e+00, 7.0000e+00, 4.0000e+00,\n", " 2.0000e+00, 4.0000e+00, 6.0000e+00, 1.0000e+00, 2.0000e+00]),\n", " array([0. , 0.02, 0.04, 0.06, 0.08, 0.1 , 0.12, 0.14, 0.16, 0.18, 0.2 ,\n", " 0.22, 0.24, 0.26, 0.28, 0.3 , 0.32, 0.34, 0.36, 0.38, 0.4 , 0.42,\n", " 0.44, 0.46, 0.48, 0.5 , 0.52, 0.54, 0.56, 0.58, 0.6 , 0.62, 0.64,\n", " 0.66, 0.68, 0.7 , 0.72, 0.74, 0.76, 0.78, 0.8 , 0.82, 0.84, 0.86,\n", " 0.88, 0.9 , 0.92, 0.94, 0.96, 0.98, 1. ]),\n", " )" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3MAAAEvCAYAAADvmpjfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3df7Dd9X3f+eergB0SmxqKYIV+rEgr2gKzxuEuS+OdDDFJrRpPRXaCV96NIa52lWVwILvpFMl/rNPJaEaZJiS2t9BVbIpojbHWPxatAyZYDev1lB8RNgEEZq0aLdygItnBtZztKpH83j/OR+FwdSSd++vc8733+Zg5c77nfb7fc9/novvhvM/nV6oKSZIkSVK3/LWFTkCSJEmSNH0Wc5IkSZLUQRZzkiRJktRBFnOSJEmS1EEWc5IkSZLUQRZzkiRJktRBZy50Aqdz/vnn15o1axY6DUlz6KmnnvpuVS1b6Dxmw7ZJWnwWQ9sEtk/SYnSy9mnsi7k1a9awZ8+ehU5D0hxK8v8sdA6zZdskLT6LoW0C2ydpMTpZ++QwS0mSJEnqIIs5SZIkSeogizlJkiRJ6iCLOUmSJEnqIIs5SZIkSeogizlJkiRJ6iCLOUmSJEnqIIs5SZIkSeogizlJkiRJ6iCLOUmSJEnqIIs5SZIkSeqgMxc6AZ3ems1/8KbH+7ddt0CZSJI03vx/pqb+GwD/HWjxsmdOUmcleUeSzyf5VpIXkvy9JOcleSTJt9v9uX3nb0myL8mLSd7bF78yybPtuU8kycK8I0mSpOFZzEnqso8DX6mqvwO8E3gB2Azsrqq1wO72mCSXAhuAy4B1wJ1JzmivcxewCVjbbutG+SYkSZJmwmJOUiclOQf4GeDTAFX1F1X1fWA9sKOdtgO4vh2vB+6vqiNV9RKwD7gqyXLgnKp6rKoKuLfvGkmSpLFlMSepq34SOAT8yyTfTPKpJD8BXFhVBwDa/QXt/BXAK33XT7bYinY8NX6CJJuS7Emy59ChQ3P7biRJkqbJYk5SV50J/BRwV1W9C/hz2pDKkxg0D65OET8xWLW9qiaqamLZsmXTzVeSJGlOWcxJ6qpJYLKqnmiPP0+vuHutDZ2k3R/sO39V3/UrgVdbfOWAuCRJ0lizmJPUSVX174FXkvztFroWeB7YBdzUYjcBD7TjXcCGJG9NcjG9hU6ebEMxDye5uq1ieWPfNZIkSWPLfeYkddmvAp9J8hbgO8CH6X1JtTPJRuBl4AaAqtqbZCe9gu8ocEtVHWuvczNwD3A28FC7SZIkjTWLOUmdVVVPAxMDnrr2JOdvBbYOiO8BLp/b7CRJkuaXxZwkSZqxNZv/4E2P92+7boEykU7Of6darJwzJ0mSJEkdZDEnSZIkSR1kMSdJkiRJHXTaYi7JjyV5MsmfJNmb5J+2+G8k+dMkT7fb+/qu2ZJkX5IXk7y3L35lkmfbc59oy4BLkiRJkqZpmAVQjgDvqaofJjkL+HqS48t2/25V/Xb/yUkuBTYAlwEXAV9NcklbAvwuYBPwOPAgsA6XAJckSZKkaTttz1z1/LA9PKvd6hSXrAfur6ojVfUSsA+4Ksly4JyqeqyqCrgXuH526UuSJEnS0jTUnLkkZyR5GjgIPFJVT7SnPpLkmSR3Jzm3xVYAr/RdPtliK9rx1Pign7cpyZ4kew4dOjSNtyNJkiRJS8NQxVxVHauqK4CV9HrZLqc3ZPJvAlcAB4DfaacPmgdXp4gP+nnbq2qiqiaWLVs2TIqSJEmStKRMa9Pwqvp+kkeBdf1z5ZL8PvDl9nASWNV32Urg1RZfOSCuaZq68SW4+aUkSZK01AyzmuWyJO9ox2cDPwd8q82BO+4XgOfa8S5gQ5K3JrkYWAs8WVUHgMNJrm6rWN4IPDCH70WSJEmSloxheuaWAzuSnEGv+NtZVV9O8q+SXEFvqOR+4FcAqmpvkp3A88BR4Ja2kiXAzcA9wNn0VrF0JUtJkhYRR49I0uictpirqmeAdw2If+gU12wFtg6I7wEun2aOkiRJkqQppjVnTpIkSRong3qDpaViqNUsJUmSJEnjxZ65MeO3S5IkDWeh/5+Z5G7g/cDBqrq8xc4DPgesobemwAeq6vX23BZgI3AMuLWqHm7xK3ljTYEHgduqqpK8FbgXuBL4HvBfV9X+Eb09SR1gz5wkSdLM3AOsmxLbDOyuqrXA7vaYJJcCG4DL2jV3tsXloLd37yZ6K4Cv7XvNjcDrVfW3gN8Ffmve3omkTrKYkyRJmoGq+hrwZ1PC64Ed7XgHcH1f/P6qOlJVLwH7gKvaVk/nVNVjVVX0euKuH/Banweubds7SRJgMSdJkjSXLmx769LuL2jxFcArfedNttiKdjw1/qZrquoo8B+AvzFvmUvqHIs5SZKk+TeoR61OET/VNSe+eLIpyZ4kew4dOjTDFCV1jcWcJEnS3HmtDZ2k3R9s8UlgVd95K4FXW3zlgPibrklyJvDXOXFYJwBVtb2qJqpqYtmyZXP0ViSNO1ezlCRJIzVoFcr9265bgEzmxS7gJmBbu3+gL35fkjuAi+gtdPJkVR1LcjjJ1cATwI3AJ6e81mPALwL/ps2rkyTAYk6SJGlGknwWuAY4P8kk8DF6RdzOJBuBl4EbAKpqb5KdwPPAUeCWqjrWXupm3tia4KF2A/g08K+S7KPXI7dhBG9LUodYzC0SU7/lXETfcEqSNJaq6oMneerak5y/Fdg6IL4HuHxA/P+jFYOSNIjFnCRJkpaURT7UV0uIC6BIkiRJUgfZMyctML8dlLTYDWrnJEmzZzG3SFkgSJLmmkWZJI0Xh1lKkiRJUgdZzEmSJElSB1nMSZIkSVIHWcxJkiRJUge5AMoIuSiJJEmSpLliMSeNmKvBzZ0k+4HDwDHgaFVNJDkP+BywBtgPfKCqXm/nbwE2tvNvraqHW/xK4B7gbOBB4LaqqlG+F0mSpOlymKWkrvvZqrqiqiba483A7qpaC+xuj0lyKbABuAxYB9yZ5Ix2zV3AJmBtu60bYf6SJEkzYs+cpMVmPXBNO94BPArc3uL3V9UR4KUk+4CrWu/eOVX1GECSe4HrgYdGm7ak03FkgyS9mT1zkrqsgD9M8lSSTS12YVUdAGj3F7T4CuCVvmsnW2xFO54alyRJGmv2zEnqsndX1atJLgAeSfKtU5ybAbE6RfzEF+gVjJsAVq9ePd1cJUmS5tRpe+aS/FiSJ5P8SZK9Sf5pi5+X5JEk32735/ZdsyXJviQvJnlvX/zKJM+25z6RZNCHKEkaSlW92u4PAl8CrgJeS7IcoN0fbKdPAqv6Ll8JvNriKwfEB/287VU1UVUTy5Ytm8u3IkmSNG3DDLM8Arynqt4JXAGsS3I1LjIgaQEl+Ykkbz9+DPx94DlgF3BTO+0m4IF2vAvYkOStSS6m1wY92YZiHk5ydfuC6ca+ayRJksbWaYdZtuW5f9gentVuhYsMSFpYFwJfah38ZwL3VdVXkvwxsDPJRuBl4AaAqtqbZCfwPHAUuKWqjrXXupk3tiZ4CNslSZLUAUPNmWs9a08Bfwv451X1RJI3LTLQ5qxAb+GAx/suP76YwF8yz4sMTF3lyg25pcWrqr4DvHNA/HvAtSe5ZiuwdUB8D3D5XOcoSZI0n4Yq5tq311ckeQe9b8JP9aHHRQYal1CWJEmaO362kt5sWlsTVNX36Q2nXIeLDEiSJEnSghlmNctlrUeOJGcDPwd8CxcZkCRJkqQFM8wwy+XAjjZv7q8BO6vqy0kew0UGpDdx3qYkSZJGZZjVLJ8B3jUg7iIDkiRJkrRAhloARYuDvUaSJEnS4jGtBVAkSZIkSePBYk6SJEmSOshhltIYckisJEmSTseeOUmSJEnqIIs5SZIkSeogizlJkiRJ6iDnzEmSpIGmzt+VJI0Xe+YkSZIkqYMs5iRJkiSpgyzmJEmSJKmDnDMnSZIWnPtrStL02TMnSZIkSR1kMSdJkiRJHeQwS2lIg5bodhiQJGmQJP8j8N8BBTwLfBj4ceBzwBpgP/CBqnq9nb8F2AgcA26tqodb/ErgHuBs4EHgtqqqEb4VSWPMYk6aBfdgkiRNlWQFcCtwaVX9xyQ7gQ3ApcDuqtqWZDOwGbg9yaXt+cuAi4CvJrmkqo4BdwGbgMfpFXPrgIdG/qYkjSWHWUqSJM29M4Gzk5xJr0fuVWA9sKM9vwO4vh2vB+6vqiNV9RKwD7gqyXLgnKp6rPXG3dt3jSRZzEmSJM2lqvpT4LeBl4EDwH+oqj8ELqyqA+2cA8AF7ZIVwCt9LzHZYiva8dS4JAEOs1xwDtOTJGlxSXIuvd62i4HvA/9bkl861SUDYnWK+KCfuYnecExWr149rXwldZfFnHQSFtqSpBn6OeClqjoEkOSLwE8DryVZXlUH2hDKg+38SWBV3/Ur6Q3LnGzHU+MnqKrtwHaAiYkJF0iZAfc6VBdZzGnWbPxOzoJQkpakl4Grk/w48B+Ba4E9wJ8DNwHb2v0D7fxdwH1J7qC3AMpa4MmqOpbkcJKrgSeAG4FPjvSdSBprFnOSJElzqKqeSPJ54BvAUeCb9HrN3gbsTLKRXsF3Qzt/b1vx8vl2/i1tJUuAm3lja4KHcCVLSX0s5iRJkuZYVX0M+NiU8BF6vXSDzt8KbB0Q3wNcPucJSloUXM1SkiRJkjrInjlJkuQcX0nqIIu5JcyFSyRJkqTuOu0wyySrkvxRkheS7E1yW4v/RpI/TfJ0u72v75otSfYleTHJe/viVyZ5tj33iSSD9k+RJEmSJJ3GMD1zR4Ffr6pvJHk78FSSR9pzv1tVv91/cpJLgQ3AZfSW1/1qkkvaqkx30dvQ8nHgQWAdi2RVJoenSJIkzS0/X0mndtqeuao6UFXfaMeHgReAFae4ZD1wf1UdqaqXgH3AVW1zzHOq6rGqKuBe4PpZvwNJS1qSM5J8M8mX2+PzkjyS5Nvt/ty+cx01IEmSFo1prWaZZA3wLnobVwJ8JMkzSe7u+8C0Anil77LJFlvRjqfGB/2cTUn2JNlz6NCh6aQoaem5jd6XTMdtBnZX1Vpgd3s8ddTAOuDOJGe0a46PGljbbutGk7okSdLMDb0ASpK3AV8Afq2qfpDkLuA3gWr3vwP8I2DQN9p1iviJwart9DbXZGJiYuA5kpRkJXAdvb2Z/qcWXg9c0453AI8Ct9M3agB4KcnxUQP7aaMG2mseHzWwKIaAS13l8DpJOr2heuaSnEWvkPtMVX0RoKpeq6pjVfUj4PeBq9rpk8CqvstXAq+2+MoBcUmaqd8D/gnwo77YhVV1AHrDxIELWnzWowYkSZLGyTCrWQb4NPBCVd3RF1/ed9ovAM+1413AhiRvTXIxvSFLT7YPVYeTXN1e80bggTl6H5KWmCTvBw5W1VPDXjIgNq1RAw4BlyRJ42SYYZbvBj4EPJvk6Rb7KPDBJFfQ+9CzH/gVgKram2Qn8Dy9lTBvaStZAtwM3AOcTW8Ik8OYpCEMGm7kvoC8G/iHbVuUHwPOSfKvgdeSLK+qA+1Lp4Pt/FmPGnAIuCRJGienLeaq6usM/ub6wVNcs5XeHJap8T3A5dNJUNJwllrBV1VbgC0ASa4B/nFV/VKSfwbcBGxr98dHAOwC7ktyB71tU46PGjiW5HCSq+kt7nQj8MmRvhlJkqQZGHoBlC5aah9uJQG9Im5nko3Ay8AN4KgBSZK0+CzqYk5zz9XFNI6q6lF6q1ZSVd8Drj3JeY4akCRJi8a09pmTJEmSJI0HizlJkiRJ6iCHWUpLiPNIJUmSFg975iRJkiSpg+yZG2Bq74U9F5IkSZLGjT1zkiRJktRBFnOSJEmS1EEWc5IkSZLUQRZzkiRJktRBFnOSJEmS1EEWc5IkSZLUQRZzkiRJktRBFnOSJEmS1EFuGi511NTN7SVJkrS02DMnSZIkSR1kz9wQBvWA7N923QJkIkmStHg56kSaHos5LQgLZEmSJGl2HGYpSZIkSR1kz5y0iDlcRZIkafGyZ06SJEmSOsieOUmSFjnnKUvS4mTPnCRJkiR1kD1zGgnnbkmSJElz67Q9c0lWJfmjJC8k2ZvkthY/L8kjSb7d7s/tu2ZLkn1JXkzy3r74lUmebc99Iknm521JkiQtnCTvSPL5JN9qn6H+np+dJM21YXrmjgK/XlXfSPJ24KkkjwC/DOyuqm1JNgObgduTXApsAC4DLgK+muSSqjoG3AVsAh4HHgTWAQ/N9ZvS3LFHTZKkGfk48JWq+sUkbwF+HPgofnaSNIdOW8xV1QHgQDs+nOQFYAWwHrimnbYDeBS4vcXvr6ojwEtJ9gFXJdkPnFNVjwEkuRe4HhskSZLmlF/ELawk5wA/Q++Lb6rqL4C/SOJnJ0lzaloLoCRZA7wLeAK4sBV6xwu+C9ppK4BX+i6bbLEV7XhqXJIkaTH5SeAQ8C+TfDPJp5L8BH52kjTHhl4AJcnbgC8Av1ZVPzjFkO1BT9Qp4oN+1iZ6QwpYvXr1sCnOiN9eSpKkOXYm8FPAr1bVE0k+Tm9I5cl06rOTpPExVM9ckrPoFXKfqaovtvBrSZa355cDB1t8EljVd/lK4NUWXzkgfoKq2l5VE1U1sWzZsmHfiyRJ0jiYBCar6on2+PP0ijs/O0maU6ftmWurJn0aeKGq7uh7ahdwE7Ct3T/QF78vyR30JvGuBZ6sqmNJDie5mt4wzRuBT87ZO9HYsLdTkrSUVdW/T/JKkr9dVS8C1wLPt5ufnSTNmWGGWb4b+BDwbJKnW+yj9BqinUk2Ai8DNwBU1d4kO+k1WEeBW9pqTAA3A/cAZ9ObvOsEXkmStBj9KvCZtpLld4AP0xsR5WcnSXNmmNUsv87gMdvQ+6Zp0DVbga0D4nuAy6eToDQfpvYe7t923QJlIklajKrqaWBiwFN+dpI0Z6a1mqUkSZIkaTwMvZql3sx5YZIkSZIWksWcpE5K8mPA14C30mvLPl9VH0tyHvA5YA2wH/hAVb3ertkCbASOAbdW1cMtfiVvzEl5ELitqgYu/y1JWhoGfXHvtAyNG4s5aYnr8PzBI8B7quqHbfuUryd5CPivgN1VtS3JZnp7O92e5FJgA3AZvdXivprkkrbIwF309md6nF4xtw4XGZAkSWPOOXOSOql6ftgentVuBawHdrT4DuD6drweuL+qjlTVS8A+4Kq219M5VfVY6427t+8aSZKksWUxJ6mzkpzRtkw5CDzSNui9sKoOALT7C9rpK4BX+i6fbLEV7XhqXJIkaawtuWGWLlyiQfx30U1tiOQVSd4BfCnJqZbvHrTFSp0ifuILJJvoDcdk9erV08xWktTP//dKs2fPnKTOq6rvA4/Sm+v2Whs6Sbs/2E6bBFb1XbYSeLXFVw6ID/o526tqoqomli1bNqfvQZIkabos5iR1UpJlrUeOJGcDPwd8C9gF3NROuwl4oB3vAjYkeWuSi4G1wJNtKObhJFcnCXBj3zWSJElja8kNs5S0aCwHdiQ5g94XUzur6stJHgN2JtkIvAzcAFBVe5PsBJ4HjgK3tGGaADfzxtYED+FKlpIkqQMs5iR1UlU9A7xrQPx7wLUnuWYrsHVAfA9wqvl2kiRJY8dhlpIkSZLUQRZzkiRJktRBDrPUX3GJYElaOmzzJan77JmTJEmSpA6ymJMkSZKkDrKYkyRJkqQOspiTJEmSpA6ymJMkSZKkDrKYkyRJkqQOspiTJEmSpA6ymJMkSZKkDrKYkyRJkqQOspiTJEmSpA6ymJMkSZKkDrKYkyRJkqQOOvN0JyS5G3g/cLCqLm+x3wD+e+BQO+2jVfVge24LsBE4BtxaVQ+3+JXAPcDZwIPAbVVVc/lmJM3ems1/cEJs/7brFiATSZIkncowPXP3AOsGxH+3qq5ot+OF3KXABuCyds2dSc5o598FbALWttug15QkSZIkDeG0xVxVfQ34syFfbz1wf1UdqaqXgH3AVUmWA+dU1WOtN+5e4PqZJi1JkiRJS91s5sx9JMkzSe5Ocm6LrQBe6TtnssVWtOOp8YGSbEqyJ8meQ4cOnew0SZIkSVqyTjtn7iTuAn4TqHb/O8A/AjLg3DpFfKCq2g5sB5iYmHBenSRJ0jyYOk/aOdJSt8yomKuq144fJ/l94Mvt4SSwqu/UlcCrLb5yQFxSB/g/e0nSbA1aYEvS7MyomEuyvKoOtIe/ADzXjncB9yW5A7iI3kInT1bVsSSHk1wNPAHcCHxydqlLw/F/HpIkSVqMhtma4LPANcD5SSaBjwHXJLmC3lDJ/cCvAFTV3iQ7geeBo8AtVXWsvdTNvLE1wUPtJkmSJEmagdMWc1X1wQHhT5/i/K3A1gHxPcDl08pOS4pD+SRJkqThzWY1S0mSJEnSArGYkyRJkqQOspiTJEmaY0nOSPLNJF9uj89L8kiSb7f7c/vO3ZJkX5IXk7y3L35lkmfbc59IMmirJ0lLmMWcJEnS3LsNeKHv8WZgd1WtBXa3xyS5FNgAXAasA+5Mcka75i5gE73Vwde25yXpr1jMSZIkzaEkK4HrgE/1hdcDO9rxDuD6vvj9VXWkql4C9gFXJVkOnFNVj1VVAff2XSNJgMWcJEnSXPs94J8AP+qLXXh8j952f0GLrwBe6TtvssVWtOOpcUn6KxZzkiRJcyTJ+4GDVfXUsJcMiNUp4if7uZuS7Emy59ChQ0P+aEldZzEnSZI0d94N/MMk+4H7gfck+dfAa23oJO3+YDt/EljVd/1K4NUWXzkgPlBVba+qiaqaWLZs2Vy9F0lj7rSbhkuSpFNbs/kPTojt33bdAmSihVZVW4AtAEmuAf5xVf1Skn8G3ARsa/cPtEt2AfcluQO4iN5CJ09W1bEkh5NcDTwB3Ah8cqRvRtLYs2dOUiclWZXkj5K8kGRvktta3OW/JY2jbcDPJ/k28PPtMVW1F9gJPA98Bbilqo61a26mt4jKPuDfAQ+NOmlJ482eOUlddRT49ar6RpK3A08leQT4ZXrLf29Lspne8t+3T1n++yLgq0kuaR+aji///TjwIL3lv/3QJGlWqupR4NF2/D3g2pOctxXYOiC+B7h8/jKU1HX2zEnqpKo6UFXfaMeH6e3ntAKX/5YkSUuEPXOSOi/JGuBd9OaVvGn57yT9y38/3nfZ8WW+/xKX/5YkDWHq/FjnxmqhWcxpbLmggIaR5G3AF4Bfq6ofnGK626yX/06yid5wTFavXj39ZLVoDGqfJEkaNYdZSuqsJGfRK+Q+U1VfbOF5W/7bpb8lSdI4sWdOUie1FSc/DbxQVXf0PbULl//WGHA4liRpvlnMSeqqdwMfAp5N8nSLfZReEbczyUbgZeAG6C3/neT48t9HOXH573uAs+mtYulKlpIkaexZzEnqpKr6OoPnu4HLf0uSpCXAOXOSJEmS1EH2zGnRcZU5SZIkLQUWc5KmzW0jpPHhF1iStHRZzEmSJGlO+SWDNBoWc+o0/2chSZKkpcoFUCRJkiSpg+yZkyQtGW7kLUlaTE5bzCW5G3g/cLCqLm+x84DPAWuA/cAHqur19twWYCNwDLi1qh5u8St5Y1PeB4Hbqqrm9u1IkjSeXDhIkjTXhhlmeQ+wbkpsM7C7qtYCu9tjklwKbAAua9fcmeSMds1dwCZgbbtNfU1JkiRJ0pBO2zNXVV9LsmZKeD1wTTveATwK3N7i91fVEeClJPuAq5LsB86pqscAktwLXA88NOt3IElSRznsU5I0GzOdM3dhVR0AqKoDSS5o8RXA433nTbbYX7bjqXFJ0hgYZmVYCw1JksbLXK9mmQGxOkV88Iskm5LsSbLn0KFDc5acJEmSJC0WM+2Zey3J8tYrtxw42OKTwKq+81YCr7b4ygHxgapqO7AdYGJiwkVSJGkMOCRQkqTxMtNibhdwE7Ct3T/QF78vyR3ARfQWOnmyqo4lOZzkauAJ4Ebgk7PKXEuSm4RLkiRJPcNsTfBZeoudnJ9kEvgYvSJuZ5KNwMvADQBVtTfJTuB54ChwS1Uday91M29sTfAQLn4iSZIkSTM2zGqWHzzJU9ee5PytwNYB8T3A5dPKTpIkSZI00FwvgCJJkiRJGoGZzpmTJGnBDJo/64Is0sJxTru0MOyZkyRJkqQOspiTJEmSpA5ymKUkaU4s9NBH98GTJC01FnOSpCVroQtQadz4NyF1i8WcJGnszWRxhblakMGFHSRJ48piTpI0ViyeJEkajsWcJEmSNAMOS9VCs5iTpEXOni5Js+HiQtL4cmsCSZIkSeoge+YkSZI0NHv7pfFhMSdJGhnnl0iSNHcs5iRJ88Zv8CVJmj8Wc5IkjQl7LheHJKuAe4H/BPgRsL2qPp7kPOBzwBpgP/CBqnq9XbMF2AgcA26tqodb/ErgHuBs4EHgtqqqUb4fSePLYk6SNCP2ui0Mf++dcBT49ar6RpK3A08leQT4ZWB3VW1LshnYDNye5FJgA3AZcBHw1SSXVNUx4C5gE/A4vWJuHfDQyN+RpLFkMSdJ0hizeOueqjoAHGjHh5O8AKwA1gPXtNN2AI8Ct7f4/VV1BHgpyT7gqiT7gXOq6jGAJPcC12MxJ6mxmJOkRcQP/tJ4SbIGeBfwBHBhK/SoqgNJLminraDX83bcZIv9ZTueGpckwH3mJHVYkruTHEzyXF/svCSPJPl2uz+377ktSfYleTHJe/viVyZ5tj33iSQZ9XuRtPgkeRvwBeDXquoHpzp1QKxOER/0szYl2ZNkz6FDh6afrKROspiT1GX30Js/0m8zvTkpa4Hd7TFT5qSsA+5Mcka75viclLXtNvU1JWlakpxFr5D7TFV9sYVfS7K8Pb8cONjik8CqvstXAq+2+MoB8RNU1faqmqiqiWXLls3dG5E01izmJHVWVX0N+LMp4fX05qLQ7q/vi99fVUeq6iXg+JyU5bQ5KW2FuHv7rpGkaWu9+58GXqiqO/qe2gXc1I5vAh7oi29I8tYkF9P7UunJNiTzcJKr22ve2HeNJDlnTtKiM29zUpJsoteDx+rVq+c4bUmLyLuBDwHPJnm6xT4KbAN2JtkIvAzcAFBVe5PsBJ6ntxLmLW0lS4CbeWNrgodw8RNJfSzmJC0Vs56TUlXbge0AExMT7vMkaaCq+jqD2xaAa09yzVZg64D4HuDyuctO0mLiMEtJi4O0blgAAAhhSURBVM28zUmRJEkaJxZzkhYb56RIkqQlwWGWkjoryWfpbcB7fpJJ4GMs4jkpg/aQ27/tugXIRJIkjYNZFXNJ9gOHgWPA0aqaSHIe8DlgDbAf+EBVvd7O3wJsbOffWlUPz+bnS1raquqDJ3nKOSkd4kbnkiTNzFz0zP1sVX237/HxPZ62JdncHt8+ZY+ni4CvJrmk75txSdI0WQhJkrR0zcecuWnt8TQPP1+SJEmSFr3Z9swV8IdJCvhf27Ld093j6QTu5SRJWij2dkqSumK2xdy7q+rVVrA9kuRbpzjXvZwkSZIkaY7Mqpirqlfb/cEkX6I3bPK1JMtbr9wwezxJkiRJi8LU3n1XHdZ8mvGcuSQ/keTtx4+Bvw88xzT3eJrpz5ckSZKkpWw2PXMXAl/q7bHLmcB9VfWVJH/M9Pd4kqQlzT3kJEnSdM24mKuq7wDvHBD/HtPc40mSJEmSND3zsTWBJEmSJGmeWcxJkiRJUgdZzEmSJElSB812nzlJ0jxx82pJknQq9sxJkiRJUgdZzEmSJElSB1nMSZIkSVIHWcxJkiRJUge5AIokSZI0TwYtZrV/23ULkIkWI4s5SVoArlQpSZJmy2GWkiRJktRBFnOSJEmS1EEWc5IkSZLUQRZzkiRJktRBFnOSJEmS1EEWc5IkSZLUQW5NIEnzzG0IJEnSfLBnTpIkSZI6yJ45SZIkaYSmjtjYv+26BcpEXWfPnCRJkiR1kMWcJEmSJHWQxZwkSZIkdZBz5iRJkqQFNGjVY+fRaRj2zEmSJElSB1nMSZIkSVIHjXyYZZJ1wMeBM4BPVdW2UecgSVPZNkkaV7ZPS5PbF2gYIy3mkpwB/HPg54FJ4I+T7Kqq50eZhyT1s22SNK5sn3Sc8+o0yKh75q4C9lXVdwCS3A+sB2yQJC0k2yZJ48r2SSdl751GXcytAF7pezwJ/BcjzkGSprJtkjSubJ80tEG9d6MyqJC02Jx/oy7mMiBWJ5yUbAI2tYc/TPLikK9/PvDdGea2ULqWc9fyBXMeifzWtHL+T+czlxmwbTqROY9G13LuWr5db5vA9mmqruULSyTn/NbcnDMLi/33PLB9GnUxNwms6nu8Enh16klVtR3YPt0XT7KnqiZmnt7odS3nruUL5jwqXcy5j23TFOY8Gl3LuWv5QjdznsL2qU/X8gVzHpWlmvOotyb4Y2BtkouTvAXYAOwacQ6SNJVtk6RxZfsk6aRG2jNXVUeTfAR4mN7yundX1d5R5iBJU9k2SRpXtk+STmXk+8xV1YPAg/P08tMeXjAGupZz1/IFcx6VLub8V2ybTmDOo9G1nLuWL3Qz5zexfXqTruUL5jwqSzLnVJ0wh1aSJEmSNOZGPWdOkiRJkjQHOlnMJVmX5MUk+5JsHvB8knyiPf9Mkp9aiDz78jldvv9ty/OZJP82yTsXIs8pOZ0y577z/vMkx5L84ijzO0kup805yTVJnk6yN8n/OeocB+Rzun8bfz3J/5HkT1rOH16IPPvyuTvJwSTPneT5sfrbG7WutU0tp061T7ZNo2HbtLjYNo2G7dP861rb1HKa3/apqjp1ozf5998BPwm8BfgT4NIp57wPeIje3ixXA0+Meb4/DZzbjv/BQuY7bM595/0beuP4f3HccwbeATwPrG6PL+hAzh8FfqsdLwP+DHjLAub8M8BPAc+d5Pmx+dsb0/+eY/X76Vr7ZNs0VjnbNnXkZts0Pjn3nWf7NH/5jlXb1PKY1/apiz1zVwH7quo7VfUXwP3A+innrAfurZ7HgXckWT7qRJvT5ltV/7aqXm8PH6e3h8xCGuZ3DPCrwBeAg6NM7iSGyfm/Ab5YVS8DVNVC5z1MzgW8PUmAt9FrlI6ONs2+ZKq+1nI4mXH62xu1rrVN0L32ybZpNGybFhfbptGwfZp/nWubYP7bpy4WcyuAV/oeT7bYdM8ZlenmspFedb6QTptzkhXALwD/YoR5ncowv+dLgHOTPJrkqSQ3jiy7wYbJ+X8B/i69DWKfBW6rqh+NJr0ZGae/vVHrWtsE3WufbJtGw7ZpcbFtGg3bp/m3GNsmmOXf38i3JpgDGRCbuiTnMOeMytC5JPlZeg3SfzmvGZ3eMDn/HnB7VR3rffmx4IbJ+UzgSuBa4GzgsSSPV9X/Pd/JncQwOb8XeBp4D/A3gUeS/F9V9YP5Tm6Gxulvb9S61jZB99on26bRsG1aXGybRsP2af4txrYJZvn318VibhJY1fd4Jb3qe7rnjMpQuST5z4BPAf+gqr43otxOZpicJ4D7W2N0PvC+JEer6n8fTYonGPbfxXer6s+BP0/yNeCdwEJ9YBom5w8D26o3qHpfkpeAvwM8OZoUp22c/vZGrWttE3SvfbJtGg3bpsXFtmk0bJ/m32Jsm2C2f3/TmWA3Djd6Beh3gIt5Y/LjZVPOuY43TyR8cszzXQ3sA356oX+/w+Y85fx7WPhJvMP8nv8usLud++PAc8DlY57zXcBvtOMLgT8Fzl/g3/UaTj6Jd2z+9sb0v+dY/X661j7ZNo1VzrZNHbnZNo1PzlPOt32an3zHrm1qucxb+9S5nrmqOprkI8DD9Fa1ubuq9ib5H9rz/4LeCkHvo/dH/v/Sq9LHOd//GfgbwJ3t25qjVTUx5jmPlWFyrqoXknwFeAb4EfCpqhq4TOy45Az8JnBPkmfp/ZHfXlXfXaick3wWuAY4P8kk8DHgLBi/v71R61rb1HLqVPtk2zQ+OWPb1Bm2TWOV81jpWvvUxbYJ5r99SqsIJUmSJEkd0sXVLCVJkiRpybOYkyRJkqQOspiTJEmSpA6ymJMkSZKkDrKYkyRJkqQOspiTJEmSpA6ymJMkSZKkDrKYkyRJkqQO+v8BjCRqovg/iZoAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#Inspect the ranges \n", "fig,ax = plt.subplots(1,3,figsize=(15,5))\n", "ax[0].hist(data[:,0],50)\n", "ax[1].hist(data[:,1],50)\n", "ax[2].hist(data[:,2],50)" ] }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X_train.shape: torch.Size([81339, 2]), X_test.shape: torch.Size([34860, 2]), y_train.shape: torch.Size([81339]), y_test.shape: torch.Size([34860])\n" ] } ], "source": [ "#Split the data\n", "X_train, X_test, y_train, y_test = train_test_split(data[:,:2], data[:,2], test_size=0.30, random_state=0)\n", "X_train = torch.FloatTensor(X_train)\n", "y_train = torch.FloatTensor(y_train)\n", "X_test = torch.FloatTensor(X_test)\n", "y_test = torch.FloatTensor(y_test)\n", "print('X_train.shape: {}, X_test.shape: {}, y_train.shape: {}, y_test.shape: {}'.format(X_train.shape, X_test.shape, y_train.shape, y_test.shape))" ] }, { "cell_type": "code", "execution_count": 142, "metadata": {}, "outputs": [], "source": [ "class Perceptron(torch.nn.Module):\n", " def __init__(self,input_size, output_size, use_activation_fn=False):\n", " super(Perceptron, self).__init__()\n", " self.fc = nn.Linear(input_size,output_size) # Initializes weights with uniform distribution centered in zero\n", " self.activation_fn = nn.ReLU() # instead of Heaviside step fn\n", " self.use_activation_fn = use_activation_fn # If we want to use an activation function\n", " def forward(self, x):\n", " output = self.fc(x)\n", " if self.use_activation_fn:\n", " output = self.activation_fn(output) # To add the non-linearity. Try training you Perceptron with and without the non-linearity\n", " return output" ] }, { "cell_type": "code", "execution_count": 143, "metadata": {}, "outputs": [], "source": [ "# Create percetron\n", "model = Perceptron(input_size=2, output_size=1 , use_activation_fn=True)\n", "criterion = torch.nn.MSELoss()\n", "optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)" ] }, { "cell_type": "code", "execution_count": 144, "metadata": {}, "outputs": [], "source": [ "model.train()\n", "epoch = 5000\n", "all_loss=[]\n", "for epoch in range(epoch):\n", " optimizer.zero_grad()\n", " # Forward pass\n", " y_pred = model(X_train)\n", " # Compute Loss\n", " loss = criterion(y_pred.squeeze(), y_train)\n", " \n", " # Backward pass\n", " loss.backward()\n", " optimizer.step()\n", " \n", " all_loss.append(loss.item())" ] }, { "cell_type": "code", "execution_count": 145, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 145, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig,ax=plt.subplots()\n", "ax.plot(all_loss)" ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test loss after Training 0.009606563486158848\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model.eval()\n", "with torch.no_grad():\n", " y_pred = model(X_test)\n", " after_train = criterion(y_pred.squeeze(), y_test) \n", " print('Test loss after Training' , after_train.item())\n", "\n", " y_pred = y_pred.detach().numpy().squeeze()\n", " slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(y_pred, y_test)\n", "\n", " fig,ax=plt.subplots()\n", " ax.scatter(y_pred, y_test)\n", " ax.set_xlabel('Prediction')\n", " ax.set_ylabel('True')\n", " ax.set_title('slope: {:.3f}, r_value: {:.3f}'.format(slope, r_value))" ] } ], "metadata": { "anaconda-cloud": {}, "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.6" } }, "nbformat": 4, "nbformat_minor": 4 }