mirror of
https://github.com/ltcptgeneral/IdealRMT-DecisionTrees.git
synced 2026-10-08 00:28:31 +00:00
replace classes with class string instead of index
This commit is contained in:
1 parent
fadeab8a99
commit
c73de36c70
2 files changed
+33
-48
No files matched your search
+29
-9
@@ -2,7 +2,7 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"execution_count": 1,
|
||||
"id": "d5618056",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"execution_count": 2,
|
||||
"id": "b96f3403",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
@@ -72,20 +72,22 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"execution_count": 3,
|
||||
"id": "d336971a",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# output the tree\n",
|
||||
"def get_lineage(tree, feature_names):\n",
|
||||
" data = {\"features\": {}, \"paths\": []}\n",
|
||||
" data = {\"features\": {}, \"paths\": [], \"classes\": set()}\n",
|
||||
"\n",
|
||||
" thresholds = tree.tree_.threshold\n",
|
||||
" features = [feature_names[i] for i in tree.tree_.feature]\n",
|
||||
" left = tree.tree_.children_left\n",
|
||||
" right = tree.tree_.children_right\n",
|
||||
" value = tree.tree_.value\n",
|
||||
"\n",
|
||||
" data[\"classes\"] = list(tree.classes_)\n",
|
||||
" \n",
|
||||
" # get ids of child nodes\n",
|
||||
" idx = np.argwhere(left == -1)[:, 0]\n",
|
||||
@@ -137,7 +139,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"execution_count": 4,
|
||||
"id": "7f36344d",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
@@ -146,18 +148,36 @@
|
||||
"feature_names = Set1.columns\n",
|
||||
"file = open(outputfile, \"w+\")\n",
|
||||
"lineage = get_lineage(dt, feature_names)\n",
|
||||
"file.write(json.dumps(lineage, indent = 4))\n",
|
||||
"\n",
|
||||
"class SetEncoder(json.JSONEncoder):\n",
|
||||
" def default(self, obj):\n",
|
||||
" if isinstance(obj, set):\n",
|
||||
" return list(obj)\n",
|
||||
" return json.JSONEncoder.default(self, obj)\n",
|
||||
"\n",
|
||||
"file.write(json.dumps(lineage, indent = 4, cls=SetEncoder))\n",
|
||||
"file.close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 5,
|
||||
"id": "cf8832b9",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAHlkAAB4nCAYAAACvQuxAAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3UEBACAQgDC1f+ezhTzcEtCAPTOzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHjt1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8CeTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQMFkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASJssAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDCZBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiYLAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGGyDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEyWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAhMkyAAAAAAAAAAAAAAAAAAAAAAAAAAALine truncated
|
||||
"text/plain": [
|
||||
"<Figure size 10000x10000 with 1 Axes>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"fig = plt.figure(figsize=(25,20))\n",
|
||||
"fig = plt.figure(figsize=(100,100))\n",
|
||||
"_ = plot_tree(dt, filled=True)"
|
||||
]
|
||||
}
|
||||
|
||||
+4
-39
@@ -38,14 +38,14 @@
|
||||
"i = 0\n",
|
||||
"\n",
|
||||
"path_ids = set()\n",
|
||||
"path_classes = set()\n",
|
||||
"path_classes = tree[\"classes\"]\n",
|
||||
"\n",
|
||||
"# for each path in the tree\n",
|
||||
"for path in paths:\n",
|
||||
"\t# assign a path id \n",
|
||||
"\tpath[\"id\"] = i\n",
|
||||
"\tpath_ids.add(i)\n",
|
||||
"\tpath_classes.add(path[\"classification\"])\n",
|
||||
"\t#path_classes.add(path[\"classification\"])\n",
|
||||
"\ti += 1\t\n",
|
||||
"\t# for each condition\n",
|
||||
"\tconditions = path[\"conditions\"]\n",
|
||||
@@ -86,41 +86,7 @@
|
||||
"execution_count": 5,
|
||||
"id": "98cde024",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"{'dst': {'min': None, 'max': 578}, 'src': {'min': None, 'max': 60}, 'protocl': {'min': None, 'max': 0}}\n",
|
||||
"{'dst': {'min': None, 'max': 3031}, 'src': {'min': None, 'max': 60}, 'protocl': {'min': None, 'max': 0}}\n",
|
||||
"{'dst': {'min': None, 'max': 3031}, 'src': {'min': None, 'max': 60}, 'protocl': {'min': 0, 'max': None}}\n",
|
||||
"{'dst': {'min': None, 'max': 3031}, 'src': {'min': None, 'max': 60}, 'protocl': {'min': 1, 'max': None}}\n",
|
||||
"{'dst': {'min': None, 'max': 3031}, 'src': {'min': None, 'max': 67}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': None, 'max': 101}, 'src': {'min': 67, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': None, 'max': 101}, 'src': {'min': 54978, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': None, 'max': 101}, 'src': {'min': 59817, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': None, 'max': 101}, 'src': {'min': 60043, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': None, 'max': 3031}, 'src': {'min': 67, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': None, 'max': 3031}, 'src': {'min': 130, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': None, 'max': 3031}, 'src': {'min': 1223, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 3031, 'max': None}, 'src': {'min': None, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 3067, 'max': None}, 'src': {'min': None, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 5110, 'max': None}, 'src': {'min': None, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 33925, 'max': None}, 'src': {'min': None, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 46329, 'max': None}, 'src': {'min': None, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 46331, 'max': None}, 'src': {'min': None, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 49152, 'max': None}, 'src': {'min': None, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 49157, 'max': None}, 'src': {'min': None, 'max': 283}, 'protocl': {'min': None, 'max': 11}}\n",
|
||||
"{'dst': {'min': 49157, 'max': None}, 'src': {'min': None, 'max': 283}, 'protocl': {'min': 11, 'max': None}}\n",
|
||||
"{'dst': {'min': 49157, 'max': None}, 'src': {'min': None, 'max': 4566}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 56320, 'max': None}, 'src': {'min': None, 'max': 4566}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 49157, 'max': None}, 'src': {'min': 4566, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 51848, 'max': None}, 'src': {'min': 4566, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 49157, 'max': None}, 'src': {'min': 5225, 'max': None}, 'protocl': {'min': None, 'max': None}}\n",
|
||||
"{'dst': {'min': 53283, 'max': None}, 'src': {'min': 5225, 'max': None}, 'protocl': {'min': None, 'max': None}}\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# collapse all paths to ranges for each feature\n",
|
||||
"# because of how decision trees work, all conditions on a path must be true to reach the leaf node\n",
|
||||
@@ -152,8 +118,7 @@
|
||||
"\t\telif operation == \">\" and value > compressed[feature][\"max\"]:\n",
|
||||
"\t\t\tcompressed[feature][\"min\"] = value\n",
|
||||
"\n",
|
||||
"\tpath[\"compressed\"] = compressed\n",
|
||||
"\tprint(compressed)"
|
||||
"\tpath[\"compressed\"] = compressed"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user