3322 lines (3322 with data), 251.0 kB
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"gpuType": "T4"
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU",
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"e41925970dc94c2aa90b4da8acac85cf": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_c1f0f99a4a4341d18e0039a71b305111",
"IPY_MODEL_d54d01c91e694b3eb180170cddd1211c",
"IPY_MODEL_3c707baf63cf4cbf9732e39ddeb84c7c"
],
"layout": "IPY_MODEL_08955c157996426eaa089d878b8d820f"
}
},
"c1f0f99a4a4341d18e0039a71b305111": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_da9c8ff09bed4c6989b0246c7bdc8fd7",
"placeholder": "",
"style": "IPY_MODEL_b78266bbcc0e4ed0bcaab9009b30d98e",
"value": "tokenizer_config.json: 100%"
}
},
"d54d01c91e694b3eb180170cddd1211c": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_2fd8c28ebf1b47f78e2e0093608407cf",
"max": 28,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_8c728d06a0814cc8b83931b24f0115d9",
"value": 28
}
},
"3c707baf63cf4cbf9732e39ddeb84c7c": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_da4b0713ce9f47208a39ec89515c30e4",
"placeholder": "",
"style": "IPY_MODEL_b2fd795e6a534319a87213f05e824315",
"value": " 28.0/28.0 [00:00<00:00, 1.45kB/s]"
}
},
"08955c157996426eaa089d878b8d820f": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"da9c8ff09bed4c6989b0246c7bdc8fd7": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"b78266bbcc0e4ed0bcaab9009b30d98e": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"2fd8c28ebf1b47f78e2e0093608407cf": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"8c728d06a0814cc8b83931b24f0115d9": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"da4b0713ce9f47208a39ec89515c30e4": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"b2fd795e6a534319a87213f05e824315": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"0722a8ceb94345a79e5bdc3b84f71d7f": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_7c04cff87d1041b1878488f5014f9b7c",
"IPY_MODEL_0ef4539514a1462caacf58e5c3fa516b",
"IPY_MODEL_4c61a2b37c4c4ffbb3a10d270140724f"
],
"layout": "IPY_MODEL_d1288d4268e74bd384064c4f2cfbfa7b"
}
},
"7c04cff87d1041b1878488f5014f9b7c": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_1c84ce5cb56a4c7286c0f5981b8fbd5a",
"placeholder": "",
"style": "IPY_MODEL_61a01f78b9714e4aa0d869d8e6563e81",
"value": "config.json: 100%"
}
},
"0ef4539514a1462caacf58e5c3fa516b": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_180753d93be944e98c47bba836397ba0",
"max": 385,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_db137743dfc24b6b84c6c15bcd5b5766",
"value": 385
}
},
"4c61a2b37c4c4ffbb3a10d270140724f": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_16f88feb88fc43b5b381521d91b02150",
"placeholder": "",
"style": "IPY_MODEL_9b2a4006744a4940aa64fd9e41d62d4e",
"value": " 385/385 [00:00<00:00, 21.0kB/s]"
}
},
"d1288d4268e74bd384064c4f2cfbfa7b": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"1c84ce5cb56a4c7286c0f5981b8fbd5a": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"61a01f78b9714e4aa0d869d8e6563e81": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"180753d93be944e98c47bba836397ba0": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"db137743dfc24b6b84c6c15bcd5b5766": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"16f88feb88fc43b5b381521d91b02150": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"9b2a4006744a4940aa64fd9e41d62d4e": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"d55048b2772b47eab27637e9aa42d4dc": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_a70574b040b14832abb25d2eb040fb0a",
"IPY_MODEL_e5c3bf5ade9a405094a1673bc2beb795",
"IPY_MODEL_3d7c0e5ba179442eb417435ff72ae85a"
],
"layout": "IPY_MODEL_b8aea249ccf04a619c1e926e7b6b6bbe"
}
},
"a70574b040b14832abb25d2eb040fb0a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_73554830b9524f1b8b8714ff33c3b8e8",
"placeholder": "",
"style": "IPY_MODEL_15bf509be6d946e187e14fd6854950a9",
"value": "vocab.txt: 100%"
}
},
"e5c3bf5ade9a405094a1673bc2beb795": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_65855073adcd4434b8e9af65ecc59915",
"max": 226150,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_f3485f93a7374df49cc200d18e9ac49e",
"value": 226150
}
},
"3d7c0e5ba179442eb417435ff72ae85a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_53d6422031bf48dab34a3b47e237da93",
"placeholder": "",
"style": "IPY_MODEL_1ebb572142e8490199aa8ffce39df341",
"value": " 226k/226k [00:00<00:00, 3.21MB/s]"
}
},
"b8aea249ccf04a619c1e926e7b6b6bbe": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"73554830b9524f1b8b8714ff33c3b8e8": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"15bf509be6d946e187e14fd6854950a9": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"65855073adcd4434b8e9af65ecc59915": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"f3485f93a7374df49cc200d18e9ac49e": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"53d6422031bf48dab34a3b47e237da93": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"1ebb572142e8490199aa8ffce39df341": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"efe460065f0448acbf75200543187bb0": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_0e6e8bc125874564bb46431ac85524dc",
"IPY_MODEL_30d5690beb7341dc8b37de5a1e0812ab",
"IPY_MODEL_e8c76754ea784709bae0c59843c61279"
],
"layout": "IPY_MODEL_67690c975154491b96ed9091db152a0f"
}
},
"0e6e8bc125874564bb46431ac85524dc": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_74bbdf59962d41059f018e6eab297968",
"placeholder": "",
"style": "IPY_MODEL_2c20eb99653d4026ace81ccbe858b479",
"value": "pytorch_model.bin: 100%"
}
},
"30d5690beb7341dc8b37de5a1e0812ab": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_183aee869ce34eaca26f1cf533559caa",
"max": 440474434,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_d4622e6a3301483c91a66836d5724e0e",
"value": 440474434
}
},
"e8c76754ea784709bae0c59843c61279": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_d9c5d0256f534e4cbd82797e1e9f3ccd",
"placeholder": "",
"style": "IPY_MODEL_0dc7017260764c9dbdcb9167e7a40b15",
"value": " 440M/440M [00:04<00:00, 108MB/s]"
}
},
"67690c975154491b96ed9091db152a0f": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"74bbdf59962d41059f018e6eab297968": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"2c20eb99653d4026ace81ccbe858b479": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"183aee869ce34eaca26f1cf533559caa": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"d4622e6a3301483c91a66836d5724e0e": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"d9c5d0256f534e4cbd82797e1e9f3ccd": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"0dc7017260764c9dbdcb9167e7a40b15": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
}
}
}
},
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yBhXMsR3OE85",
"outputId": "f586f5e1-50a3-446a-8258-0dde1c57e636"
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-1-8174d4ba0823>:8: DtypeWarning: Columns (0,18,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,765,767,768,769,771,772,773,775,776) have mixed types. Specify dtype option on import or set low_memory=False.\n",
" df = pd.read_csv(\"/content/usecase_2_.csv\", quoting=csv.QUOTE_MINIMAL, escapechar='\\\\', on_bad_lines='skip')\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Successfully read the CSV with skipped lines.\n",
"Check the problematic rows (if any) by inspecting the original CSV file around row 785.\n"
]
}
],
"source": [
"import pandas as pd\n",
"import csv\n",
"\n",
"# Use csv.QUOTE_MINIMAL to only quote where necessary\n",
"# Try to read the file with error_bad_lines=False to skip problematic lines\n",
"# and see if you can identify the issue in the skipped rows\n",
"try:\n",
" df = pd.read_csv(\"/content/usecase_2_.csv\", quoting=csv.QUOTE_MINIMAL, escapechar='\\\\', on_bad_lines='skip')\n",
" print(\"Successfully read the CSV with skipped lines.\")\n",
" print(\"Check the problematic rows (if any) by inspecting the original CSV file around row 785.\")\n",
"except pd.errors.ParserError as e:\n",
" print(f\"Error: {e}\")\n",
" print(\"The on_bad_lines='skip' approach also failed. This likely indicates a more severe issue within the CSV file structure.\")\n",
" print(\"Possible solutions:\")\n",
" print(\" 1. Manually inspect row 785 and the surrounding rows in your CSV file for unescaped quotes or incorrect line endings.\")\n",
" print(\" 2. If you have control over the CSV generation process, ensure proper escaping of quotes and consistent line endings.\")\n",
" print(\" 3. Try using a different text editor to open the CSV file and check for any hidden characters or encoding issues.\")\n",
" print(\" 4. If the file is large, consider processing it in smaller chunks to identify the specific area causing the problem.\")\n",
"# escapechar is used to escape special characters (like quotes) within the fields.\n",
"# Using backslash here is a common choice."
]
},
{
"cell_type": "code",
"source": [
"df = df.loc[:, ~df.columns.str.contains('^Unnamed')]"
],
"metadata": {
"id": "ONTOsvE2P2hT"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"print(df.head())"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0ICHZF9HP4vp",
"outputId": "4fdf71c5-22f2-44c7-b559-8f40b5d8b75b"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" NCT Number Study Title \\\n",
"0 NCT04841499 Effects of a Seven-day BASIS™ Supplementation ... \n",
"1 NCT03020641 Peritoneal Damage in Laparoscopic Surgery \n",
"2 NCT03727620 Doxycycline in the Treatment of Aggressive Per... \n",
"3 NCT03162926 A Safety and Tolerability Study of VC-02™ Comb... \n",
"4 NCT04434313 Treatment of Hemiparetic Gait Impairments Usin... \n",
"\n",
" Study URL Acronym Study Status \\\n",
"0 https://clinicaltrials.gov/study/NCT04841499 NaN COMPLETED \n",
"1 https://clinicaltrials.gov/study/NCT03020641 NaN COMPLETED \n",
"2 https://clinicaltrials.gov/study/NCT03727620 NaN COMPLETED \n",
"3 https://clinicaltrials.gov/study/NCT03162926 NaN COMPLETED \n",
"4 https://clinicaltrials.gov/study/NCT04434313 NaN COMPLETED \n",
"\n",
" Brief Summary Study Results \\\n",
"0 The purpose of this study is to determine whet... NO \n",
"1 The investigators hypothesized that applying a... YES \n",
"2 The aim of the study was to compare the clinic... NO \n",
"3 The purpose of this trial is to test if VC-02™... NO \n",
"4 The objective of this research is to investiga... NO \n",
"\n",
" Conditions \\\n",
"0 Menopause \n",
"1 Peritoneal Damage \n",
"2 Aggressive Periodontitis \n",
"3 Type 1 Diabetes Mellitus \n",
"4 Telemedicine|Gait, Hemiplegic|Gait Disorders, ... \n",
"\n",
" Interventions \\\n",
"0 DRUG: BASIS™ (Crystalline Nicotinamide Ribosid... \n",
"1 PROCEDURE: Low pressure pneumoperitoneum|PROCE... \n",
"2 DRUG: amoxicillin plus metronidazole|DRUG: Dox... \n",
"3 COMBINATION_PRODUCT: VC-02 Combination Product... \n",
"4 DEVICE: Delivery of iStride™ device gait treat... \n",
"\n",
" Primary Outcome Measures ... Age \\\n",
"0 Production of Estradiol, To determine whether ... ... ADULT, OLDER_ADULT \n",
"1 Inflammatory Peritoneal Markers, logaritmic le... ... ADULT, OLDER_ADULT \n",
"2 Decrease of periodontal pockets ≥ 4mm, • Probi... ... CHILD, ADULT \n",
"3 Incidence of all adverse events reported for s... ... ADULT, OLDER_ADULT \n",
"4 Feasibility of safely implementing the treatme... ... ADULT, OLDER_ADULT \n",
"\n",
" Phases Enrollment Funder Type Study Type \\\n",
"0 NaN 40 OTHER INTERVENTIONAL \n",
"1 NaN 100 OTHER INTERVENTIONAL \n",
"2 PHASE1|PHASE2 24 OTHER INTERVENTIONAL \n",
"3 PHASE1 3 INDUSTRY INTERVENTIONAL \n",
"4 NaN 6 INDUSTRY INTERVENTIONAL \n",
"\n",
" Study Design Other IDs \\\n",
"0 Allocation: NA|Intervention Model: SINGLE_GROU... USAH-EH301 \n",
"1 Allocation: RANDOMIZED|Intervention Model: PAR... A-CGyD-2017 \n",
"2 Allocation: NON_RANDOMIZED|Intervention Model:... DOXYAPG18 \n",
"3 Allocation: NA|Intervention Model: SINGLE_GROU... VC02-102 \n",
"4 Allocation: NA|Intervention Model: SINGLE_GROU... MOT-TELE-2020-04-00 \n",
"\n",
" Locations \\\n",
"0 University of South Alabama, Mobile, Alabama, ... \n",
"1 Ramon y Cajal Hospital, Madrid, 28034, Spain \n",
"2 BENRACHADI Latifa, Rabat, Morocco \n",
"3 University of Alberta, Edmonton, Alberta, Canada \n",
"4 Moterum Technologies, Inc. (study location: ho... \n",
"\n",
" Study Documents Time taken for Enrollment \n",
"0 NaN 3 \n",
"1 Study Protocol and Statistical Analysis Plan, ... 27 \n",
"2 NaN 5 \n",
"3 NaN 7 \n",
"4 NaN 8 \n",
"\n",
"[5 rows x 25 columns]\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"df = df.drop(df.columns[0], axis=1)"
],
"metadata": {
"id": "k-Mb2MQbP60s"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"print(df.dtypes)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "FKeOAM3tP9-M",
"outputId": "eca2d10b-a590-4ecf-e8a6-17816e8eace6"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Study Title object\n",
"Study URL object\n",
"Acronym object\n",
"Study Status object\n",
"Brief Summary object\n",
"Study Results object\n",
"Conditions object\n",
"Interventions object\n",
"Primary Outcome Measures object\n",
"Secondary Outcome Measures object\n",
"Other Outcome Measures object\n",
"Sponsor object\n",
"Collaborators object\n",
"Sex object\n",
"Age object\n",
"Phases object\n",
"Enrollment object\n",
"Funder Type object\n",
"Study Type object\n",
"Study Design object\n",
"Other IDs object\n",
"Locations object\n",
"Study Documents object\n",
"Time taken for Enrollment object\n",
"dtype: object\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"import re\n",
"from nltk.corpus import stopwords\n",
"from nltk.tokenize import word_tokenize\n",
"import nltk\n",
"\n",
"# Download necessary NLTK data\n",
"nltk.download('stopwords')\n",
"nltk.download('punkt')\n",
"nltk.download('punkt_tab') # Download punkt_tab data\n",
"\n",
"# Define the columns to process\n",
"text_columns = [\n",
" 'Study Title', 'Study Status', 'Brief Summary', 'Study Results',\n",
" 'Conditions', 'Interventions', 'Primary Outcome Measures',\n",
" 'Funder Type', 'Study Type', 'Study Design', 'Locations'\n",
"]\n",
"\n",
"# Define a function to preprocess text (remove prepositions and stopwords)\n",
"def preprocess_text(text):\n",
" if pd.isnull(text):\n",
" return text # Skip processing for NaN values\n",
" # Tokenize and remove punctuation\n",
" words = word_tokenize(re.sub(r'[^\\w\\s]', '', text.lower()))\n",
" # Remove stopwords (including prepositions)\n",
" filtered_words = [word for word in words if word not in stopwords.words('english')]\n",
" return ' '.join(filtered_words)\n",
"\n",
"# Apply preprocessing to specified columns\n",
"for column in text_columns:\n",
" if column in df.columns:\n",
" df[column] = df[column].apply(preprocess_text)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "EK48M-dFQBJW",
"outputId": "7f1601b1-da77-474b-efc1-9ea5b28607dc"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"[nltk_data] Downloading package stopwords to /root/nltk_data...\n",
"[nltk_data] Unzipping corpora/stopwords.zip.\n",
"[nltk_data] Downloading package punkt to /root/nltk_data...\n",
"[nltk_data] Unzipping tokenizers/punkt.zip.\n",
"[nltk_data] Downloading package punkt_tab to /root/nltk_data...\n",
"[nltk_data] Unzipping tokenizers/punkt_tab.zip.\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"print(df.head)"
],
"metadata": {
"id": "oizcbyiPQE-Q",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "52cd4dd2-688f-42f9-d44a-41c064365da0"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"<bound method NDFrame.head of Study Title \\\n",
"0 effects sevenday basis supplementation menopau... \n",
"1 peritoneal damage laparoscopic surgery \n",
"2 doxycycline treatment aggressive periodontitis \n",
"3 safety tolerability study vc02 combination pro... \n",
"4 treatment hemiparetic gait impairments using t... \n",
"... ... \n",
"3098 comparative effectiveness costeffectiveness ch... \n",
"3099 impact intestinal microbiota treatment ceftria... \n",
"3100 mental balance study \n",
"3101 glymphatic kinetics healthy adult volunteers \n",
"3102 utilizing mychart assess effectiveness interve... \n",
"\n",
" Study URL Acronym Study Status \\\n",
"0 https://clinicaltrials.gov/study/NCT04841499 NaN completed \n",
"1 https://clinicaltrials.gov/study/NCT03020641 NaN completed \n",
"2 https://clinicaltrials.gov/study/NCT03727620 NaN completed \n",
"3 https://clinicaltrials.gov/study/NCT03162926 NaN completed \n",
"4 https://clinicaltrials.gov/study/NCT04434313 NaN completed \n",
"... ... ... ... \n",
"3098 https://clinicaltrials.gov/study/NCT03294785 NaN completed \n",
"3099 https://clinicaltrials.gov/study/NCT03179384 CEFIMPACT completed \n",
"3100 https://clinicaltrials.gov/study/NCT05757050 NaN completed \n",
"3101 https://clinicaltrials.gov/study/NCT03218111 NaN completed \n",
"3102 https://clinicaltrials.gov/study/NCT05222464 NaN completed \n",
"\n",
" Brief Summary Study Results \\\n",
"0 purpose study determine whether short suppleme... \n",
"1 investigators hypothesized applying low intrap... yes \n",
"2 aim study compare clinical effects systemic us... \n",
"3 purpose trial test vc02 combination product im... \n",
"4 objective research investigate feasibility del... \n",
"... ... ... \n",
"3098 multicenter randomized controlled trial assess... \n",
"3099 acute pyelonephritis apn corresponds infection... \n",
"3100 proposed design randomised doubleblind control... \n",
"3101 study done order see gadoliniumbased mri contr... \n",
"3102 vasomotor symptoms vms common consequence syst... \n",
"\n",
" Conditions \\\n",
"0 menopause \n",
"1 peritoneal damage \n",
"2 aggressive periodontitis \n",
"3 type 1 diabetes mellitus \n",
"4 telemedicinegait hemiplegicgait disorders neur... \n",
"... ... \n",
"3098 chronic neck pain \n",
"3099 pyelonephritis acute \n",
"3100 mental health wellness 1work related stress \n",
"3101 healthy \n",
"3102 breast cancer \n",
"\n",
" Interventions \\\n",
"0 drug basis crystalline nicotinamide riboside 2... \n",
"1 procedure low pressure pneumoperitoneumprocedu... \n",
"2 drug amoxicillin plus metronidazoledrug doxycy... \n",
"3 combination_product vc02 combination product a... \n",
"4 device delivery istride device gait treatment ... \n",
"... ... \n",
"3098 procedure chuna manual therapydrug conventiona... \n",
"3099 drug ceftriaxone \n",
"3100 dietary_supplement refocus verum tabletsdietar... \n",
"3101 mr imagingother ctguidance \n",
"3102 standard care treatments \n",
"\n",
" Primary Outcome Measures \\\n",
"0 production estradiol determine whether short s... \n",
"1 inflammatory peritoneal markers logaritmic lev... \n",
"2 decrease periodontal pockets 4mm probing pocke... \n",
"3 incidence adverse events reported subjects thr... \n",
"4 feasibility safely implementing treatment prot... \n",
"... ... \n",
"3098 difference visual analogue scale vas neck pain... \n",
"3099 emergence ceftriaxoneresistant enterobacteriac... \n",
"3100 change cognitive function cognitive domain fac... \n",
"3101 drug distribution time drug distribution gadol... \n",
"3102 patient engagement mychart accessibility user ... \n",
"\n",
" Secondary Outcome Measures ... \\\n",
"0 NaN ... \n",
"1 NaN ... \n",
"2 Plaque index decrease, Plaque index was assess... ... \n",
"3 NaN ... \n",
"4 Feasibility of screening criteria, To enroll p... ... \n",
"... ... ... \n",
"3098 Difference between visual analogue scale (VAS)... ... \n",
"3099 NaN ... \n",
"3100 Profile of Mood States (POMS), 35-item measure... ... \n",
"3101 NaN ... \n",
"3102 Hot Flash Severity (MyChart Feasibility), Hot ... ... \n",
"\n",
" Age Phases Enrollment Funder Type \\\n",
"0 ADULT, OLDER_ADULT NaN 40 \n",
"1 ADULT, OLDER_ADULT NaN 100 \n",
"2 CHILD, ADULT PHASE1|PHASE2 24 \n",
"3 ADULT, OLDER_ADULT PHASE1 3 industry \n",
"4 ADULT, OLDER_ADULT NaN 6 industry \n",
"... ... ... ... ... \n",
"3098 ADULT NaN 108 \n",
"3099 ADULT, OLDER_ADULT PHASE4 9 \n",
"3100 ADULT, OLDER_ADULT NaN 36 industry \n",
"3101 ADULT, OLDER_ADULT NaN 19 \n",
"3102 ADULT, OLDER_ADULT PHASE4 56 \n",
"\n",
" Study Type Study Design \\\n",
"0 interventional allocation naintervention model single_groupma... \n",
"1 interventional allocation randomizedintervention model parall... \n",
"2 interventional allocation non_randomizedintervention model pa... \n",
"3 interventional allocation naintervention model single_groupma... \n",
"4 interventional allocation naintervention model single_groupma... \n",
"... ... ... \n",
"3098 interventional allocation randomizedintervention model parall... \n",
"3099 interventional allocation naintervention model single_groupma... \n",
"3100 interventional allocation randomizedintervention model crosso... \n",
"3101 interventional allocation naintervention model single_groupma... \n",
"3102 interventional allocation naintervention model single_groupma... \n",
"\n",
" Other IDs \\\n",
"0 USAH-EH301 \n",
"1 A-CGyD-2017 \n",
"2 DOXYAPG18 \n",
"3 VC02-102 \n",
"4 MOT-TELE-2020-04-00 \n",
"... ... \n",
"3098 JS-CT-2016-14 \n",
"3099 16-AOI-02 \n",
"3100 5'000'750-1 \n",
"3101 1609017536 \n",
"3102 REaCT-Hot Flashes Pilot \n",
"\n",
" Locations \\\n",
"0 university south alabama mobile alabama 36604 ... \n",
"1 ramon cajal hospital madrid 28034 spain \n",
"2 benrachadi latifa rabat morocco \n",
"3 university alberta edmonton alberta canada \n",
"4 moterum technologies inc study location homes ... \n",
"... ... \n",
"3098 bucheon jaseng hospital korean medicine bucheo... \n",
"3099 chu de nice nice 06003 france \n",
"3100 northumbria university newcastle upon tyne tyn... \n",
"3101 weill cornell medical college new york new yor... \n",
"3102 ottawa hospital cancer centre ottawa ontario c... \n",
"\n",
" Study Documents \\\n",
"0 NaN \n",
"1 Study Protocol and Statistical Analysis Plan, ... \n",
"2 NaN \n",
"3 NaN \n",
"4 NaN \n",
"... ... \n",
"3098 NaN \n",
"3099 NaN \n",
"3100 NaN \n",
"3101 NaN \n",
"3102 NaN \n",
"\n",
" Time taken for Enrollment \n",
"0 3 \n",
"1 27 \n",
"2 5 \n",
"3 7 \n",
"4 8 \n",
"... ... \n",
"3098 10 \n",
"3099 20 \n",
"3100 6 \n",
"3101 12 \n",
"3102 5 \n",
"\n",
"[3103 rows x 24 columns]>\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"import nltk\n",
"nltk.download('wordnet') # Download the wordnet dataset\n",
"\n",
"from nltk.corpus import wordnet\n",
"\n",
"# ... (Rest of your code)\n",
"\n",
"# Function to expand synonyms for a given word\n",
"def get_synonyms(word):\n",
" synonyms = set()\n",
" for syn in wordnet.synsets(word):\n",
" for lemma in syn.lemmas():\n",
" synonyms.add(lemma.name().replace('_', ' '))\n",
" return list(synonyms)\n",
"\n",
"# Function to expand synonyms in a text\n",
"def synonym_expansion(text):\n",
" if pd.isnull(text):\n",
" return text # Skip processing for NaN values\n",
" words = text.split() # Split the cleaned text into words\n",
" expanded_text = []\n",
" for word in words:\n",
" expanded_text.append(word) # Add the original word\n",
" expanded_text.extend(get_synonyms(word)) # Add synonyms\n",
" return ' '.join(set(expanded_text)) # Deduplicate and join back to a string\n",
"\n",
"# Apply synonym expansion to the same text columns\n",
"for column in text_columns:\n",
" if column in df.columns:\n",
" df[column] = df[column].apply(synonym_expansion)\n",
"\n",
"\n"
],
"metadata": {
"id": "VxCT0bvfQJF6",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "8997c388-c278-40cb-9d6a-557b1fcea3a6"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"[nltk_data] Downloading package wordnet to /root/nltk_data...\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"from sklearn.preprocessing import LabelEncoder\n",
"\n",
"# List of columns to label encode\n",
"label_columns = ['Sex', 'Age', 'Phases', 'Enrollment']\n",
"\n",
"# Initialize a dictionary to store encoders for each column (optional: for inverse transformations later)\n",
"label_encoders = {}\n",
"\n",
"# Apply label encoding to each specified column\n",
"for column in label_columns:\n",
" if column in df.columns:\n",
" le = LabelEncoder()\n",
" df[column] = le.fit_transform(df[column].astype(str)) # Ensure all data is treated as string\n",
" label_encoders[column] = le"
],
"metadata": {
"id": "tBlxiVGRQMwy"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"columns_to_check = [\n",
" 'Sex', 'Age', 'Phases', 'Enrollment', 'Study Title', 'Study Status', 'Brief Summary',\n",
" 'Study Results', 'Conditions', 'Interventions', 'Primary Outcome Measures',\n",
" 'Funder Type', 'Study Type', 'Study Design', 'Locations', 'Time taken for Enrollment'\n",
"]\n",
"\n",
"# Filter rows where all specified columns have non-null values\n",
"filtered_df = df.dropna(subset=columns_to_check)\n",
"\n",
"# Select the top 1000 rows\n",
"top_1000_rows = filtered_df.head(1000)"
],
"metadata": {
"id": "LFnloowZQPqa"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"from transformers import AutoTokenizer, AutoModel\n",
"import torch\n",
"\n",
"# Load the PubMedBERT model and tokenizer\n",
"model_name = \"microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract-fulltext\"\n",
"tokenizer = AutoTokenizer.from_pretrained(model_name)\n",
"model = AutoModel.from_pretrained(model_name)\n",
"\n",
"# Function to generate embeddings\n",
"def generate_embedding(text, tokenizer, model):\n",
" if pd.isna(text) or text.strip() == \"\": # Handle empty or NaN values\n",
" return torch.zeros(768).tolist() # Return a zero vector if the text is empty\n",
" inputs = tokenizer(text, return_tensors=\"pt\", truncation=True, max_length=512, padding=True)\n",
" with torch.no_grad():\n",
" outputs = model(**inputs)\n",
" return outputs.last_hidden_state.mean(dim=1).squeeze().tolist() # Mean pooling of embeddings\n",
"\n",
"# Columns to process\n",
"text_columns = [\n",
" 'Study Title', 'Study Status', 'Brief Summary', 'Study Results',\n",
" 'Conditions', 'Interventions', 'Primary Outcome Measures',\n",
" 'Funder Type', 'Study Type', 'Study Design', 'Locations'\n",
"]\n",
"\n",
"# Generate embeddings for each column using PubMedBERT\n",
"for col in text_columns:\n",
" print(f\"Generating embeddings for column: {col} using PubMedBERT\")\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n",
" lambda x: generate_embedding(x, tokenizer, model)\n",
" )\n"
],
"metadata": {
"id": "WB6AGY7uQSIR",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000,
"referenced_widgets": [
"e41925970dc94c2aa90b4da8acac85cf",
"c1f0f99a4a4341d18e0039a71b305111",
"d54d01c91e694b3eb180170cddd1211c",
"3c707baf63cf4cbf9732e39ddeb84c7c",
"08955c157996426eaa089d878b8d820f",
"da9c8ff09bed4c6989b0246c7bdc8fd7",
"b78266bbcc0e4ed0bcaab9009b30d98e",
"2fd8c28ebf1b47f78e2e0093608407cf",
"8c728d06a0814cc8b83931b24f0115d9",
"da4b0713ce9f47208a39ec89515c30e4",
"b2fd795e6a534319a87213f05e824315",
"0722a8ceb94345a79e5bdc3b84f71d7f",
"7c04cff87d1041b1878488f5014f9b7c",
"0ef4539514a1462caacf58e5c3fa516b",
"4c61a2b37c4c4ffbb3a10d270140724f",
"d1288d4268e74bd384064c4f2cfbfa7b",
"1c84ce5cb56a4c7286c0f5981b8fbd5a",
"61a01f78b9714e4aa0d869d8e6563e81",
"180753d93be944e98c47bba836397ba0",
"db137743dfc24b6b84c6c15bcd5b5766",
"16f88feb88fc43b5b381521d91b02150",
"9b2a4006744a4940aa64fd9e41d62d4e",
"d55048b2772b47eab27637e9aa42d4dc",
"a70574b040b14832abb25d2eb040fb0a",
"e5c3bf5ade9a405094a1673bc2beb795",
"3d7c0e5ba179442eb417435ff72ae85a",
"b8aea249ccf04a619c1e926e7b6b6bbe",
"73554830b9524f1b8b8714ff33c3b8e8",
"15bf509be6d946e187e14fd6854950a9",
"65855073adcd4434b8e9af65ecc59915",
"f3485f93a7374df49cc200d18e9ac49e",
"53d6422031bf48dab34a3b47e237da93",
"1ebb572142e8490199aa8ffce39df341",
"efe460065f0448acbf75200543187bb0",
"0e6e8bc125874564bb46431ac85524dc",
"30d5690beb7341dc8b37de5a1e0812ab",
"e8c76754ea784709bae0c59843c61279",
"67690c975154491b96ed9091db152a0f",
"74bbdf59962d41059f018e6eab297968",
"2c20eb99653d4026ace81ccbe858b479",
"183aee869ce34eaca26f1cf533559caa",
"d4622e6a3301483c91a66836d5724e0e",
"d9c5d0256f534e4cbd82797e1e9f3ccd",
"0dc7017260764c9dbdcb9167e7a40b15"
]
},
"outputId": "4ca695b1-5a35-4c3d-d856-5e6450e388a2"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.10/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n",
"The secret `HF_TOKEN` does not exist in your Colab secrets.\n",
"To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n",
"You will be able to reuse this secret in all of your notebooks.\n",
"Please note that authentication is recommended but still optional to access public models or datasets.\n",
" warnings.warn(\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"tokenizer_config.json: 0%| | 0.00/28.0 [00:00<?, ?B/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "e41925970dc94c2aa90b4da8acac85cf"
}
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"config.json: 0%| | 0.00/385 [00:00<?, ?B/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "0722a8ceb94345a79e5bdc3b84f71d7f"
}
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"vocab.txt: 0%| | 0.00/226k [00:00<?, ?B/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "d55048b2772b47eab27637e9aa42d4dc"
}
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"pytorch_model.bin: 0%| | 0.00/440M [00:00<?, ?B/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "efe460065f0448acbf75200543187bb0"
}
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Study Title using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Study Status using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Brief Summary using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Study Results using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Conditions using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Interventions using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Primary Outcome Measures using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Funder Type using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Study Type using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Study Design using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Generating embeddings for column: Locations using PubMedBERT\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-11-7092d7125584>:28: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"{col}_embedding\"] = top_1000_rows[col].apply(\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"!pip install umap-learn"
],
"metadata": {
"id": "gfPr4CcMQWMx",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "094e9427-18ef-40b5-a216-afd5416b4b69"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Collecting umap-learn\n",
" Downloading umap_learn-0.5.7-py3-none-any.whl.metadata (21 kB)\n",
"Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from umap-learn) (1.26.4)\n",
"Requirement already satisfied: scipy>=1.3.1 in /usr/local/lib/python3.10/dist-packages (from umap-learn) (1.13.1)\n",
"Requirement already satisfied: scikit-learn>=0.22 in /usr/local/lib/python3.10/dist-packages (from umap-learn) (1.6.0)\n",
"Requirement already satisfied: numba>=0.51.2 in /usr/local/lib/python3.10/dist-packages (from umap-learn) (0.60.0)\n",
"Collecting pynndescent>=0.5 (from umap-learn)\n",
" Downloading pynndescent-0.5.13-py3-none-any.whl.metadata (6.8 kB)\n",
"Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from umap-learn) (4.67.1)\n",
"Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /usr/local/lib/python3.10/dist-packages (from numba>=0.51.2->umap-learn) (0.43.0)\n",
"Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.10/dist-packages (from pynndescent>=0.5->umap-learn) (1.4.2)\n",
"Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.22->umap-learn) (3.5.0)\n",
"Downloading umap_learn-0.5.7-py3-none-any.whl (88 kB)\n",
"\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/88.8 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m88.8/88.8 kB\u001b[0m \u001b[31m3.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25hDownloading pynndescent-0.5.13-py3-none-any.whl (56 kB)\n",
"\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/56.9 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.9/56.9 kB\u001b[0m \u001b[31m4.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25hInstalling collected packages: pynndescent, umap-learn\n",
"Successfully installed pynndescent-0.5.13 umap-learn-0.5.7\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"from sklearn.manifold import TSNE\n",
"import umap\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.metrics import pairwise_distances\n",
"import numpy as np\n",
"\n",
"# Combine all embedding columns into a single DataFrame\n",
"embedding_columns = [f\"{col}_embedding\" for col in [\n",
" 'Study Title', 'Study Status', 'Brief Summary', 'Study Results',\n",
" 'Conditions', 'Interventions', 'Primary Outcome Measures',\n",
" 'Funder Type', 'Study Type', 'Study Design', 'Locations'\n",
"]]\n",
"\n",
"# Flatten embeddings into a single numpy array\n",
"embedding_data = np.vstack(\n",
" top_1000_rows[embedding_columns].apply(\n",
" lambda row: np.concatenate(row.values), axis=1\n",
" )\n",
")\n",
"\n",
"# Use pairwise distances for elbow method\n",
"distances = pairwise_distances(embedding_data, metric='euclidean')\n",
"\n",
"# Find optimal dimensions for UMAP using the elbow method\n",
"inertia = []\n",
"dimensions = range(2, 50) # Test dimensions from 2 to 50\n",
"for dim in dimensions:\n",
" umap_reducer = umap.UMAP(n_components=dim, random_state=42)\n",
" transformed = umap_reducer.fit_transform(embedding_data)\n",
" inertia.append(np.sum(np.var(transformed, axis=0))) # Variance in reduced dimensions\n",
"\n",
"# Plot the elbow curve\n",
"plt.figure(figsize=(8, 5))\n",
"plt.plot(dimensions, inertia, marker='o')\n",
"plt.title(\"Elbow Method for UMAP Dimension Reduction\")\n",
"plt.xlabel(\"Number of Components\")\n",
"plt.ylabel(\"Sum of Variance\")\n",
"plt.grid()\n",
"plt.show()"
],
"metadata": {
"id": "g6Jg9xf1Vq8B",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "1409e037-88f0-4038-d687-3ead90037e6a"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 800x500 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArcAAAHWCAYAAABt3aEVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADUn0lEQVR4nOydd5wU9f3/X7P9ej+uAEeVXgRFUBBQUECxRGNXjEZjj2KMGmOQaKIYS772hF+MRiyJsUQUURQUVAQVAelwHAccV7jbq9vL/P6Y/czu3m2ZnZ3dnb17Px8PEm/rbJt5z+vzer/eHM/zPAiCIAiCIAiiF6BJ9QYQBEEQBEEQhFJQcUsQBEEQBEH0Gqi4JQiCIAiCIHoNVNwSBEEQBEEQvQYqbgmCIAiCIIheAxW3BEEQBEEQRK+BiluCIAiCIAii10DFLUEQBEEQBNFroOKWIAiCIAiC6DVQcUsQIeA4Dg899JD490MPPQSO49Dc3Jy6jVIpgwYNwrnnnpvw5/niiy/AcRy++OKLqLf97rvvcOqppyIrKwscx2Hr1q0J3z6i5+8mXbn22msxaNCgVG9GQjl06BA4jsMrr7yS9Od+5ZVXwHEcDh06lPTnJvoGVNwSfQa2Qw3379tvv031Jspm0KBB4DgOc+bMCXn98uXLxdf5/fffx/z4u3btwkMPPZQWByOXy4Wf//znMJvNePrpp/Haa6+hqqoqYc/Hvlfh3tdzzz23R6HEPotf/vKXIe/zwAMPiLcJd0J1ySWXgOM43HvvvSGvZycD7J9er8eQIUNwzTXX4ODBg1FfF/tOcRwHjUaD/Px8jBs3DjfeeCM2bdoU9f5E7LCCM/B9LywsxPz587Fx48ZUb17M/PnPf8b777+f6s0g+iC6VG8AQSSbP/7xjxg8eHCPy4cNG5aCrVEOk8mEdevWoaGhAWVlZUHXvf766zCZTLDb7bIee9euXVi6dClmzZqlekWruroatbW1WL58edjiUQ2YTCa88847eOGFF2AwGIKue/PNNyN+Xh0dHVi5ciUGDRqEN998E4899hg4jgt52zvuuAMnn3wyXC4XtmzZgr///e/46KOP8NNPP6GioiLiNk6cOBF33303AKCzsxO7d+/G22+/jeXLl+Ouu+7CU089FXR7m80GnS79DyvLly+H1+tN2fNffvnlWLBgATweD/bt24cXXngBs2fPxnfffYdx48albLti5c9//jMuvvhiXHDBBUGXX3311bjssstgNBpTs2FEryf990IEESPz58/HSSedlOrNUJzTTjsN3333Hf7973/j17/+tXj50aNHsWHDBlx44YV45513UriFyaGpqQkAkJ+fr9hjWiwWZGVlKfZ4ADBv3jx88MEH+Pjjj3H++eeLl3/zzTeoqanBRRddFPbzeuedd+DxePDyyy/jjDPOwPr16zFz5syQt50xYwYuvvhiAMAvfvELnHDCCbjjjjvw6quv4v7774+4jZWVlbjqqquCLlu2bBmuuOIKPP300xg+fDhuvvlm8TqTySTptasdvV6f0uefNGlS0Ps+Y8YMzJ8/Hy+++CJeeOGFFG6ZMmi1Wmi12lRvBtGLIVsCQcRAc3MzLrnkEuTm5qKoqAi//vWve6hrbrcbDz/8MIYOHQqj0YhBgwbhd7/7HRwOh3ibxYsXo6ioCDzPi5fdfvvt4DgOzzzzjHhZY2MjOI7Diy++GHXbTCYTfvazn+GNN94IuvzNN99EQUEBzj777JD327NnDy6++GIUFhbCZDLhpJNOwgcffCBe/8orr+DnP/85AGD27Nnikml37+tXX32FKVOmwGQyYciQIfjXv/7V47kOHjyIn//85ygsLERmZiamTp2Kjz76qMftjh49igsuuABZWVkoLS3FXXfdFfT+hePaa68Vi7yf//zn4DgOs2bNEq9fu3YtZsyYgaysLOTn5+P888/H7t27gx6D+at37dqFK664AgUFBZg+fXrU546VyspKnH766T0+r9dffx3jxo3D2LFjw9739ddfx9y5czF79myMGjUKr7/+uuTnPeOMMwAANTU1srY7IyMDr732GgoLC/GnP/0p6Dsczqu+b98+XHXVVcjLy0NJSQkefPBB8DyPI0eO4Pzzz0dubi7Kysrw5JNP9ng+h8OBJUuWYNiwYTAajRgwYAB++9vf9vg+cByH2267De+//z7Gjh0Lo9GIMWPGYPXq1UG36+zsxJ133olBgwbBaDSitLQUc+fOxZYtW8TbhPLcWiwW3H333RgwYACMRiNGjBiBJ554Iuj1x7IdsTBjxgwAwqpEIG1tbbjzzjvFbRo2bBiWLVvWQ3Vua2vDtddei7y8POTn52PRokVoa2vr8TyzZs0K+r0wQr0fXq8X//d//4dx48bBZDKhpKQE8+bNE+05HMfBYrHg1VdfFfcZ1157LYDwntsXXngBY8aMgdFoREVFBW699dYe2zlr1iyMHTsWu3btwuzZs5GZmYnKyko8/vjjkd9Eok9BxS3R52hvb0dzc3PQv5aWFkn3veSSS2C32/Hoo49iwYIFeOaZZ3DjjTcG3eaXv/wl/vCHP2DSpEl4+umnMXPmTDz66KO47LLLxNvMmDEDZrMZO3fuFC/bsGEDNBoNNmzYEHQZAJx++umStu+KK67A5s2bgw6Cb7zxBi6++OKQatTOnTsxdepU7N69G/fddx+efPJJZGVl4YILLsB7770nPvcdd9wBAPjd736H1157Da+99hpGjRolPs6BAwdw8cUXY+7cuXjyySdRUFCAa6+9Nuj1NTY24tRTT8Unn3yCW265BX/6059gt9tx3nnnic8FCEvbZ555Jj755BPcdttteOCBB7Bhwwb89re/jfr6f/WrX+F3v/sdAGE5/rXXXsMDDzwAAPjss89w9tlno6mpCQ899BAWL16Mb775BqeddlpIL/HPf/5zWK1W/PnPf8YNN9wQ9bnlcMUVV2DlypXo6uoCIJwYvf3227jiiivC3ufYsWNYt24dLr/8cgDCEvZ///tfOJ1OSc/JvhtFRUWytzs7OxsXXngh6urqsGvXrqi3v/TSS+H1evHYY4/hlFNOwSOPPIK//vWvmDt3LiorK7Fs2TIMGzYMv/nNb7B+/Xrxfl6vF+eddx6eeOIJLFy4EM8++ywuuOACPP3007j00kt7PM9XX32FW265BZdddhkef/xx2O12XHTRRUG/75tuugkvvvgiLrroIrzwwgv4zW9+g4yMjB4nOYHwPI/zzjsPTz/9NObNm4ennnoKI0aMwD333IPFixfL2o5YYN/PgoIC8TKr1YqZM2dixYoVuOaaa/DMM8/gtNNOw/333x+0TTzP4/zzz8drr72Gq666Co888giOHj2KRYsWydoWxvXXXy8W1suWLcN9990Hk8kk9i689tprMBqNmDFjhrjP+NWvfhX28R566CHceuutqKiowJNPPomLLroIf/vb33DWWWfB5XIF3ba1tRXz5s3DhAkT8OSTT2LkyJG499578fHHH8f1moheBE8QfYR//vOfPICQ/4xGY9BtAfBLliwR/16yZAkPgD/vvPOCbnfLLbfwAPht27bxPM/zW7du5QHwv/zlL4Nu95vf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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"optimal_dims = 40 # Example, replace with the value from the plot\n",
"\n",
"# Apply UMAP with optimal dimensions\n",
"umap_reducer = umap.UMAP(n_components=optimal_dims, random_state=42)\n",
"reduced_embeddings = umap_reducer.fit_transform(embedding_data)\n",
"\n",
"# Add reduced embeddings back to the DataFrame\n",
"for i in range(optimal_dims):\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]"
],
"metadata": {
"id": "XZbYj6Eqp9Hf",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "54e88763-5ff2-401e-e6b1-e6d3f6d1705c"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.10/dist-packages/sklearn/utils/deprecation.py:151: FutureWarning: 'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/dist-packages/umap/umap_.py:1952: UserWarning: n_jobs value 1 overridden to 1 by setting random_state. Use no seed for parallelism.\n",
" warn(\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n",
"<ipython-input-14-de94449a2449>:9: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" top_1000_rows[f\"UMAP_{i+1}\"] = reduced_embeddings[:, i]\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
"from sklearn.metrics import mean_squared_error\n",
"import tensorflow as tf\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import SimpleRNN, Dense, Dropout\n",
"from tensorflow.keras.optimizers import Adam\n",
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.pipeline import Pipeline\n",
"\n",
"# Step 1: Prepare features and target\n",
"# Select relevant columns\n",
"input_columns = [\n",
" 'Sex', 'Age', 'Phases', 'Enrollment',\n",
" 'Study Title', 'Study Status', 'Brief Summary', 'Study Results',\n",
" 'Conditions', 'Interventions', 'Primary Outcome Measures',\n",
" 'Funder Type', 'Study Type', 'Study Design'\n",
"]\n",
"\n",
"target_column = 'Time taken for Enrollment'\n",
"\n",
"# Ensure the columns exist in the dataframe after UMAP processing\n",
"input_data = top_1000_rows[input_columns]\n",
"target_data = top_1000_rows[target_column]\n",
"\n",
"# Step 2: Preprocess data\n",
"# Handling categorical features using one-hot encoding and scaling\n",
"# Columns for one-hot encoding\n",
"categorical_columns = ['Sex', 'Age', 'Phases', 'Enrollment']\n",
"\n",
"# Scale numerical features (UMAP embeddings)\n",
"scaler = StandardScaler()\n",
"\n",
"# Identify numerical columns (excluding categorical and text columns)\n",
"numerical_columns = [col for col in input_columns if col not in categorical_columns and col not in text_columns]\n",
"\n",
"# Ensure all columns are of numeric type before applying preprocessing\n",
"# Convert to numeric, replacing non-numeric values with NaN\n",
"for col in categorical_columns + numerical_columns:\n",
" input_data[col] = pd.to_numeric(input_data[col], errors='coerce')\n",
"\n",
"# Impute NaN values if any (you can use a different strategy if needed)\n",
"input_data = input_data.fillna(0)\n",
"\n",
"# Column transformer to apply one-hot encoding to categorical columns and scaling to numerical columns\n",
"preprocessor = ColumnTransformer(\n",
" transformers=[\n",
" ('cat', OneHotEncoder(handle_unknown='ignore', sparse_output=False), categorical_columns),\n",
" ('num', scaler, numerical_columns)\n",
" ])\n",
"\n",
"# Apply the preprocessor to the input data\n",
"X = preprocessor.fit_transform(input_data)\n",
"\n",
"# For the target, make sure it's in a numeric format\n",
"y = target_data.values\n",
"y = pd.to_numeric(y, errors='coerce')\n",
"\n",
"# Impute NaN values if any (you can use a different strategy if needed)\n",
"y = np.nan_to_num(y) # Replace NaN with 0\n",
"# --- End of the code to insert ---\n",
"\n",
"\n",
"# Step 3: Split data into training and testing sets (80:20)\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
],
"metadata": {
"id": "mm6YOeG_p-I0",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "eda3e0ca-7be4-454f-c7cf-3705c158c2dc"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"<ipython-input-26-207c951d05e0>:42: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" input_data[col] = pd.to_numeric(input_data[col], errors='coerce')\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"from tensorflow.keras.layers import Bidirectional, LSTM\n",
"\n",
"# Step 4: Build the BiLSTM model\n",
"bi_lstm_model = Sequential()\n",
"\n",
"# Input layer: BiLSTM expects 3D input (samples, time steps, features)\n",
"# Reshaping input to (samples, time steps, features)\n",
"bi_lstm_model.add(tf.keras.layers.Reshape((1, X_train.shape[1]), input_shape=(X_train.shape[1],)))\n",
"\n",
"# BiLSTM layer with 64 units\n",
"bi_lstm_model.add(Bidirectional(LSTM(64, activation='relu', return_sequences=False)))\n",
"\n",
"# Dropout layer to prevent overfitting\n",
"bi_lstm_model.add(Dropout(0.2))\n",
"\n",
"# Output layer: predicting a continuous value (Time taken for Enrollment)\n",
"bi_lstm_model.add(Dense(1))\n",
"\n",
"# Step 5: Compile the BiLSTM model\n",
"bi_lstm_model.compile(optimizer=Adam(), loss='mean_squared_error')\n",
"\n",
"# Step 6: Train the BiLSTM model\n",
"bi_lstm_history = bi_lstm_model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))\n",
"\n",
"# Step 7: Make predictions with the BiLSTM model and evaluate the RMSE\n",
"y_pred_bilstm = bi_lstm_model.predict(X_test)\n",
"\n",
"# Calculate RMSE (Root Mean Squared Error) for BiLSTM model\n",
"rmse_bilstm = np.sqrt(mean_squared_error(y_test, y_pred_bilstm))\n",
"print(f\"RMSE for BiLSTM: {rmse_bilstm}\")\n"
],
"metadata": {
"id": "0MpM2NkTqGYe",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "ed87b58e-5718-4f35-da94-a8a36b3648f0"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.10/dist-packages/keras/src/layers/reshaping/reshape.py:39: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
" super().__init__(**kwargs)\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 36ms/step - loss: 667.7067 - val_loss: 609.3492\n",
"Epoch 2/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 617.5209 - val_loss: 591.2498\n",
"Epoch 3/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 9ms/step - loss: 561.6722 - val_loss: 557.8972\n",
"Epoch 4/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 528.3793 - val_loss: 507.4259\n",
"Epoch 5/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 15ms/step - loss: 455.1757 - val_loss: 443.5311\n",
"Epoch 6/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - loss: 386.5001 - val_loss: 378.3217\n",
"Epoch 7/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - loss: 335.8933 - val_loss: 329.0683\n",
"Epoch 8/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 278.2339 - val_loss: 300.2128\n",
"Epoch 9/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - loss: 305.0649 - val_loss: 287.5830\n",
"Epoch 10/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - loss: 273.1591 - val_loss: 280.5639\n",
"Epoch 11/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 234.1577 - val_loss: 276.5512\n",
"Epoch 12/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - loss: 235.5674 - val_loss: 273.2498\n",
"Epoch 13/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 14ms/step - loss: 216.2296 - val_loss: 270.5114\n",
"Epoch 14/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 216.4830 - val_loss: 268.1384\n",
"Epoch 15/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 241.6802 - val_loss: 266.0169\n",
"Epoch 16/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - loss: 197.7046 - val_loss: 264.7904\n",
"Epoch 17/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - loss: 254.8440 - val_loss: 263.2259\n",
"Epoch 18/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - loss: 217.4115 - val_loss: 262.4696\n",
"Epoch 19/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 220.9622 - val_loss: 261.7163\n",
"Epoch 20/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - loss: 203.3700 - val_loss: 261.1432\n",
"Epoch 21/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 204.3532 - val_loss: 260.6401\n",
"Epoch 22/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 206.5609 - val_loss: 260.3468\n",
"Epoch 23/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 200.0678 - val_loss: 259.9577\n",
"Epoch 24/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 205.6685 - val_loss: 259.8051\n",
"Epoch 25/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - loss: 200.1108 - val_loss: 259.6185\n",
"Epoch 26/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 190.1116 - val_loss: 259.4397\n",
"Epoch 27/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 11ms/step - loss: 188.8570 - val_loss: 259.6147\n",
"Epoch 28/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - loss: 192.8143 - val_loss: 260.2402\n",
"Epoch 29/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - loss: 173.7915 - val_loss: 260.1749\n",
"Epoch 30/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - loss: 184.3625 - val_loss: 260.5374\n",
"Epoch 31/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 11ms/step - loss: 171.2388 - val_loss: 260.4700\n",
"Epoch 32/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - loss: 178.1833 - val_loss: 261.1990\n",
"Epoch 33/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - loss: 178.0006 - val_loss: 261.4209\n",
"Epoch 34/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - loss: 187.6684 - val_loss: 262.2680\n",
"Epoch 35/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - loss: 159.2341 - val_loss: 262.3969\n",
"Epoch 36/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - loss: 160.0466 - val_loss: 262.5146\n",
"Epoch 37/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 14ms/step - loss: 176.0917 - val_loss: 263.1417\n",
"Epoch 38/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - loss: 151.0455 - val_loss: 263.6153\n",
"Epoch 39/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 24ms/step - loss: 146.4944 - val_loss: 264.1271\n",
"Epoch 40/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - loss: 165.9863 - val_loss: 264.9947\n",
"Epoch 41/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - loss: 153.2215 - val_loss: 265.0475\n",
"Epoch 42/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - loss: 154.0866 - val_loss: 265.6365\n",
"Epoch 43/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 26ms/step - loss: 147.2036 - val_loss: 266.3539\n",
"Epoch 44/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - loss: 175.0763 - val_loss: 266.5692\n",
"Epoch 45/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - loss: 175.0344 - val_loss: 267.5154\n",
"Epoch 46/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 16ms/step - loss: 154.6448 - val_loss: 267.3886\n",
"Epoch 47/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - loss: 145.1259 - val_loss: 267.1888\n",
"Epoch 48/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - loss: 160.2450 - val_loss: 267.4206\n",
"Epoch 49/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - loss: 144.1925 - val_loss: 267.6102\n",
"Epoch 50/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - loss: 144.6609 - val_loss: 268.0196\n",
"\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 51ms/step\n",
"RMSE for BiLSTM: 16.37130237010102\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"model = Sequential()\n",
"\n",
"# Input layer: RNN expects 3D input (samples, time steps, features)\n",
"# Here, we'll use a single time step (1) for each sample (flatten the data to time steps)\n",
"model.add(tf.keras.layers.Reshape((1, X_train.shape[1]), input_shape=(X_train.shape[1],)))\n",
"\n",
"# RNN layer with 64 units\n",
"model.add(SimpleRNN(64, activation='relu', return_sequences=False))\n",
"\n",
"# Dropout layer to prevent overfitting\n",
"model.add(Dropout(0.3))\n",
"\n",
"# Output layer: predicting a continuous value (Time taken for Enrollment)\n",
"model.add(Dense(1))\n",
"\n",
"# Step 5: Compile the model\n",
"model.compile(optimizer=Adam(), loss='mean_squared_error')\n",
"\n",
"# Step 6: Train the model\n",
"history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))\n",
"\n",
"# Step 7: Make predictions and evaluate the model\n",
"y_pred = model.predict(X_test)\n",
"\n",
"# Calculate RMSE (Root Mean Squared Error)\n",
"rmse = np.sqrt(mean_squared_error(y_test, y_pred))\n",
"print(f\"RMSE: {rmse}\")"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "A6JHsy5sBjRs",
"outputId": "997929af-bf12-4569-90ba-779b22ada812"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.10/dist-packages/keras/src/layers/reshaping/reshape.py:39: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
" super().__init__(**kwargs)\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 26ms/step - loss: 579.7545 - val_loss: 598.7670\n",
"Epoch 2/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 5ms/step - loss: 541.1518 - val_loss: 571.0222\n",
"Epoch 3/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 532.0207 - val_loss: 529.2407\n",
"Epoch 4/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 454.2565 - val_loss: 477.3809\n",
"Epoch 5/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 415.7916 - val_loss: 424.5004\n",
"Epoch 6/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 452.6029 - val_loss: 376.9656\n",
"Epoch 7/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 358.6606 - val_loss: 340.9701\n",
"Epoch 8/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 310.2562 - val_loss: 314.1212\n",
"Epoch 9/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 305.6849 - val_loss: 297.5801\n",
"Epoch 10/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 249.7126 - val_loss: 288.5488\n",
"Epoch 11/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 14ms/step - loss: 230.8337 - val_loss: 281.9182\n",
"Epoch 12/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 264.7994 - val_loss: 277.4290\n",
"Epoch 13/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 12ms/step - loss: 230.6227 - val_loss: 274.1347\n",
"Epoch 14/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 224.2143 - val_loss: 271.3199\n",
"Epoch 15/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 218.0156 - val_loss: 269.0135\n",
"Epoch 16/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 235.3152 - val_loss: 266.9712\n",
"Epoch 17/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 251.2175 - val_loss: 265.0502\n",
"Epoch 18/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 251.1464 - val_loss: 263.4379\n",
"Epoch 19/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 220.6263 - val_loss: 261.9560\n",
"Epoch 20/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 232.6349 - val_loss: 260.8833\n",
"Epoch 21/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 230.8253 - val_loss: 259.8926\n",
"Epoch 22/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 226.6449 - val_loss: 258.7480\n",
"Epoch 23/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 211.2643 - val_loss: 258.2128\n",
"Epoch 24/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 204.0192 - val_loss: 257.8778\n",
"Epoch 25/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 246.8270 - val_loss: 257.0885\n",
"Epoch 26/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 221.6270 - val_loss: 256.7341\n",
"Epoch 27/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 190.9916 - val_loss: 256.3143\n",
"Epoch 28/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 205.6945 - val_loss: 256.1562\n",
"Epoch 29/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 238.1927 - val_loss: 255.8900\n",
"Epoch 30/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 199.9858 - val_loss: 255.9863\n",
"Epoch 31/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 218.4140 - val_loss: 256.0137\n",
"Epoch 32/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 8ms/step - loss: 233.9201 - val_loss: 255.7076\n",
"Epoch 33/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 216.9118 - val_loss: 256.2441\n",
"Epoch 34/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 214.1853 - val_loss: 255.9830\n",
"Epoch 35/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 9ms/step - loss: 216.3486 - val_loss: 256.2111\n",
"Epoch 36/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 175.9630 - val_loss: 256.3767\n",
"Epoch 37/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 9ms/step - loss: 204.1494 - val_loss: 256.2661\n",
"Epoch 38/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 6ms/step - loss: 205.1333 - val_loss: 256.2394\n",
"Epoch 39/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 194.3962 - val_loss: 256.8536\n",
"Epoch 40/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 8ms/step - loss: 192.2582 - val_loss: 257.1403\n",
"Epoch 41/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 200.7191 - val_loss: 257.0217\n",
"Epoch 42/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 179.5457 - val_loss: 257.5062\n",
"Epoch 43/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 182.3336 - val_loss: 257.6974\n",
"Epoch 44/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 186.9329 - val_loss: 258.0083\n",
"Epoch 45/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 175.0525 - val_loss: 257.9814\n",
"Epoch 46/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 208.5019 - val_loss: 258.1638\n",
"Epoch 47/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 204.7254 - val_loss: 258.5562\n",
"Epoch 48/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 185.3362 - val_loss: 258.8849\n",
"Epoch 49/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 185.8382 - val_loss: 259.3331\n",
"Epoch 50/50\n",
"\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 179.8962 - val_loss: 259.4713\n",
"\u001b[1m7/7\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 24ms/step\n",
"RMSE: 16.108112997784122\n"
]
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "cB3wFHSgCFjN"
},
"execution_count": null,
"outputs": []
}
]
}