diff --git a/Code/python/notebooks/04_error_analysis.ipynb b/Code/python/notebooks/04_error_analysis.ipynb new file mode 100644 index 0000000..afc431a --- /dev/null +++ b/Code/python/notebooks/04_error_analysis.ipynb @@ -0,0 +1,771 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "08d348cd", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from aiRNN import preprocessors" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "bb069134", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "true_x", + "rawType": "float64", + "type": "float" + }, + { + "name": "true_y", + "rawType": "float64", + "type": "float" + }, + { + "name": "true_z", + "rawType": "float64", + "type": "float" + }, + { + "name": "pred_x", + "rawType": "float64", + "type": "float" + }, + { + "name": "pred_y", + "rawType": "float64", + "type": "float" + }, + { + "name": "pred_z", + "rawType": "float64", + "type": "float" + } + ], + "ref": "14740448-3222-42dd-972b-b69f865a9b20", + "rows": [ + [ + "0", + "-4.07136344909668", + "-0.10714199393987656", + "0.009901186451315882", + "-4.071313381195068", + "-0.1070994883775711", + "0.00982444267719984" + ], + [ + "1", + "-4.0713629722595215", + "-0.10714200884103776", + "0.009901186451315882", + "-4.071313858032227", + "-0.1070997565984726", + "0.009824465028941631" + ], + [ + "2", + "-4.071362495422363", + "-0.10714201629161833", + "0.009901186451315882", + "-4.071313381195068", + "-0.10710033774375916", + "0.009824340231716633" + ], + [ + "3", + "-4.071362018585205", + "-0.10714201629161833", + "0.009901186451315882", + "-4.071313858032227", + "-0.10709811747074129", + "0.009824666194617747" + ], + [ + "4", + "-4.071361541748047", + "-0.10714202374219894", + "0.009901186451315882", + "-4.071311950683594", + "-0.1071004569530487", + "0.009824617765843868" + ], + [ + "5", + "-4.071361064910889", + "-0.10714203864336012", + "0.009901186451315882", + "-4.071310520172119", + "-0.107100710272789", + "0.00982434581965208" + ], + [ + "6", + "-4.07136058807373", + "-0.10714204609394072", + "0.009901186451315882", + "-4.071310520172119", + "-0.10710053145885468", + "0.009824211709201338" + ], + [ + "7", + "-4.071360111236572", + "-0.10714205354452132", + "0.009901186451315882", + "-4.071311473846436", + "-0.10710014402866364", + "0.009824209846556185" + ], + [ + "8", + "-4.071359634399414", + "-0.10714206844568253", + "0.009901186451315882", + "-4.071311950683594", + "-0.10709992051124571", + "0.009824250824749468" + ], + [ + "9", + "-4.071359157562256", + "-0.10714207589626312", + "0.009901186451315882", + "-4.07131290435791", + "-0.10709977149963378", + "0.00982432533055544" + ], + [ + "10", + "-4.071358680725098", + "-0.10714209079742432", + "0.009901186451315882", + "-4.07131290435791", + "-0.1070997565984726", + "0.009824340231716633" + ], + [ + "11", + "-4.0713582038879395", + "-0.10714209824800491", + "0.009901186451315882", + "-4.07131290435791", + "-0.1070997416973114", + "0.009824355132877825" + ], + [ + "12", + "-4.07135772705078", + "-0.1071421131491661", + "0.009901186451315882", + "-4.071313381195068", + "-0.10709968209266663", + "0.009824332781136038" + ], + [ + "13", + "-4.071357250213623", + "-0.1071421205997467", + "0.009901186451315882", + "-4.071313381195068", + "-0.1070996969938278", + "0.009824338369071485" + ], + [ + "14", + "-4.071356773376465", + "-0.1071421280503273", + "0.009901186451315882", + "-4.071313381195068", + "-0.1070996969938278", + "0.009824338369071485" + ], + [ + "15", + "-4.071356296539307", + "-0.10714214295148848", + "0.009901186451315882", + "-4.071313381195068", + "-0.10709966719150545", + "0.009824353270232676" + ], + [ + "16", + "-4.071356296539307", + "-0.10714215040206908", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709656774997713", + "0.009824494831264019" + ], + [ + "17", + "-4.071355819702148", + "-0.10714215785264967", + "0.009901186451315882", + "-4.071313858032227", + "-0.10709936916828156", + "0.009824671782553198" + ], + [ + "18", + "-4.07135534286499", + "-0.10714216530323029", + "0.009901186451315882", + "-4.071313858032227", + "-0.10709904134273528", + "0.009824867360293863" + ], + [ + "19", + "-4.071354389190674", + "-0.10714217275381088", + "0.009901186451315882", + "-4.071313858032227", + "-0.1070992350578308", + "0.009825271554291248" + ], + [ + "20", + "-4.071353912353516", + "-0.10714218020439148", + "0.009901186451315882", + "-4.07131290435791", + "-0.10709865391254424", + "0.009825694374740125" + ], + [ + "21", + "-4.0713534355163565", + "-0.10714218765497208", + "0.009901186451315882", + "-4.071312427520752", + "-0.10709834098815917", + "0.00982579868286848" + ], + [ + "22", + "-4.071352958679199", + "-0.10714219510555267", + "0.009901186451315882", + "-4.071312427520752", + "-0.10709817707538603", + "0.009825858287513256" + ], + [ + "23", + "-4.071352481842041", + "-0.10714220255613328", + "0.009901186451315882", + "-4.071312427520752", + "-0.10709817707538603", + "0.009825858287513256" + ], + [ + "24", + "-4.071352481842041", + "-0.10714221000671385", + "0.009901186451315882", + "-4.071314811706543", + "-0.10709813237190247", + "0.009824962355196478" + ], + [ + "25", + "-4.071352005004883", + "-0.10714221000671385", + "0.009901186451315882", + "-4.071314811706543", + "-0.107098251581192", + "0.009824880398809906" + ], + [ + "26", + "-4.071351528167725", + "-0.10714221745729446", + "0.009901186451315882", + "-4.071315288543701", + "-0.10709668695926666", + "0.009824709035456179" + ], + [ + "27", + "-4.071351528167725", + "-0.10714221745729446", + "0.009901186451315882", + "-4.071315288543701", + "-0.10709708929061888", + "0.009824770502746103" + ], + [ + "28", + "-4.071351528167725", + "-0.10714221745729446", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709868371486664", + "0.009825290180742739" + ], + [ + "29", + "-4.071351051330566", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071314811706543", + "-0.1070963740348816", + "0.009824949316680431" + ], + [ + "30", + "-4.071351051330566", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071314334869385", + "-0.1070968061685562", + "0.009825025685131548" + ], + [ + "31", + "-4.071350574493408", + "-0.10714223235845564", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709695518016817", + "0.009825008921325207" + ], + [ + "32", + "-4.071350574493408", + "-0.10714223235845564", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709667205810545", + "0.009825062938034534" + ], + [ + "33", + "-4.071350574493408", + "-0.10714223235845564", + "0.009901186451315882", + "-4.071313858032227", + "-0.10709863901138304", + "0.009825351648032664" + ], + [ + "34", + "-4.071350574493408", + "-0.10714223235845564", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709786415100096", + "0.009825329296290873" + ], + [ + "35", + "-4.071350574493408", + "-0.10714223235845564", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709673166275024", + "0.009825232438743113" + ], + [ + "36", + "-4.07135009765625", + "-0.10714223235845564", + "0.009901186451315882", + "-4.071314811706543", + "-0.1070956140756607", + "0.009824995882809162" + ], + [ + "37", + "-4.07135009765625", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071313858032227", + "-0.10709735751152039", + "0.009825254790484904" + ], + [ + "38", + "-4.07135009765625", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709798336029051", + "0.009825344197452067" + ], + [ + "39", + "-4.07135009765625", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071313858032227", + "-0.10709767043590544", + "0.009825344197452067" + ], + [ + "40", + "-4.07135009765625", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071313858032227", + "-0.10709761083126068", + "0.009825321845710276" + ], + [ + "41", + "-4.07135009765625", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071313858032227", + "-0.10709746181964874", + "0.00982531439512968" + ], + [ + "42", + "-4.07135009765625", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071314811706543", + "-0.1070948839187622", + "0.009824995882809162" + ], + [ + "43", + "-4.071349620819092", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709795355796813", + "0.009825351648032664" + ], + [ + "44", + "-4.071349620819092", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071314334869385", + "-0.1070973426103592", + "0.009825284592807295" + ], + [ + "45", + "-4.071349620819092", + "-0.10714222490787506", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709701478481291", + "0.009825254790484904" + ], + [ + "46", + "-4.07135009765625", + "-0.10714223235845564", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709661245346068", + "0.009825210087001325" + ], + [ + "47", + "-4.07135009765625", + "-0.10714223235845564", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709643363952635", + "0.009825195185840128" + ], + [ + "48", + "-4.07135009765625", + "-0.10714223235845564", + "0.009901186451315882", + "-4.071314811706543", + "-0.10709492862224577", + "0.009824988432228563" + ], + [ + "49", + "-4.07135009765625", + "-0.10714223980903624", + "0.009901186451315882", + "-4.071314334869385", + "-0.10709787905216216", + "0.009825299493968487" + ] + ], + "shape": { + "columns": 6, + "rows": 476160 + } + }, + "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", + "
true_xtrue_ytrue_zpred_xpred_ypred_z
0-4.071363-0.1071420.009901-4.071313-0.1070990.009824
1-4.071363-0.1071420.009901-4.071314-0.1071000.009824
2-4.071362-0.1071420.009901-4.071313-0.1071000.009824
3-4.071362-0.1071420.009901-4.071314-0.1070980.009825
4-4.071362-0.1071420.009901-4.071312-0.1071000.009825
.....................
476155-4.070156-0.1071350.009901-4.071300-0.1071120.009824
476156-4.070156-0.1071350.009901-4.071300-0.1071120.009824
476157-4.070157-0.1071350.009901-4.071300-0.1071120.009824
476158-4.070158-0.1071350.009901-4.071300-0.1071120.009824
476159-4.070158-0.1071350.009901-4.071300-0.1071120.009824
\n", + "

476160 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " true_x true_y true_z pred_x pred_y pred_z\n", + "0 -4.071363 -0.107142 0.009901 -4.071313 -0.107099 0.009824\n", + "1 -4.071363 -0.107142 0.009901 -4.071314 -0.107100 0.009824\n", + "2 -4.071362 -0.107142 0.009901 -4.071313 -0.107100 0.009824\n", + "3 -4.071362 -0.107142 0.009901 -4.071314 -0.107098 0.009825\n", + "4 -4.071362 -0.107142 0.009901 -4.071312 -0.107100 0.009825\n", + "... ... ... ... ... ... ...\n", + "476155 -4.070156 -0.107135 0.009901 -4.071300 -0.107112 0.009824\n", + "476156 -4.070156 -0.107135 0.009901 -4.071300 -0.107112 0.009824\n", + "476157 -4.070157 -0.107135 0.009901 -4.071300 -0.107112 0.009824\n", + "476158 -4.070158 -0.107135 0.009901 -4.071300 -0.107112 0.009824\n", + "476159 -4.070158 -0.107135 0.009901 -4.071300 -0.107112 0.009824\n", + "\n", + "[476160 rows x 6 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predictions = pd.read_csv(\"predictions_LSTM_wu900_ps1600_aw0.001.csv\")\n", + "predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "42444041", + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Must have equal len keys and value when setting with an ndarray", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mValueError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[6]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43mpredictions\u001b[49m\u001b[43m.\u001b[49m\u001b[43mloc\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtrue_lat\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtrue_lon\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtrue_alt\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m = np.array(preprocessors.denorm_coords(\n\u001b[32m 2\u001b[39m predictions[\u001b[33m\"\u001b[39m\u001b[33mtrue_x\u001b[39m\u001b[33m\"\u001b[39m], predictions[\u001b[33m\"\u001b[39m\u001b[33mtrue_y\u001b[39m\u001b[33m\"\u001b[39m], predictions[\u001b[33m\"\u001b[39m\u001b[33mtrue_z\u001b[39m\u001b[33m\"\u001b[39m]\n\u001b[32m 3\u001b[39m ))\n\u001b[32m 4\u001b[39m predictions.loc[:, [\u001b[33m\"\u001b[39m\u001b[33mpred_lat\u001b[39m\u001b[33m\"\u001b[39m, \u001b[33m\"\u001b[39m\u001b[33mpred_lon\u001b[39m\u001b[33m\"\u001b[39m, \u001b[33m\"\u001b[39m\u001b[33mpred_alt\u001b[39m\u001b[33m\"\u001b[39m]] = np.array(preprocessors.denorm_coords(\n\u001b[32m 5\u001b[39m predictions[\u001b[33m\"\u001b[39m\u001b[33mpred_x\u001b[39m\u001b[33m\"\u001b[39m], predictions[\u001b[33m\"\u001b[39m\u001b[33mpred_y\u001b[39m\u001b[33m\"\u001b[39m], predictions[\u001b[33m\"\u001b[39m\u001b[33mpred_z\u001b[39m\u001b[33m\"\u001b[39m]\n\u001b[32m 6\u001b[39m ))\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Documents/Studium/UiO/data_analysis/project3/Code/python/.venv/lib64/python3.13/site-packages/pandas/core/indexing.py:912\u001b[39m, in \u001b[36m_LocationIndexer.__setitem__\u001b[39m\u001b[34m(self, key, value)\u001b[39m\n\u001b[32m 909\u001b[39m \u001b[38;5;28mself\u001b[39m._has_valid_setitem_indexer(key)\n\u001b[32m 911\u001b[39m iloc = \u001b[38;5;28mself\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m.name == \u001b[33m\"\u001b[39m\u001b[33miloc\u001b[39m\u001b[33m\"\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m.obj.iloc\n\u001b[32m--> \u001b[39m\u001b[32m912\u001b[39m \u001b[43miloc\u001b[49m\u001b[43m.\u001b[49m\u001b[43m_setitem_with_indexer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mindexer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Documents/Studium/UiO/data_analysis/project3/Code/python/.venv/lib64/python3.13/site-packages/pandas/core/indexing.py:1943\u001b[39m, in \u001b[36m_iLocIndexer._setitem_with_indexer\u001b[39m\u001b[34m(self, indexer, value, name)\u001b[39m\n\u001b[32m 1940\u001b[39m \u001b[38;5;66;03m# align and set the values\u001b[39;00m\n\u001b[32m 1941\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m take_split_path:\n\u001b[32m 1942\u001b[39m \u001b[38;5;66;03m# We have to operate column-wise\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m1943\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_setitem_with_indexer_split_path\u001b[49m\u001b[43m(\u001b[49m\u001b[43mindexer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1944\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 1945\u001b[39m \u001b[38;5;28mself\u001b[39m._setitem_single_block(indexer, value, name)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Documents/Studium/UiO/data_analysis/project3/Code/python/.venv/lib64/python3.13/site-packages/pandas/core/indexing.py:1983\u001b[39m, in \u001b[36m_iLocIndexer._setitem_with_indexer_split_path\u001b[39m\u001b[34m(self, indexer, value, name)\u001b[39m\n\u001b[32m 1978\u001b[39m \u001b[38;5;28mself\u001b[39m._setitem_with_indexer_frame_value(indexer, value, name)\n\u001b[32m 1980\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m np.ndim(value) == \u001b[32m2\u001b[39m:\n\u001b[32m 1981\u001b[39m \u001b[38;5;66;03m# TODO: avoid np.ndim call in case it isn't an ndarray, since\u001b[39;00m\n\u001b[32m 1982\u001b[39m \u001b[38;5;66;03m# that will construct an ndarray, which will be wasteful\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m1983\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_setitem_with_indexer_2d_value\u001b[49m\u001b[43m(\u001b[49m\u001b[43mindexer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1985\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(ilocs) == \u001b[32m1\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m lplane_indexer == \u001b[38;5;28mlen\u001b[39m(value) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_scalar(pi):\n\u001b[32m 1986\u001b[39m \u001b[38;5;66;03m# We are setting multiple rows in a single column.\u001b[39;00m\n\u001b[32m 1987\u001b[39m \u001b[38;5;28mself\u001b[39m._setitem_single_column(ilocs[\u001b[32m0\u001b[39m], value, pi)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Documents/Studium/UiO/data_analysis/project3/Code/python/.venv/lib64/python3.13/site-packages/pandas/core/indexing.py:2049\u001b[39m, in \u001b[36m_iLocIndexer._setitem_with_indexer_2d_value\u001b[39m\u001b[34m(self, indexer, value)\u001b[39m\n\u001b[32m 2047\u001b[39m value = np.array(value, dtype=\u001b[38;5;28mobject\u001b[39m)\n\u001b[32m 2048\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(ilocs) != value.shape[\u001b[32m1\u001b[39m]:\n\u001b[32m-> \u001b[39m\u001b[32m2049\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 2050\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mMust have equal len keys and value when setting with an ndarray\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 2051\u001b[39m )\n\u001b[32m 2053\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m i, loc \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(ilocs):\n\u001b[32m 2054\u001b[39m value_col = value[:, i]\n", + "\u001b[31mValueError\u001b[39m: Must have equal len keys and value when setting with an ndarray" + ] + } + ], + "source": [ + "predictions.loc[:, [\"true_lat\", \"true_lon\", \"true_alt\"]] = np.array(preprocessors.denorm_coords(\n", + " predictions[\"true_x\"], predictions[\"true_y\"], predictions[\"true_z\"]\n", + "))\n", + "predictions.loc[:, [\"pred_lat\", \"pred_lon\", \"pred_alt\"]] = np.array(preprocessors.denorm_coords(\n", + " predictions[\"pred_x\"], predictions[\"pred_y\"], predictions[\"pred_z\"]\n", + "))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "2fba0521", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(predictions[\"pred_x\"], predictions[\"pred_y\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10c4199b", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "adsbpy", + "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.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Code/python/notebooks/predict.py b/Code/python/notebooks/predict.py index 761e331..2947a53 100644 --- a/Code/python/notebooks/predict.py +++ b/Code/python/notebooks/predict.py @@ -2,6 +2,7 @@ import torch import pathlib import pandas as pd from aiRNN import dataloader, models, losses +from aiRNN.preprocessors import denorm_coords import numpy as np import copy @@ -63,16 +64,17 @@ with torch.no_grad(): if X_c is not None: X_c = X_c.to(DEVICE) y_pred, _ = model(X_t, X_f, X_c, warm // step, pred // step) - results.append((y.cpu(), y_pred.cpu())) - y_true = torch.cat([r[0] for r in results], dim=0) - y_pred = torch.cat([r[1] for r in results], dim=0) - np_y_all = np.concatenate( - [y_true.numpy().reshape(-1, 3), y_pred.numpy().reshape(-1, 3)], axis=1 - ) + lat_pred, lon_pred, alt_pred = denorm_coords(y_pred[...,0], y_pred[...,1], y_pred[...,2]) + lat_true, lon_true, alt_true = denorm_coords(y[...,0], y[...,1], y[...,2]) + results.append((torch.stack([lat_true, lon_true, alt_true], dim=-1).cpu(), torch.stack([lat_pred, lon_pred, alt_pred], dim=-1).cpu())) + np_y_all = np.concatenate([ + np.concatenate([t.numpy(), p.numpy()], axis=-1) + for t, p in results + ], axis=0) np.savetxt( f"predictions_{base_name}_wu{warm}_ps{pred}_aw{altitude_weight}.csv", np_y_all, delimiter=",", - header="true_x,true_y,true_z,pred_x,pred_y,pred_z", + header="true_lat,true_lon,true_alt,pred_lat,pred_lon,pred_alt", comments="", )