{ "cells": [ { "cell_type": "markdown", "id": "e256a2ec", "metadata": {}, "source": [ "## GEE SmileCart model training and performance" ] }, { "cell_type": "code", "execution_count": 1, "id": "e9e983e9", "metadata": {}, "outputs": [], "source": [ "import sys\n", "sys.path.append(\"../src\")" ] }, { "cell_type": "code", "execution_count": 2, "id": "9655065a", "metadata": {}, "outputs": [], "source": [ "import ee\n", "import pandas as pd\n", "import geopandas\n", "\n", "import matplotlib.pyplot as plt\n", "import geemap.eefolium as geemap\n", "from geemap import geopandas_to_ee, ee_to_geopandas\n", "\n", "from plot_utils import plot_inference\n", "from inf_utils import get_model_prediction\n", "from sklearn.metrics import ConfusionMatrixDisplay\n", "from sklearn.metrics import classification_report" ] }, { "cell_type": "markdown", "id": "943f6748", "metadata": {}, "source": [ "### Initialize Earth Engine" ] }, { "cell_type": "code", "execution_count": 3, "id": "c8110fae", "metadata": {}, "outputs": [], "source": [ "ee.Initialize()" ] }, { "cell_type": "markdown", "id": "f811ccca", "metadata": {}, "source": [ "### Read training and test data" ] }, { "cell_type": "code", "execution_count": 4, "id": "8c476574", "metadata": {}, "outputs": [], "source": [ "bucket = \"sagemaker-gis\"\n", "train_data_path = \"LANDSAT_LC08_C01_T1_SR/Year2013/train_with_coord.csv\"\n", "test_data_path = \"LANDSAT_LC08_C01_T1_SR/Year2013/test_with_coord.csv\"" ] }, { "cell_type": "code", "execution_count": 5, "id": "aad7b1fd", "metadata": {}, "outputs": [], "source": [ "total_train_set_gdf = pd.read_csv(f\"s3://{bucket}/{train_data_path}\")\n", "total_test_set_gdf = pd.read_csv(f\"s3://{bucket}/{test_data_path}\")" ] }, { "cell_type": "code", "execution_count": 6, "id": "7a5a2f1a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>B1</th>\n", " <th>B2</th>\n", " <th>B3</th>\n", " <th>B4</th>\n", " <th>B5</th>\n", " <th>B6</th>\n", " <th>B7</th>\n", " <th>x</th>\n", " <th>y</th>\n", " <th>label</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>297</td>\n", " <td>324</td>\n", " <td>627</td>\n", " <td>417</td>\n", " <td>3964</td>\n", " <td>1891</td>\n", " <td>863</td>\n", " <td>-50.019239</td>\n", " <td>1.340130</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>185</td>\n", " <td>241</td>\n", " <td>423</td>\n", " <td>371</td>\n", " <td>1031</td>\n", " <td>631</td>\n", " <td>357</td>\n", " <td>-49.876127</td>\n", " <td>1.364031</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>174</td>\n", " <td>225</td>\n", " <td>515</td>\n", " <td>357</td>\n", " <td>3324</td>\n", " <td>1525</td>\n", " <td>682</td>\n", " <td>-50.335638</td>\n", " <td>1.071863</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>262</td>\n", " <td>291</td>\n", " <td>620</td>\n", " <td>358</td>\n", " <td>4443</td>\n", " <td>1650</td>\n", " <td>614</td>\n", " <td>-50.190953</td>\n", " <td>0.920134</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>262</td>\n", " <td>282</td>\n", " <td>513</td>\n", " <td>351</td>\n", " <td>3581</td>\n", " <td>1474</td>\n", " <td>589</td>\n", " <td>-50.089891</td>\n", " <td>0.778759</td>\n", " <td>1</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " B1 B2 B3 B4 B5 B6 B7 x y label\n", "0 297 324 627 417 3964 1891 863 -50.019239 1.340130 0\n", "1 185 241 423 371 1031 631 357 -49.876127 1.364031 1\n", "2 174 225 515 357 3324 1525 682 -50.335638 1.071863 0\n", "3 262 291 620 358 4443 1650 614 -50.190953 0.920134 1\n", "4 262 282 513 351 3581 1474 589 -50.089891 0.778759 1" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_train_set_gdf.head()" ] }, { "cell_type": "code", "execution_count": 7, "id": "17a15133", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>B1</th>\n", " <th>B2</th>\n", " <th>B3</th>\n", " <th>B4</th>\n", " <th>B5</th>\n", " <th>B6</th>\n", " <th>B7</th>\n", " <th>x</th>\n", " <th>y</th>\n", " <th>label</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>48</td>\n", " <td>96</td>\n", " <td>244</td>\n", " <td>175</td>\n", " <td>1236</td>\n", " <td>716</td>\n", " <td>323</td>\n", " <td>-76.727911</td>\n", " <td>21.040621</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>369</td>\n", " <td>300</td>\n", " <td>145</td>\n", " <td>89</td>\n", " <td>80</td>\n", " <td>77</td>\n", " <td>58</td>\n", " <td>-76.718213</td>\n", " <td>19.562783</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>351</td>\n", " <td>544</td>\n", " <td>1045</td>\n", " <td>1060</td>\n", " <td>4169</td>\n", " <td>3575</td>\n", " <td>2022</td>\n", " <td>-77.017011</td>\n", " <td>21.056080</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>425</td>\n", " <td>327</td>\n", " <td>124</td>\n", " <td>57</td>\n", " <td>35</td>\n", " <td>30</td>\n", " <td>23</td>\n", " <td>-77.687412</td>\n", " <td>19.686923</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>130</td>\n", " <td>173</td>\n", " <td>356</td>\n", " <td>240</td>\n", " <td>2616</td>\n", " <td>1295</td>\n", " <td>520</td>\n", " <td>-77.560585</td>\n", " <td>19.871735</td>\n", " <td>0</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " B1 B2 B3 B4 B5 B6 B7 x y label\n", "0 48 96 244 175 1236 716 323 -76.727911 21.040621 0\n", "1 369 300 145 89 80 77 58 -76.718213 19.562783 0\n", "2 351 544 1045 1060 4169 3575 2022 -77.017011 21.056080 0\n", "3 425 327 124 57 35 30 23 -77.687412 19.686923 0\n", "4 130 173 356 240 2616 1295 520 -77.560585 19.871735 0" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_test_set_gdf.head()" ] }, { "cell_type": "code", "execution_count": 8, "id": "893d4e38", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((27254, 10), (5566, 10))" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_train_set_gdf.shape, total_test_set_gdf.shape" ] }, { "cell_type": "markdown", "id": "b4fed8b7", "metadata": {}, "source": [ "### Convert pandas dataframe to geopandas dataframe" ] }, { "cell_type": "code", "execution_count": 9, "id": "236a9929", "metadata": {}, "outputs": [], "source": [ "geom = geopandas.points_from_xy(total_train_set_gdf.x, total_train_set_gdf.y)\n", "total_train_set_gdf = geopandas.GeoDataFrame(total_train_set_gdf, geometry=geom)\n", "\n", "geom = geopandas.points_from_xy(total_test_set_gdf.x, total_test_set_gdf.y)\n", "total_test_set_gdf = geopandas.GeoDataFrame(total_test_set_gdf, geometry=geom)" ] }, { "cell_type": "markdown", "id": "c979732c", "metadata": {}, "source": [ "### Select a subset of points\n", "These are restrictions imposed by smileCart." ] }, { "cell_type": "code", "execution_count": 10, "id": "519b5ce1", "metadata": {}, "outputs": [], "source": [ "n_train = 20000\n", "n_test = 5000 " ] }, { "cell_type": "markdown", "id": "e2d77400", "metadata": {}, "source": [ "### Convert geopandas dataframe to EE feature collection" ] }, { "cell_type": "code", "execution_count": 11, "id": "bfd502eb", "metadata": {}, "outputs": [], "source": [ "train_set_pts = geopandas_to_ee(total_train_set_gdf[:n_train])\n", "test_set_pts = geopandas_to_ee(total_test_set_gdf[:n_test])" ] }, { "cell_type": "markdown", "id": "f2950a3c", "metadata": {}, "source": [ "### Train classifier" ] }, { "cell_type": "code", "execution_count": 12, "id": "be973f11", "metadata": {}, "outputs": [], "source": [ "bands = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7']\n", "label = 'label'\n", "\n", "classifier = ee.Classifier.smileCart().train(train_set_pts, label, bands)" ] }, { "cell_type": "markdown", "id": "73f7a356", "metadata": {}, "source": [ "### Generate inference" ] }, { "cell_type": "code", "execution_count": 13, "id": "7060b352", "metadata": {}, "outputs": [], "source": [ "result_featurecollection = test_set_pts.select(bands).classify(classifier)" ] }, { "cell_type": "markdown", "id": "57c02410", "metadata": {}, "source": [ "### Plot confusion matrix" ] }, { "cell_type": "code", "execution_count": 14, "id": "7c507393", "metadata": {}, "outputs": [], "source": [ "prediction_gdf = ee_to_geopandas(result_featurecollection)" ] }, { "cell_type": "code", "execution_count": 15, "id": "8a316fe6", "metadata": {}, "outputs": [], "source": [ "y_true = total_test_set_gdf.loc[:n_test-1, \"label\"]\n", "y_pred = prediction_gdf[\"classification\"]" ] }, { "cell_type": "code", "execution_count": 16, "id": "6ce8d0c9", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAS8AAAEGCAYAAAA0fRMmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAYB0lEQVR4nO3deZhU1Z3G8e8LDQoIDQoooAgaBRUFwQgIKq5xSxxXEqOJjhPXiWaMkmjc4iQZAkkkhjhE0YGMywgKxg1cUBBFQECibGpc0AAqKJtoXLp/80fdhgZ7qTZUlwfez/PUw13OvfW7dfXl3FN1L4oIzMxS06DYBZiZfRkOLzNLksPLzJLk8DKzJDm8zCxJJcUuIGUqaRJq3LzYZVgd7L9Xx2KXYHWwePGbrFixQlWtc3j9E9S4Odt0Ob3YZVgdPDtjeLFLsDro1/uAatf5stHMkuTwMrMkObzMLEkOLzNLksPLzJLk8DKzJDm8zCxJDi8zS5LDy8yS5PAysyQ5vMwsSQ4vM0uSw8vMkuTwMrMkObzMLEkOLzNLksPLzJLk8DKzJDm8zCxJDi8zS5LDy8yS5PAysyQ5vMwsSQ4vM0uSw8vMkuTwMrMkObzMLEkOLzNLksPLzJLk8DKzJDm8zCxJDi8zS5LDy8yS5PAysyQ5vMwsSQ4vM0uSw8vMkuTwMrMkObzMLEkOLzNLksPLzJLk8DKzJDm8zCxJDi8zS5LDy8yS5PAysyQ5vMwsSQ4vM0uSw8vMkuTw2ooc0XcvZt57DbPHXcePvn/UF9bvslMr7r/5hzxz15U8OOJS2rdtuX7dt4/vzaz7rmXWfdfy7eN712PVW7cnpi3g66fcQM+TrufGUY99Yf2zc/7GoWcOpnWfS/jLpBc2Wnf3Q9PpdfLP6XXyz7n7oen1VXK92aLCS1JLSRdVmh8g6aFi1vRV0aCBGDrodE679Gb6nP4LTjm6F10677RRmxsuPYn/e3gm/c/4L4aMnMC1F38LgJYtmvKTHxzLkef8hiPOHspPfnAspc2bFOMwtiplZeVcMWQMY39/EdPHXM19j81m0evLNmqzy06t+ON1Z3HqNw7YaPnK1ev49a0TeOJ/LmfSqCv49a0TWLXmo/osv+C2qPACWgIX1dYoX5JKNte+iq3XPp14/e0VLF7yPp99Xsa4x+dw3KH7bdSmy27tmDrrZQCmznqFYw/ZF4Aj+uzF5BmLWLXmI1av/ZjJMxZxZN+96/0Ytjaz57/Jbru0ptPOrWncqISTj+rJI1Ne3KhNx/Y70G2PDjSQNlo+afpCBvTuSqvSZrRs0ZQBvbvyxHML6rP8gks6vCRdJmle9voRMBjYXdJcSUOzZttJulfSIkl3SrmzLKmXpCmSZkt6VFK7bPlkScMkzQIuLcqBFUC7NqUseXfl+vml766kXZvSjdrMf2UJJxzWA4ATDutOi+2a0Kq0Ge3atuTvlbZd8t4q2lW6pLTCWLZ8NR12bLV+vv2OrVi2fHV+2763ip0rbduhbUuWvbdqc5dYVMn2LCT1As4BegMCZgBnAt0iokfWZgCwP7APsBR4FugnaQbwB+DEiFguaSDwS+Bfs903joiN++Eb3vc84DwAGm1XgCMrnmt+P54hg07jjBN6M+2Fv7Hk3ZWUlZUXuyyzKiUbXkB/YHxErAOQNA44uIp2MyPi71mbuUAnYBXQDXg864g1BCoPJtxT3ZtGxC3ALQANmraNf/IY6k0+f4u/s2I13xs0EoBmTRrzzcN6sObDj1n23ir699pjfbsObVvyzOxX66fwrVg+veVqt93kHC3Z5BxuCZK+bMzTJ5Wmy8gFtoD5EdEje+0bEUdXareuXiusB3MWLGb3jm3o2H4HGpU05OSjejLh6Y3HT7YvbUYW5vzH2d/gzgdz31BNmr6Qw3p3pbR5E0qbN+Gw3l2ZNH1hvR/D1qbn3rvy2lvLWbxkBZ9+9jnjHp/DsYfsV/uG5MYpn8rGKVet+YinZiziiD57Fbji+pVyz2sqMErSYHJhdBLwfeDHeWz7MtBGUt+IeE5SI2DPiJhfuHKLq6ysnEFDxnDfTRfTsKG484HpLHr9Ha48/3jmLnyLCU+/RP9ee3Dtxd8iAqa98DeuGDIGgFVrPmLobRN5cvQgAIbcNnGL++bqq6ikpCFDBp3OKZf8kbKy4Lvf6sNeu7fjVyMeosdeHTnu0P2YM38xZw26lVVrPmLiMy8x+E8P89yYq2lV2owrzj2Gw78/BIBB5x5Dq9JmRT6izUsRyVz5fIGky9gwTjUyIoZJugvYD5gAPAxcHhEnZO2HA7MiYpSkHsBNQCm5EB8WEbdKmpxtM6u292/QtG1s0+X0zX1YVkArnx9e7BKsDvr1PoDZs2epqnVJh1exObzS4/BKS03htTWMeZnZFsjhZWZJcniZWZIcXmaWJIeXmSXJ4WVmSXJ4mVmSHF5mliSHl5klyeFlZklyeJlZkhxeZpYkh5eZJcnhZWZJcniZWZIcXmaWJIeXmSXJ4WVmSXJ4mVmSHF5mliSHl5klyeFlZklyeJlZkhxeZpYkh5eZJcnhZWZJKqluhaQ/AFHd+oi4pCAVmZnlodrwAmbVWxVmZnVUbXhFxOjK85KaRsRHhS/JzKx2tY55SeoraQGwKJvvLunmgldmZlaDfAbshwHfAN4HiIi/AocUsCYzs1rl9W1jRLy9yaKyAtRiZpa3mgbsK7wt6SAgJDUCLgUWFrYsM7Oa5dPzugC4GOgALAV6ZPNmZkVTa88rIlYA362HWszM8pbPt427SXpQ0nJJ70n6i6Td6qM4M7Pq5HPZeBcwBmgHtAfGAncXsigzs9rkE15NI+J/I+Lz7HUHsG2hCzMzq0lN9zZun01OkPRT4P/I3es4EHikHmozM6tWTQP2s8mFlbL58yutC+DKQhVlZlabmu5t7FyfhZiZ1UU+P1JFUjdgbyqNdUXEnwtVlJlZbWoNL0nXAQPIhdcjwLHAM4DDy8yKJp9vG08FjgDeiYhzgO5AaUGrMjOrRT7h9XFElAOfS2oBvAfsUtiyzMxqls+Y1yxJLYFbyX0D+SHwXCGLMjOrTT73Nl6UTY6QNBFoEREvFrYsM7Oa1fQj1Z41rYuIOYUpycysdjX1vH5bw7oADt/MtSRnv6678OTUYcUuw+qg1WHXFrsEq4NPXlla7bqafqR6WEGqMTPbDPyPzppZkhxeZpYkh5eZJSmfJ6lK0pmSrs3mO0o6sPClmZlVL5+e181AX+A72fxa4I8Fq8jMLA/5/MK+d0T0lPQCQESslNS4wHWZmdUon57XZ5IakvttF5LaAOUFrcrMrBb5hNdNwHigraRfknsczq8KWpWZWS3yubfxTkmzyT0WR8C/RIT/xWwzK6p8HkbYEfgIeLDysoh4q5CFmZnVJJ8B+4fZ8A9xbAt0Bl4G9ilgXWZmNcrnsnHfyvPZ0yYuqqa5mVm9qPMv7LNH4fQuQC1mZnnLZ8zrskqzDYCeQPXPqTAzqwf5jHk1rzT9ObkxsPsKU46ZWX5qDK/sx6nNI+LyeqrHzCwv1Y55SSqJiDKgXz3WY2aWl5p6XjPJjW/NlfQAMBZYV7EyIsYVuDYzs2rlM+a1LfA+uWfWV/zeKwCHl5kVTU3h1Tb7pnEeG0KrQhS0KjOzWtQUXg2B7dg4tCo4vMysqGoKr2URcUO9VWJmVgc1/cK+qh6XmdlXQk3hdUS9VWFmVkfVhldEfFCfhZiZ1YX/6TMzS5LDy8yS5PAysyQ5vMwsSQ4vM0uSw8vMkuTwMrMkObzMLEkOLzNLksPLzJLk8DKzJDm8zCxJDi8zS5LDy8yS5PAysyQ5vMwsSQ4vM0uSw8vMkuTwMrMkObzMLEkOLzNLksPLzJLk8DKzJDm8tiJPTV/Iwd/5Jf0G/oLh//vEF9ZPn/sa3/jX39Dx0Mt46Km5X1i/dt0/6HXSdfzsd/fWQ7UGcMTXv8bM0Zcw+45L+dF3Dv7C+p3blvLA785hyi0X8szIiziq9x7r1+2z2448OvwHTPuff+fZ2y5mm0Yl9Vl6wW1ZR2PVKisr52e/u5e7b7yQdm1bcty//Y6j+3djz847rW/TYceW3HjVGYy4+8kq9zH01kfo0333+ip5q9eggRh66QmcdMVoli5fw5MjzmfCtEW8vHj5+jY/PutQ7p88j9sfeJ4uu7ZhzOAz6f6dG2nYoAF/uuoULviv+5j32ru0atGEz8rKing0m98W2fOS5FDexAsLF9Np59bs2qE1jRuVcOKR+/PoMy9t1GaXdjuw99fa06CBvrD9i4veZvnKtRxyYJf6Knmr16vrzry+9AMWL1vJZ5+XMe7JlziuX9eNG0XQvOk2ALRoti3vrFgLwOFf3535r7/LvNfeBWDlmo8pL496rb/QChZekjpJWiRplKRXJN0p6UhJz0p6VdKB2es5SS9ImiapS7bt2ZLGSZqYtR1Sab/nZvubKelWScOz5aMkjZA0AxgiqYek6ZJelDReUitJXSXN3KTGl7LpXpKmSJot6VFJ7Qr12RTDO8tX075tq/Xz7dq05J3lq/Patry8nBuG3881F59YqPKsCu1aN2fJexvO0dLla2jXusVGbQaPeorTj+rOvDE/ZszgMxn0h4cB2H3n1kQE9w75HpP/dAGXfLt/vdZeHwrd8/oa8Fuga/Y6A+gPXA5cBSwCDo6I/YFrgV9V2rYHMBDYFxgoaRdJ7YFrgD5Av2yfle0MHBQRlwF/Bn4SEfsBLwHXRcQioLGkzln7gcA9khoBfwBOjYhewO3AL6s6IEnnSZoladb7K1Z8yY8lLaPHP8vhffemfduWxS7FNnHKEftx18QX6Hb6bzn9p3cw4spTkERJwwb02XdXzvvFvRx7yW0c338vDum5W7HL3awKfXn1RkRU9GzmA5MiIrLeTiegFBgtaQ8ggEaVtp0UEauzbRcAuwKtgSkR8UG2fCywZ6VtxkZEmaRSoGVETMmWjwbGZtNjyIXW4OzPgUAXoBvwuCSAhsCyqg4oIm4BbgHo0bNXMv3wndqUsvS9levnly1fxU5tSvPadva8N5nx19cYPf4Z1n38KZ999jnNmmzDVRd+s1DlGrBsxVo6tN1wjtq3acGyFWs2anPmcT05bdCfAXh+wdts27iEHUqbsnT5aqa9+CYfrPkIgMdnvEL3Pdrx9JzX6+8ACqzQPa9PKk2XV5ovJxec/wk8FRHdgG8C21azbRn5Be26PNrcA5wuaU8gIuJVQMD8iOiRvfaNiKPz2FcyenTtyBtvr+Ctpe/z6Wef85cnXuDoft3y2nb4dWfx/LjrmXHvdVxz8bc49ZivO7jqwZxFS9i9w/Z03KkljUoacvLh+zJh2qKN2ix5d/X6HtWeHVuzTeMSVqxax6Tn/8benXekyTaNaNigAf26d9pooH9LUOyB7VJgSTZ9dh7tnweGSWoFrAVOIXdJuJGIWC1ppaSDI2IqcBYwJVv3mqQycpef92SbvAy0kdQ3Ip7LLiP3jIj5/8SxfaWUlDTkF5edwhmXjaC8vJyBx/emy27tGDryEbp37cjR/bsxd+FbnHvVbaxe+zGPPzuf3942kafu+GmxS99qlZWXM+imh7lvyPdo2KABd06Yw6I3l3PlOYcz9+UlTJj2Mlf/90R+f/mJXHTaQUQEF/96PACrP/wHN4+dxqQR50MEj894lcemv1LkI9q8FFGYKx9JnYCHsl4VkkZl8/dWrAN+QO6Sbh3wMHBmRHSSdDZwQET8e7btQ8BvImKypPOAK4APyI2Z/T0iflZ5/9k2PYARQFPgdeCciFiZrbscGAp0jog3K7W/iVyglgDDIuLWmo6xR89e8eTUGf/U52T1q8MxNxS7BKuDT+aOpHzt0i9+/U0Bw6tQJG0XER9mP4cYD9weEeOLUYvDKz0Or7TUFF4p/s7reklzgXnAG8D9Ra3GzIqi2GNedRYRlxe7BjMrvhR7XmZmDi8zS5PDy8yS5PAysyQ5vMwsSQ4vM0uSw8vMkuTwMrMkObzMLEkOLzNLksPLzJLk8DKzJDm8zCxJDi8zS5LDy8yS5PAysyQ5vMwsSQ4vM0uSw8vMkuTwMrMkObzMLEkOLzNLksPLzJLk8DKzJDm8zCxJDi8zS5LDy8yS5PAysyQ5vMwsSQ4vM0uSw8vMkuTwMrMkObzMLEkOLzNLksPLzJLk8DKzJDm8zCxJDi8zS5LDy8yS5PAysyQ5vMwsSQ4vM0uSw8vMkuTwMrMkObzMLEkOLzNLksPLzJKkiCh2DcmStBxYXOw6CqA1sKLYRVidbKnnbNeIaFPVCoeXfYGkWRFxQLHrsPxtjefMl41mliSHl5klyeFlVbml2AVYnW1158xjXmaWJPe8zCxJDi8zS5LDayskqaWkiyrND5D0UDFrMqsrh9fWqSVwUW2N8iWpZHPtyzavLfncOLy2ApIukzQve/0IGAzsLmmupKFZs+0k3StpkaQ7JSnbtpekKZJmS3pUUrts+WRJwyTNAi4tyoElQlKn7HMdJemV7PM9UtKzkl6VdGD2ek7SC5KmSeqSbXu2pHGSJmZth1Ta77nZ/mZKulXS8Gz5KEkjJM0AhkjqIWm6pBcljZfUSlJXSTM3qfGlbLrKc/6VExF+bcEvoBfwEtAM2A6YD+wPzKvUZgCwGtiZ3F9ozwH9gUbANKBN1m4gcHs2PRm4udjHl8IL6AR8Duybfb6zgdsBAScC9wMtgJKs/ZHAfdn02cDrQCmwLbnb0XYB2gNvAttn52kqMDzbZhTwENAwm38RODSbvgEYlk3PBTpn0z8Brq7pnH/VXltsl9LW6w+Mj4h1AJLGAQdX0W5mRPw9azOX3P9wq4BuwONZR6whsKzSNvcUqugt0BsRUdGzmQ9MiojIejudyIXTaEl7AEEuRCpMiojV2bYLgF3J3cs4JSI+yJaPBfastM3YiCiTVAq0jIgp2fLRwNhsegy5cBqc/TkQ6ELN5/wrw+FlFT6pNF1G7r8NAfMjom8126wreFVbjsqfb3ml+XJyn/V/Ak9FxEmSOpHr2Va1bcW5qU0+5+YeYGz2F1pExKuS9qXmc/6V4TGvLd9U4F8kNZXUDDgJeBZonse2LwNtJPUFkNRI0j6FK3WrVgosyabPzqP988Ch2fhVCXBKVY2yHttKSRW97bOAKdm618iF4TVs6EUnc87d89rCRcQcSaOAisHZkRExOxssngdMAB6uZttPJZ0K3JRdfpQAw8iNm9nmNYTcZePVVHM+KouIJZJ+Re68fgAsIjduWZXvAyMkNSU3fnZOpXX3AEOBztl+kznnvj3ILFGStouID7Oe13hyA+vji11XffFlo1m6rs++XJkHvEHuW8uthnteZpYk97zMLEkOLzNLksPLzJLk8LKCkVSW3T85T9LY7Kv6L7uvUdlX+EgaKWnvGtoOkHTQl3iPNyW1znf5Jm0+rON7XS/p8rrWaBs4vKyQPo6IHhHRDfgUuKDyyi/7xIOI+LeIWFBDkwFAncPL0uLwsvoyFfha1iuaKukBYIGkhpKGSno+e+rB+QDKGS7pZUlPAG0rdpQ90eKAbPoYSXMk/VXSpOzWmguA/8h6fQdLaiPpvuw9npfUL9t2B0mPSZovaSS526FqJOn+7GkL8yWdt8m6G7PlkyS1yZbtrtwTIWZnx911s3ya5qdK+FW4F/Bh9mcJ8BfgQnK9onVseJrBecDV2fQ2wCxyv/Y+GXic3I3B7cndJH5q1m4ycADQBni70r62z/68Hri8Uh13Af2z6Y7Awmz6JuDabPp4cjdEt67iON6sWF7pPZqQ+33VDtl8AN/Npq9lwxMeJgF7ZNO9gSerqtGvur98e5AVUpPsR5SQ63ndRu5ybmZEvJEtPxrYr2I8i9w9fnsAhwB3R0QZsFTSk1Xsvw/wdMW+InvCQhWOBPbOnpIA0ELSdtl7nJxt+7CklXkc0yWSTsqmd8lqfZ/cDdYV9wfeAYzL3uMgcjc/V2y/TR7vYXlweFkhfRwRPSovyP4nrvzEAwE/jIhHN2l33GasowHQJyL+UUUteZM0gFwQ9o2IjyRNJveMrapE9r6rNv0MbPPwmJcV26PAhZIaAUjaM3v6xdPAwGxMrB1wWBXbTgcOkdQ523b7bPlaNn5qxmPADytmJPXIJp8GzsiWHQu0qqXWUmBlFlxdyfX8KjQAKnqPZwDPRMQa4A1Jp2XvIUnda3kPy5PDy4ptJLAAmJM95eJP5K4IxgOvZuv+TO7prhuJiOXkxszGSforGy7bHgROqhiwBy4BDsi+EFjAhm89f04u/OaTu3x8q5ZaJwIlkhaSe4Df9Err1gEHZsdwOLknlgJ8Fzg3q28+uSen2mbgexvNLEnueZlZkhxeZpYkh5eZJcnhZWZJcniZWZIcXmaWJIeXmSXp/wElmzh/32UCRQAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ConfusionMatrixDisplay.from_predictions(y_true, y_pred, \n", " normalize=\"true\", \n", " values_format=\".2f\",\n", " display_labels=[\"other\", \"mangrove\"],\n", " colorbar=False,\n", " cmap = plt.get_cmap('Blues'));" ] }, { "cell_type": "code", "execution_count": null, "id": "cc3bac0a", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "conda_gis", "language": "python", "name": "conda_gis" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.12" } }, "nbformat": 4, "nbformat_minor": 5 }