mirror of
https://github.com/hsokolowski/iTree.git
synced 2025-12-23 22:18:01 -05:00
updated readme
This commit is contained in:
151
public/sets/iris_dataset.csv
Normal file
151
public/sets/iris_dataset.csv
Normal file
@@ -0,0 +1,151 @@
|
||||
sepal length (cm),sepal width (cm),petal length (cm),petal width (cm),variety
|
||||
5.1,3.5,1.4,0.2,setosa
|
||||
4.9,3,1.4,0.2,setosa
|
||||
4.7,3.2,1.3,0.2,setosa
|
||||
4.6,3.1,1.5,0.2,setosa
|
||||
5,3.6,1.4,0.2,setosa
|
||||
5.4,3.9,1.7,0.4,setosa
|
||||
4.6,3.4,1.4,0.3,setosa
|
||||
5,3.4,1.5,0.2,setosa
|
||||
4.4,2.9,1.4,0.2,setosa
|
||||
4.9,3.1,1.5,0.1,setosa
|
||||
5.4,3.7,1.5,0.2,setosa
|
||||
4.8,3.4,1.6,0.2,setosa
|
||||
4.8,3,1.4,0.1,setosa
|
||||
4.3,3,1.1,0.1,setosa
|
||||
5.8,4,1.2,0.2,setosa
|
||||
5.7,4.4,1.5,0.4,setosa
|
||||
5.4,3.9,1.3,0.4,setosa
|
||||
5.1,3.5,1.4,0.3,setosa
|
||||
5.7,3.8,1.7,0.3,setosa
|
||||
5.1,3.8,1.5,0.3,setosa
|
||||
5.4,3.4,1.7,0.2,setosa
|
||||
5.1,3.7,1.5,0.4,setosa
|
||||
4.6,3.6,1,0.2,setosa
|
||||
5.1,3.3,1.7,0.5,setosa
|
||||
4.8,3.4,1.9,0.2,setosa
|
||||
5,3,1.6,0.2,setosa
|
||||
5,3.4,1.6,0.4,setosa
|
||||
5.2,3.5,1.5,0.2,setosa
|
||||
5.2,3.4,1.4,0.2,setosa
|
||||
4.7,3.2,1.6,0.2,setosa
|
||||
4.8,3.1,1.6,0.2,setosa
|
||||
5.4,3.4,1.5,0.4,setosa
|
||||
5.2,4.1,1.5,0.1,setosa
|
||||
5.5,4.2,1.4,0.2,setosa
|
||||
4.9,3.1,1.5,0.2,setosa
|
||||
5,3.2,1.2,0.2,setosa
|
||||
5.5,3.5,1.3,0.2,setosa
|
||||
4.9,3.6,1.4,0.1,setosa
|
||||
4.4,3,1.3,0.2,setosa
|
||||
5.1,3.4,1.5,0.2,setosa
|
||||
5,3.5,1.3,0.3,setosa
|
||||
4.5,2.3,1.3,0.3,setosa
|
||||
4.4,3.2,1.3,0.2,setosa
|
||||
5,3.5,1.6,0.6,setosa
|
||||
5.1,3.8,1.9,0.4,setosa
|
||||
4.8,3,1.4,0.3,setosa
|
||||
5.1,3.8,1.6,0.2,setosa
|
||||
4.6,3.2,1.4,0.2,setosa
|
||||
5.3,3.7,1.5,0.2,setosa
|
||||
5,3.3,1.4,0.2,setosa
|
||||
7,3.2,4.7,1.4,versicolor
|
||||
6.4,3.2,4.5,1.5,versicolor
|
||||
6.9,3.1,4.9,1.5,versicolor
|
||||
5.5,2.3,4,1.3,versicolor
|
||||
6.5,2.8,4.6,1.5,versicolor
|
||||
5.7,2.8,4.5,1.3,versicolor
|
||||
6.3,3.3,4.7,1.6,versicolor
|
||||
4.9,2.4,3.3,1,versicolor
|
||||
6.6,2.9,4.6,1.3,versicolor
|
||||
5.2,2.7,3.9,1.4,versicolor
|
||||
5,2,3.5,1,versicolor
|
||||
5.9,3,4.2,1.5,versicolor
|
||||
6,2.2,4,1,versicolor
|
||||
6.1,2.9,4.7,1.4,versicolor
|
||||
5.6,2.9,3.6,1.3,versicolor
|
||||
6.7,3.1,4.4,1.4,versicolor
|
||||
5.6,3,4.5,1.5,versicolor
|
||||
5.8,2.7,4.1,1,versicolor
|
||||
6.2,2.2,4.5,1.5,versicolor
|
||||
5.6,2.5,3.9,1.1,versicolor
|
||||
5.9,3.2,4.8,1.8,versicolor
|
||||
6.1,2.8,4,1.3,versicolor
|
||||
6.3,2.5,4.9,1.5,versicolor
|
||||
6.1,2.8,4.7,1.2,versicolor
|
||||
6.4,2.9,4.3,1.3,versicolor
|
||||
6.6,3,4.4,1.4,versicolor
|
||||
6.8,2.8,4.8,1.4,versicolor
|
||||
6.7,3,5,1.7,versicolor
|
||||
6,2.9,4.5,1.5,versicolor
|
||||
5.7,2.6,3.5,1,versicolor
|
||||
5.5,2.4,3.8,1.1,versicolor
|
||||
5.5,2.4,3.7,1,versicolor
|
||||
5.8,2.7,3.9,1.2,versicolor
|
||||
6,2.7,5.1,1.6,versicolor
|
||||
5.4,3,4.5,1.5,versicolor
|
||||
6,3.4,4.5,1.6,versicolor
|
||||
6.7,3.1,4.7,1.5,versicolor
|
||||
6.3,2.3,4.4,1.3,versicolor
|
||||
5.6,3,4.1,1.3,versicolor
|
||||
5.5,2.5,4,1.3,versicolor
|
||||
5.5,2.6,4.4,1.2,versicolor
|
||||
6.1,3,4.6,1.4,versicolor
|
||||
5.8,2.6,4,1.2,versicolor
|
||||
5,2.3,3.3,1,versicolor
|
||||
5.6,2.7,4.2,1.3,versicolor
|
||||
5.7,3,4.2,1.2,versicolor
|
||||
5.7,2.9,4.2,1.3,versicolor
|
||||
6.2,2.9,4.3,1.3,versicolor
|
||||
5.1,2.5,3,1.1,versicolor
|
||||
5.7,2.8,4.1,1.3,versicolor
|
||||
6.3,3.3,6,2.5,virginica
|
||||
5.8,2.7,5.1,1.9,virginica
|
||||
7.1,3,5.9,2.1,virginica
|
||||
6.3,2.9,5.6,1.8,virginica
|
||||
6.5,3,5.8,2.2,virginica
|
||||
7.6,3,6.6,2.1,virginica
|
||||
4.9,2.5,4.5,1.7,virginica
|
||||
7.3,2.9,6.3,1.8,virginica
|
||||
6.7,2.5,5.8,1.8,virginica
|
||||
7.2,3.6,6.1,2.5,virginica
|
||||
6.5,3.2,5.1,2,virginica
|
||||
6.4,2.7,5.3,1.9,virginica
|
||||
6.8,3,5.5,2.1,virginica
|
||||
5.7,2.5,5,2,virginica
|
||||
5.8,2.8,5.1,2.4,virginica
|
||||
6.4,3.2,5.3,2.3,virginica
|
||||
6.5,3,5.5,1.8,virginica
|
||||
7.7,3.8,6.7,2.2,virginica
|
||||
7.7,2.6,6.9,2.3,virginica
|
||||
6,2.2,5,1.5,virginica
|
||||
6.9,3.2,5.7,2.3,virginica
|
||||
5.6,2.8,4.9,2,virginica
|
||||
7.7,2.8,6.7,2,virginica
|
||||
6.3,2.7,4.9,1.8,virginica
|
||||
6.7,3.3,5.7,2.1,virginica
|
||||
7.2,3.2,6,1.8,virginica
|
||||
6.2,2.8,4.8,1.8,virginica
|
||||
6.1,3,4.9,1.8,virginica
|
||||
6.4,2.8,5.6,2.1,virginica
|
||||
7.2,3,5.8,1.6,virginica
|
||||
7.4,2.8,6.1,1.9,virginica
|
||||
7.9,3.8,6.4,2,virginica
|
||||
6.4,2.8,5.6,2.2,virginica
|
||||
6.3,2.8,5.1,1.5,virginica
|
||||
6.1,2.6,5.6,1.4,virginica
|
||||
7.7,3,6.1,2.3,virginica
|
||||
6.3,3.4,5.6,2.4,virginica
|
||||
6.4,3.1,5.5,1.8,virginica
|
||||
6,3,4.8,1.8,virginica
|
||||
6.9,3.1,5.4,2.1,virginica
|
||||
6.7,3.1,5.6,2.4,virginica
|
||||
6.9,3.1,5.1,2.3,virginica
|
||||
5.8,2.7,5.1,1.9,virginica
|
||||
6.8,3.2,5.9,2.3,virginica
|
||||
6.7,3.3,5.7,2.5,virginica
|
||||
6.7,3,5.2,2.3,virginica
|
||||
6.3,2.5,5,1.9,virginica
|
||||
6.5,3,5.2,2,virginica
|
||||
6.2,3.4,5.4,2.3,virginica
|
||||
5.9,3,5.1,1.8,virginica
|
||||
|
75
public/sets/iris_skeleton.json
Normal file
75
public/sets/iris_skeleton.json
Normal file
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"attr2": "petal width (cm)",
|
||||
"pivot": 0.8,
|
||||
"predicateName": ">=",
|
||||
"weight": null,
|
||||
"match": {
|
||||
"attr2": "petal width (cm)",
|
||||
"pivot": 1.75,
|
||||
"predicateName": ">=",
|
||||
"weight": null,
|
||||
"match": {
|
||||
"attr2": "petal length (cm)",
|
||||
"pivot": 4.85,
|
||||
"predicateName": ">=",
|
||||
"weight": null,
|
||||
"match": {
|
||||
"category": "virginica"
|
||||
},
|
||||
"notMatch": {
|
||||
"attr2": "sepal length (cm)",
|
||||
"pivot": 5.95,
|
||||
"predicateName": ">=",
|
||||
"weight": null,
|
||||
"match": {
|
||||
"category": "virginica"
|
||||
},
|
||||
"notMatch": {
|
||||
"category": "versicolor"
|
||||
}
|
||||
}
|
||||
},
|
||||
"notMatch": {
|
||||
"attr2": "petal length (cm)",
|
||||
"pivot": 4.95,
|
||||
"predicateName": ">=",
|
||||
"weight": null,
|
||||
"match": {
|
||||
"attr2": "petal width (cm)",
|
||||
"pivot": 1.55,
|
||||
"predicateName": ">=",
|
||||
"weight": null,
|
||||
"match": {
|
||||
"attr2": "sepal length (cm)",
|
||||
"pivot": 6.95,
|
||||
"predicateName": ">=",
|
||||
"weight": null,
|
||||
"match": {
|
||||
"category": "virginica"
|
||||
},
|
||||
"notMatch": {
|
||||
"category": "versicolor"
|
||||
}
|
||||
},
|
||||
"notMatch": {
|
||||
"category": "virginica"
|
||||
}
|
||||
},
|
||||
"notMatch": {
|
||||
"attr2": "petal width (cm)",
|
||||
"pivot": 1.65,
|
||||
"predicateName": ">=",
|
||||
"weight": null,
|
||||
"match": {
|
||||
"category": "virginica"
|
||||
},
|
||||
"notMatch": {
|
||||
"category": "versicolor"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"notMatch": {
|
||||
"category": "setosa"
|
||||
}
|
||||
}
|
||||
@@ -161,7 +161,7 @@ export const Readme = () => (
|
||||
<Box marginTop={5}>
|
||||
Steps: <br />
|
||||
<OrderedList ml={'2em'} p={2}>
|
||||
<ListItem>Download and upload training set</ListItem>
|
||||
<ListItem>Download and upload training set¹</ListItem>
|
||||
<ListItem>Choose algorithm/s, you can take all if You want</ListItem>
|
||||
<ListItem>Set Decision attribute (for examples it will be - Class)</ListItem>
|
||||
<ListItem>
|
||||
@@ -179,6 +179,10 @@ export const Readme = () => (
|
||||
</ListItem>
|
||||
<ListItem>Use Upload test set button to compare result with your set</ListItem>
|
||||
</OrderedList>
|
||||
<Box marginTop={2}>
|
||||
Ad. 1) You can upload json skeleton of decision tree based on our model of node and leaf and
|
||||
modify it. For more information, please take a look at <b>PYTHON</b> section below 😜
|
||||
</Box>
|
||||
</Box>
|
||||
</Code>
|
||||
<Divider marginBottom={3} />
|
||||
@@ -222,6 +226,132 @@ export const Readme = () => (
|
||||
page.
|
||||
</Text>
|
||||
</Box>
|
||||
<Divider margin={10} />
|
||||
<Box p={4}>
|
||||
<Box border={'1px solid'}>
|
||||
<Heading textAlign={'center'} textTransform={'uppercase'} size="lg" color={'grey'} mt={5}>
|
||||
PYTHON
|
||||
</Heading>
|
||||
<Box m={5} textAlign={'left'}>
|
||||
If You would like to play with own tree which you generated in Python, please use our script to
|
||||
generate json file with a structure of Your decision tree. In example we used well-known iris set,
|
||||
function is based on 'clf' object so here you can assing Your model.
|
||||
<br />
|
||||
<br />
|
||||
When you upload csv file with your data and json file with your skeleton then aplication will show
|
||||
your tree and will spread the samples over the tree.
|
||||
<br />
|
||||
<br /> You can check this feature using our prepared files:
|
||||
<UnorderedList>
|
||||
<Link href="/sets/iris_dataset.csv" isExternal>
|
||||
<ListItem>Iris dataset CSV</ListItem>
|
||||
</Link>
|
||||
<Link href="/sets/iris_skeleton.json" isExternal>
|
||||
<ListItem>Skeleton of tree JSON</ListItem>
|
||||
</Link>
|
||||
</UnorderedList>
|
||||
<Code
|
||||
mt={5}
|
||||
colorScheme="red"
|
||||
children="REMINDER: Please be aware that both files must have the same attribute names. In other way distribution won't work."
|
||||
/>
|
||||
<Code w="100%" mt={5}>
|
||||
<Box>
|
||||
<UnorderedList styleType="none">
|
||||
<ListItem>import matplotlib.pyplot as plt</ListItem>
|
||||
<ListItem>from sklearn import tree</ListItem>
|
||||
<ListItem>from sklearn.datasets import load_iris</ListItem>
|
||||
<ListItem>from sklearn.tree import DecisionTreeClassifier</ListItem>
|
||||
<ListItem>import json</ListItem>
|
||||
<ListItem>
|
||||
<br />
|
||||
</ListItem>
|
||||
<ListItem color="grey"># Load data</ListItem>
|
||||
<ListItem>
|
||||
iris = load_iris()
|
||||
<br /> X = iris.data
|
||||
<br /> y = iris.target
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<br />
|
||||
</ListItem>
|
||||
<ListItem color="grey"># Create tree model</ListItem>
|
||||
<ListItem>
|
||||
clf = DecisionTreeClassifier() <br />
|
||||
clf.fit(X, y) <br />
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<br />
|
||||
</ListItem>
|
||||
<ListItem color="grey"># Function for generating json </ListItem>
|
||||
<ListItem>
|
||||
def node_to_dict(node, feature_names, target_names): <br />
|
||||
<UnorderedList styleType="none">
|
||||
<ListItem>
|
||||
result = {} <br />
|
||||
<ListItem color="grey"># Leaf</ListItem>
|
||||
if clf.tree_.children_left[node] == -1:
|
||||
<UnorderedList styleType="none">
|
||||
<ListItem>
|
||||
result['category'] = target_names[clf.tree_.value[node].argmax()]
|
||||
</ListItem>
|
||||
</UnorderedList>
|
||||
<ListItem color="grey"># Node</ListItem>
|
||||
else:
|
||||
<UnorderedList styleType="none">
|
||||
<ListItem>feature = feature_names[clf.tree_.feature[node]]</ListItem>
|
||||
<ListItem>threshold = round(clf.tree_.threshold[node], 3)</ListItem>
|
||||
<ListItem>predicate = "==" if isinstance(threshold, str) else ">="</ListItem>
|
||||
<ListItem>
|
||||
weight = clf.tree_.weight[node] if hasattr(clf.tree_, 'weight') else None
|
||||
</ListItem>
|
||||
<ListItem> result = {</ListItem>
|
||||
<UnorderedList styleType="none">
|
||||
<ListItem>
|
||||
'attr2': feature,
|
||||
<br /> 'pivot': threshold,
|
||||
<br /> 'predicateName': predicate,
|
||||
<br /> 'weight': weight,
|
||||
<br /> 'match': node_to_dict(clf.tree_.children_right[node], feature_names,
|
||||
target_names),
|
||||
<br /> 'notMatch': node_to_dict(clf.tree_.children_left[node], feature_names,
|
||||
target_names)
|
||||
</ListItem>
|
||||
</UnorderedList>
|
||||
<ListItem>}</ListItem>
|
||||
</UnorderedList>
|
||||
return result
|
||||
</ListItem>
|
||||
</UnorderedList>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<br />
|
||||
</ListItem>
|
||||
<ListItem color="grey"># Convert root of tree to json</ListItem>
|
||||
<ListItem>tree_json = node_to_dict(0, iris.feature_names, iris.target_names)</ListItem>
|
||||
<ListItem>
|
||||
<br />
|
||||
</ListItem>
|
||||
<ListItem color="grey"># Save structure of tree to json file</ListItem>
|
||||
<ListItem>
|
||||
with open('decision_tree.json', 'w') as json_file: json.dump(tree_json, json_file,
|
||||
indent=2)
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<br />
|
||||
</ListItem>
|
||||
<ListItem color="grey"># Show plot with tree</ListItem>
|
||||
<ListItem>
|
||||
fig = plt.figure(figsize=(25,20)) <br />_ = tree.plot_tree(clf,
|
||||
feature_names=iris.feature_names, class_names=iris.target_names, filled=True) <br />{' '}
|
||||
plt.show()
|
||||
</ListItem>
|
||||
</UnorderedList>
|
||||
</Box>
|
||||
</Code>
|
||||
</Box>
|
||||
</Box>
|
||||
</Box>
|
||||
</Box>
|
||||
|
||||
<Box padding={30} mt={10} width={'100%'}>
|
||||
|
||||
@@ -186,12 +186,6 @@ const Tree = ({ options, headers, jsonTreeFromFile = null }) => {
|
||||
<Stack spacing={2} direction="row">
|
||||
<Box>
|
||||
<a
|
||||
leftIcon={<GrTechnology />}
|
||||
bg={'#ddd'}
|
||||
color="#black"
|
||||
_hover={{ bg: '#aaa' }}
|
||||
onClick={() => logTree(root)}
|
||||
size="sm"
|
||||
href={`data:text/json;charset=utf-8,${encodeURIComponent(
|
||||
JSON.stringify(
|
||||
root,
|
||||
@@ -202,7 +196,16 @@ const Tree = ({ options, headers, jsonTreeFromFile = null }) => {
|
||||
)}`}
|
||||
download={'iTree_decisionTree_test_' + new Date().toJSON().slice(0, 10) + '.json'}
|
||||
>
|
||||
Log tree
|
||||
<Button
|
||||
leftIcon={<GrTechnology />}
|
||||
bg={'#ddd'}
|
||||
color="#black"
|
||||
_hover={{ bg: '#aaa' }}
|
||||
onClick={() => logTree(root)}
|
||||
size="sm"
|
||||
>
|
||||
Export Tree
|
||||
</Button>
|
||||
</a>
|
||||
</Box>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user