| 
						
						
						
					 | 
					 | 
					@ -1,22 +1,26 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "DecisionTree.h"
 | 
					 | 
					 | 
					 | 
					#include "DecisionTree.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#include "RF.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					// __AQ_NO_SESSION__
 | 
					 | 
					 | 
					 | 
					// __AQ_NO_SESSION__
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "../server/table.h"
 | 
					 | 
					 | 
					 | 
					#include "../server/table.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "aquery.h"
 | 
					 | 
					 | 
					 | 
					#include "aquery.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					DecisionTree *dt = nullptr;
 | 
					 | 
					 | 
					 | 
					DecisionTree *dt = nullptr;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					RandomForest *rf = nullptr;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					__AQEXPORT__(bool)
 | 
					 | 
					 | 
					 | 
					__AQEXPORT__(bool)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					newtree(int height, long f, ColRef<int> sparse, double forget, long maxf, long noclasses, Evaluation e, long r, long rb)
 | 
					 | 
					 | 
					 | 
					newtree(int height, long f, ColRef<int> X, double forget, long maxf, long noclasses, Evaluation e, long r, long rb)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{
 | 
					 | 
					 | 
					 | 
					{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (sparse.size != f)
 | 
					 | 
					 | 
					 | 
						if (X.size != f)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return false;
 | 
					 | 
					 | 
					 | 
							return false;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						int *issparse = (int *)malloc(f * sizeof(int));
 | 
					 | 
					 | 
					 | 
						int *X_cpy = (int *)malloc(f * sizeof(int));
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						for (long i = 0; i < f; i++)
 | 
					 | 
					 | 
					 | 
						
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							issparse[i] = sparse.container[i];
 | 
					 | 
					 | 
					 | 
						memcpy(X_cpy, X.container, f);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (maxf < 0)
 | 
					 | 
					 | 
					 | 
						if (maxf < 0)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							maxf = f;
 | 
					 | 
					 | 
					 | 
							maxf = f;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						dt = new DecisionTree(f, issparse, forget, maxf, noclasses, e);
 | 
					 | 
					 | 
					 | 
						dt = new DecisionTree(f, X_cpy, forget, maxf, noclasses, e);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						rf = new RandomForest(height, f, X_cpy, forget, noclasses, e)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return true;
 | 
					 | 
					 | 
					 | 
						return true;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -44,7 +48,8 @@ fit(vector_type<vector_type<double>> v, vector_type<long> res)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						double **data = (double **)malloc(v.size * sizeof(double *));
 | 
					 | 
					 | 
					 | 
						double **data = (double **)malloc(v.size * sizeof(double *));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						for (int i = 0; i < v.size; ++i)
 | 
					 | 
					 | 
					 | 
						for (int i = 0; i < v.size; ++i)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							data[i] = v.container[i].container;
 | 
					 | 
					 | 
					 | 
							data[i] = v.container[i].container;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						dt->fit(data, res.container, v.size);
 | 
					 | 
					 | 
					 | 
						// dt->fit(data, res.container, v.size);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						rf->fit(data, res.container, v.size);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return true;
 | 
					 | 
					 | 
					 | 
						return true;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -54,8 +59,8 @@ predict(vector_type<vector_type<double>> v)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						int *result = (int *)malloc(v.size * sizeof(int));
 | 
					 | 
					 | 
					 | 
						int *result = (int *)malloc(v.size * sizeof(int));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						for (long i = 0; i < v.size; i++)
 | 
					 | 
					 | 
					 | 
						for (long i = 0; i < v.size; i++)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							result[i] = dt->Test(v.container[i].container, dt->DTree);
 | 
					 | 
					 | 
					 | 
							//result[i] = dt->Test(v.container[i].container, dt->DTree);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
							result[i] = rf->Test(v.container, rf->DTrees);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						auto container = (vector_type<int> *)malloc(sizeof(vector_type<int>));
 | 
					 | 
					 | 
					 | 
						auto container = (vector_type<int> *)malloc(sizeof(vector_type<int>));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						container->size = v.size;
 | 
					 | 
					 | 
					 | 
						container->size = v.size;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						container->capacity = 0;
 | 
					 | 
					 | 
					 | 
						container->capacity = 0;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |