示例#1
0
 public SplittedData SplitAndProcess(byte[] buffer)
 {
     _buffer       = buffer;
     _splittedData = new SplittedData();
     for (_currentPosition = 0; _currentPosition < buffer.Length; _currentPosition++)
     {
         if (buffer.Length - _currentPosition < 10)
         {
             break;
         }
         var currentByte = buffer[_currentPosition];
         if (currentByte == 0xA5)
         {
             _currentPosition += ProcessTriggerFrame();
         }
         else
         {
             var nextByte = buffer[_currentPosition + 1];
             if (nextByte == 0x68)
             {
                 _currentPosition += ProcessWeightFrame();
             }
             else
             {
                 break;
             }
         }
     }
     return(_splittedData);
 }
        public void TestInformationGainCalculator_WithGroupsCountsOnly()
        {
            // Given
            var initialDataTable = new DataFrame(
                                      new DataTable()
                                       {
                                           Columns = { new DataColumn("Col1", typeof(string)) },
                                           Rows =
                                               {
                                                    new object[] { "A" },
                                                    new object[] { "A" },
                                                    new object[] { "A" },
                                                    new object[] { "B" },
                                                    new object[] { "B" },
                                               }
                                       });
            var group1 = initialDataTable.GetSubsetByRows(new[] { 0, 1, 3 });
            var splittedDataGroup1 = new SplittedData(null, group1);
            var group1UniqueValuesCount =
                group1.GetColumnVector("Col1")
                    .Values.GroupBy(val => val, val => val)
                    .Select(grp => grp.Count())
                    .ToList();

            var group2 = initialDataTable.GetSubsetByRows(new[] { 2, 4 });
            var splittedDataGroup2 = new SplittedData(null, group2);
            var group2UniqueValuesCount =
                group2.GetColumnVector("Col1")
                    .Values.GroupBy(val => val, val => val)
                    .Select(grp => grp.Count())
                    .ToList();

            var groupsCounts = new List<IList<int>> { group1UniqueValuesCount, group2UniqueValuesCount };

            // When
            var entropyFromGroups = informationGainCalculator.CalculateSplitQuality(
                1.0,
                5,
                new List<ISplittedData> { splittedDataGroup1, splittedDataGroup2 },
                "Col1");

            var entropyFromGroupCounts = informationGainCalculator.CalculateSplitQuality(1.0, 5, groupsCounts);
            
            // Then
            Assert.AreEqual(entropyFromGroupCounts, entropyFromGroups);
        }
示例#3
0
 private void SaveData(SplittedData data)
 {
     data.TriggerData.ForEach(t => _dataRepository.SaveTriggerData(t));
     data.WeightData.ForEach(w => _dataRepository.SaveWeigthData(w));
 }