public void TestTwoAttributeAxes() { List <DataPoint> dataPoints = new List <DataPoint> { new DataPoint { Class = 1, Attributes = new float[] { 123, 987 }, Categories = new uint[] { }, Weight = 1.0f, }, new DataPoint { Class = 0, Attributes = new float[] { 123, 876 }, Categories = new uint[] { }, Weight = 1.0f, }, new DataPoint { Class = 1, Attributes = new float[] { 456, 765 }, Categories = new uint[] { }, Weight = 1.0f, }, new DataPoint { Class = 1, Attributes = new float[] { 456, 543 }, Categories = new uint[] { }, Weight = 1.0f, }, }; using (CudaManager cudaManager = Provider.CudaManagerPool.GetCudaManagerForThread(Provider.Logger)) using (DecisionLearner decisionLearner = new DecisionLearner(cudaManager, dataPoints)) { IDataNode root = decisionLearner.FitDecisionTree().Node; Assert.AreEqual(1.0, Accuracy(root, dataPoints)); } }
public void TestSimpleAttributeSplit() { List <DataPoint> dataPoints = new List <DataPoint> { new DataPoint { Class = 0, Attributes = new float[] { 123 }, Categories = new uint[] { }, Weight = 1.0f, }, new DataPoint { Class = 1, Attributes = new float[] { 456 }, Categories = new uint[] { }, Weight = 1.0f, }, }; using (CudaManager cudaManager = Provider.CudaManagerPool.GetCudaManagerForThread(Provider.Logger)) using (DecisionLearner decisionLearner = new DecisionLearner(cudaManager, dataPoints)) { IDataNode root = decisionLearner.FitDecisionTree().Node; AttributeSplit attributeSplit = (AttributeSplit)root; Assert.AreEqual(0, attributeSplit.Axis); Assert.AreEqual(456, attributeSplit.SplitValue); DataLeaf left = (DataLeaf)attributeSplit.Left; Assert.AreEqual(1, left.ClassDistribution[0]); Assert.AreEqual(0, left.ClassDistribution[1]); DataLeaf right = (DataLeaf)attributeSplit.Right; Assert.AreEqual(0, right.ClassDistribution[0]); Assert.AreEqual(1, right.ClassDistribution[1]); Assert.AreEqual(1.0, Accuracy(root, dataPoints)); } }
public void TestCategoryPlusAttributeSplit() { List <DataPoint> dataPoints = new List <DataPoint> { new DataPoint { Class = 1, Attributes = new float[] { 99, 987 }, Categories = new uint[] { 0x3, 0x1 }, Weight = 1.0f, }, new DataPoint { Class = 0, Attributes = new float[] { 99, 987 }, Categories = new uint[] { 0x3, 0x1 | 0x2 }, Weight = 1.0f, }, new DataPoint { Class = 1, Attributes = new float[] { 99, 765 }, Categories = new uint[] { 0x3, 0x1 | 0x2 }, Weight = 1.0f, }, new DataPoint { Class = 1, Attributes = new float[] { 99, 765 }, Categories = new uint[] { 0x3, 0x1 }, Weight = 1.0f, }, }; using (CudaManager cudaManager = Provider.CudaManagerPool.GetCudaManagerForThread(Provider.Logger)) using (DecisionLearner decisionLearner = new DecisionLearner(cudaManager, dataPoints)) { IDataNode root = decisionLearner.FitDecisionTree().Node; Assert.AreEqual(1.0, Accuracy(root, dataPoints)); } }