Hello,
I'm on a project where I want to code a random forest from scratch (to learn both how to code and the details and nuances of this type of machine learning). I know there are libraries to make stuff easily, but I want to make with my hands and learn.
WM[d] contains a list of lists and is global. d stands for the depth, r stands for the row, and each (depth, row) couple identifies a node, represented as a list containing the parameters of that node.
I am calling a node this way: WM[d][r]; and calling an element of a node via WM[d][r][elementID]
Some part of my code looks something like that:
As I understand it, in the for loop WM is evaluated to give the range for r, and if during the loop we extend the range of r it doesn't reevaluate its range, meaning i won't train nodes that weren't there at the first call.
Am I right?
If there any way to do what I try to do cleanly? (I'm far from an experienced programmer, i'm basically selftaught, and this project has the objective of keeping selfteaching :) )
I suppose I can switch to while loops to do what I want to do here (is that even true?), but I was really interested in understanding what is going on exactly.
I'm on a project where I want to code a random forest from scratch (to learn both how to code and the details and nuances of this type of machine learning). I know there are libraries to make stuff easily, but I want to make with my hands and learn.
WM[d] contains a list of lists and is global. d stands for the depth, r stands for the row, and each (depth, row) couple identifies a node, represented as a list containing the parameters of that node.
I am calling a node this way: WM[d][r]; and calling an element of a node via WM[d][r][elementID]
Some part of my code looks something like that:
for r in range(len(WM[d])): train_node(d, r)In the first part, I have to loop over WM to create all the nodes. train_node() contains the code to create the next nodes if needs be, in the form of
def train_node(f,t,d,r): global WM if stuff: WM[d][r].append([]) #to create a new row element at that depth WM[d][r][-1] = [param1, param2...] return 'I love Yaks'However it seems that my logic is flawed, since a first node is created, but the function never loops into them, meaning the nodes it created are not getting their parameters.
As I understand it, in the for loop WM is evaluated to give the range for r, and if during the loop we extend the range of r it doesn't reevaluate its range, meaning i won't train nodes that weren't there at the first call.
Am I right?
If there any way to do what I try to do cleanly? (I'm far from an experienced programmer, i'm basically selftaught, and this project has the objective of keeping selfteaching :) )
I suppose I can switch to while loops to do what I want to do here (is that even true?), but I was really interested in understanding what is going on exactly.