mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-05 22:04:27 +08:00
61 lines
1.7 KiB
Python
Executable File
61 lines
1.7 KiB
Python
Executable File
#
|
|
# Copyright (C) 2003-2005 Rational Discovery LLC
|
|
# All Rights Reserved
|
|
#
|
|
""" Defines the class SigTreeNode, used to represent trees that
|
|
use signatures (bit vectors) to represent data. As inputs (examples),
|
|
SigTreeNode's expect 3-sequences: (label,sig,act)
|
|
|
|
_SigTreeNode_ is derived from _DecTree.DecTreeNode_
|
|
|
|
"""
|
|
from ML.DecTree import DecTree,Tree
|
|
from DataStructs.VectCollection import VectCollection
|
|
import copy
|
|
|
|
class SigTreeNode(DecTree.DecTreeNode):
|
|
"""
|
|
|
|
"""
|
|
def NameModel(self,*args,**kwargs):
|
|
pass
|
|
def ClassifyExample(self,example,appendExamples=0):
|
|
""" Recursively classify an example by running it through the tree
|
|
|
|
**Arguments**
|
|
|
|
- example: the example to be classified, a sequence at least
|
|
2 long:
|
|
( id, sig )
|
|
where sig is a BitVector (or something supporting __getitem__)
|
|
additional fields will be ignored.
|
|
|
|
- appendExamples: if this is nonzero then this node (and all children)
|
|
will store the example
|
|
|
|
**Returns**
|
|
|
|
the classification of _example_
|
|
|
|
"""
|
|
if appendExamples:
|
|
self.examples.append(example)
|
|
if self.terminalNode:
|
|
return self.label
|
|
else:
|
|
sig = example[1]
|
|
val = sig[self.label]
|
|
#print 'val:',val
|
|
if val and isinstance(sig,VectCollection):
|
|
# we need to copy and modify the example:
|
|
sig = copy.copy(sig)
|
|
sig.DetachVectsNotMatchingBit(self.label)
|
|
ex = [example[0],sig]
|
|
if len(example)>2:
|
|
ex.extend(example[2:])
|
|
example = ex
|
|
return self.children[val].ClassifyExample(example,appendExamples=appendExamples)
|
|
|
|
def __init__(self,*args,**kwargs):
|
|
apply(DecTree.DecTreeNode.__init__,(self,)+args,kwargs)
|