mirror of
https://github.com/ltcptgeneral/IdealRMT-DecisionTrees.git
synced 2026-10-08 00:28:31 +00:00
slight improvements to decision tree output
This commit is contained in:
1 parent
12b1f04356
commit
cd567526c6
1 file changed
+81
-96
+81
-96
@@ -2,7 +2,7 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 31,
|
||||
"execution_count": 11,
|
||||
"id": "d5618056",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
@@ -10,101 +10,19 @@
|
||||
"import numpy as np\n",
|
||||
"import pandas as pd\n",
|
||||
"import argparse\n",
|
||||
"from sklearn.tree import DecisionTreeClassifier, plot_tree\n",
|
||||
"from sklearn.tree import DecisionTreeClassifier, plot_tree, _tree\n",
|
||||
"from sklearn.metrics import accuracy_score\n",
|
||||
"from sklearn.tree import export_graphviz\n",
|
||||
"import pydotplus\n",
|
||||
"from matplotlib import pyplot as plt\n",
|
||||
"from labels import mac_to_label\n",
|
||||
"import json"
|
||||
"import json\n",
|
||||
"import math"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "d336971a",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# extract argument\n",
|
||||
"inputfile = \"data.csv\"\n",
|
||||
"outputfile = \"tree.json\"\n",
|
||||
"#testfile = args.t\n",
|
||||
"\n",
|
||||
"# output the tree\n",
|
||||
"def get_lineage(tree, feature_names, file):\n",
|
||||
"\n",
|
||||
" threshold = dt.tree_.threshold\n",
|
||||
" features = [feature_names[i] for i in dt.tree_.feature]\n",
|
||||
" proto = []\n",
|
||||
" src = []\n",
|
||||
" dst = []\n",
|
||||
" for i, fe in enumerate(features):\n",
|
||||
" if fe == 'proto':\n",
|
||||
" proto.append(threshold[i])\n",
|
||||
" elif fe == 'src':\n",
|
||||
" if threshold[i] != -2.0:\n",
|
||||
" src.append(threshold[i])\n",
|
||||
" else:\n",
|
||||
" dst.append(threshold[i])\n",
|
||||
" proto = [int(i) for i in proto]\n",
|
||||
" src = [int(i) for i in src]\n",
|
||||
" dst = [int(i) for i in dst]\n",
|
||||
" proto.sort()\n",
|
||||
" src.sort()\n",
|
||||
" dst.sort()\n",
|
||||
"\n",
|
||||
" data = {\"proto\": proto, \"src\":src, \"dst\": dst, \"paths\": []}\n",
|
||||
"\n",
|
||||
" left = tree.tree_.children_left\n",
|
||||
" right = tree.tree_.children_right\n",
|
||||
" threshold = tree.tree_.threshold\n",
|
||||
" features = [feature_names[i] for i in tree.tree_.feature]\n",
|
||||
" value = tree.tree_.value\n",
|
||||
"\n",
|
||||
" # get ids of child nodes\n",
|
||||
" idx = np.argwhere(left == -1)[:, 0]\n",
|
||||
" \n",
|
||||
" # traverse the tree and get the node information\n",
|
||||
" def recurse(left, right, child, lineage=None):\n",
|
||||
" if lineage is None:\n",
|
||||
" lineage = [child]\n",
|
||||
" if child in left:\n",
|
||||
" parent = np.where(left == child)[0].item()\n",
|
||||
" split = 'l'\n",
|
||||
" else:\n",
|
||||
" parent = np.where(right == child)[0].item()\n",
|
||||
" split = 'r'\n",
|
||||
" \n",
|
||||
" lineage.append((parent, split, threshold[parent], features[parent]))\n",
|
||||
" if parent == 0:\n",
|
||||
" lineage.reverse()\n",
|
||||
" return lineage\n",
|
||||
" else:\n",
|
||||
" return recurse(left, right, parent, lineage)\n",
|
||||
"\n",
|
||||
" for j, child in enumerate(idx):\n",
|
||||
" clause = []\n",
|
||||
" for node in recurse(left, right, child):\n",
|
||||
" if len(str(node)) < 3:\n",
|
||||
" continue\n",
|
||||
" i = node\n",
|
||||
" if i[1] == \"l\":\n",
|
||||
" clause.append({\"feature\": i[3], \"operation\": \"<=\", \"value\": i[2]})\n",
|
||||
" else:\n",
|
||||
" clause.append({\"feature\": i[3], \"operation\": \">\", \"value\": i[2]})\n",
|
||||
" \n",
|
||||
" a = list(value[node][0])\n",
|
||||
" ind = a.index(max(a))\n",
|
||||
" clause = {\"conditions\": clause, \"classification\": ind}\n",
|
||||
" data[\"paths\"].append(clause)\n",
|
||||
"\n",
|
||||
" return data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 12,
|
||||
"id": "b96f3403",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
@@ -118,6 +36,9 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"inputfile = \"data.csv\"\n",
|
||||
"outputfile = \"tree.json\"\n",
|
||||
"\n",
|
||||
"# Training set X and Y\n",
|
||||
"Set1 = pd.read_csv(inputfile)\n",
|
||||
"Set = Set1.values.tolist()\n",
|
||||
@@ -148,29 +69,93 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 34,
|
||||
"execution_count": 13,
|
||||
"id": "d336971a",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# output the tree\n",
|
||||
"def get_lineage(tree, feature_names):\n",
|
||||
" data = {\"features\": {}, \"paths\": []}\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",
|
||||
" # get ids of child nodes\n",
|
||||
" idx = np.argwhere(left == -1)[:, 0]\n",
|
||||
" # traverse the tree and get the node information\n",
|
||||
" def recurse(left, right, child, lineage=None):\n",
|
||||
" if lineage is None:\n",
|
||||
" lineage = [child]\n",
|
||||
" if child in left:\n",
|
||||
" parent = np.where(left == child)[0].item()\n",
|
||||
" split = 'l'\n",
|
||||
" else:\n",
|
||||
" parent = np.where(right == child)[0].item()\n",
|
||||
" split = 'r'\n",
|
||||
" \n",
|
||||
" lineage.append((parent, split, thresholds[parent], features[parent]))\n",
|
||||
" if parent == 0:\n",
|
||||
" lineage.reverse()\n",
|
||||
" return lineage\n",
|
||||
" else:\n",
|
||||
" return recurse(left, right, parent, lineage)\n",
|
||||
"\n",
|
||||
" for j, child in enumerate(idx):\n",
|
||||
" clause = []\n",
|
||||
" for node in recurse(left, right, child):\n",
|
||||
" if len(str(node)) < 3:\n",
|
||||
" continue\n",
|
||||
" direction = node[1]\n",
|
||||
" threshold = node[2]\n",
|
||||
" feature = node[3]\n",
|
||||
" if direction == \"l\": # feature <= threshold\n",
|
||||
" clause.append({\"feature\": feature, \"operation\": \"<=\", \"value\": threshold})\n",
|
||||
" else: # direction == \"r\" # feature > threshold\n",
|
||||
" threshold\n",
|
||||
" clause.append({\"feature\": feature, \"operation\": \">\", \"value\": threshold})\n",
|
||||
" \n",
|
||||
" a = list(value[node][0])\n",
|
||||
" ind = a.index(max(a))\n",
|
||||
" clause = {\"conditions\": clause, \"classification\": ind}\n",
|
||||
" data[\"paths\"].append(clause)\n",
|
||||
"\n",
|
||||
" for i, fe in enumerate(features):\n",
|
||||
" if tree.tree_.feature[i] != _tree.TREE_UNDEFINED:\n",
|
||||
" if not fe in data[\"features\"]:\n",
|
||||
" data[\"features\"][fe] = []\n",
|
||||
" data[\"features\"][fe].append(thresholds[i])\n",
|
||||
"\n",
|
||||
" return data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"id": "7f36344d",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class_names=list(mac_to_label.values())\n",
|
||||
"feature_names=['proto','src','dst']\n",
|
||||
"\n",
|
||||
"# get feature names\n",
|
||||
"feature_names = Set1.columns\n",
|
||||
"file = open(outputfile, \"w+\")\n",
|
||||
"lineage = get_lineage(dt,feature_names,file)\n",
|
||||
"file.write(json.dumps(lineage))\n",
|
||||
"lineage = get_lineage(dt, feature_names)\n",
|
||||
"file.write(json.dumps(lineage, indent = 4))\n",
|
||||
"file.close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 35,
|
||||
"execution_count": 15,
|
||||
"id": "cf8832b9",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<Figure size 2500x2000 with 1 Axes>"
|
||||
]
|
||||
@@ -181,7 +166,7 @@
|
||||
],
|
||||
"source": [
|
||||
"fig = plt.figure(figsize=(25,20))\n",
|
||||
"_ = plot_tree(dt, feature_names=feature_names, class_names=class_names, filled=True)"
|
||||
"_ = plot_tree(dt, filled=True)"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
Reference in new issue
Block a user