これはかなり具体的な質問ですが、ここで何が起こっているのか理解できなかったので、問題を提示しましょう。
決定木を成長させると、ノードを分割する分割関数があります。つまり、2 つの子をノードに接続します。何らかの理由で、以下のコードは、id(currentNode.children[0])==id(currentNode) のように、ノード自体を子として割り当てます。
def split(currentNode):
if impure(currentNode.data):
currentNode.attribute = getBestAttr(currentNode.attributes,currentNode.data);
childrenAttributes = deepcopy(currentNode.attributes);
childrenAttributes.remove(currentNode.attribute);
childrenData = splitData(currentNode.data,currentNode.attribute);
for i in range(2):
currentNode.children[i] = node(childrenData[i],childrenAttributes);
split(currentNode.children[i]);
重要な部分はおそらく次のとおりです。
for i in range(2):
currentNode.children[i] = node(childrenData[i],childrenAttributes);
split(currentNode.children[i]);
私の理解では、コンストラクター呼び出しは、新しく作成されたノード オブジェクトへの参照を返す必要があります。これは、NEW オブジェクトであるため、親ノードへの参照と決して同じではありません。
ノード オブジェクトは次のとおりです。
class node:
data = None;
attributes = None;
attribute = None;
children = [None,None];
def __init__(self,data,attributes):
self.data = data;
self.attributes = attributes;
私は Python で oop を初めて使用し、一般的に oop の経験があまりないため、この点で誤解があると思いますが、質問を指定する方法がわかりません。ありがとう。