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); }
private void SaveData(SplittedData data) { data.TriggerData.ForEach(t => _dataRepository.SaveTriggerData(t)); data.WeightData.ForEach(w => _dataRepository.SaveWeigthData(w)); }