/// <summary> /// Perform the split. /// </summary> /// <param name="dataDivisionList">The list of data divisions.</param> /// <param name="dataset">The dataset to split.</param> /// <param name="inputCount">The input count.</param> /// <param name="idealCount">The ideal count.</param> public void Perform(IList <DataDivision> dataDivisionList, MatrixMLDataSet dataset, int inputCount, int idealCount) { GenerateCounts(dataDivisionList, dataset.Data.Length); GenerateMasks(dataDivisionList); if (_shuffle) { PerformShuffle(dataDivisionList, dataset.Data.Length); } CreateDividedDatasets(dataDivisionList, dataset, inputCount, idealCount); }
/// <summary> /// Perform the split. /// </summary> /// <param name="dataDivisionList">The list of data divisions.</param> /// <param name="dataset">The dataset to split.</param> /// <param name="inputCount">The input count.</param> /// <param name="idealCount">The ideal count.</param> public void Perform(IList<DataDivision> dataDivisionList, MatrixMLDataSet dataset, int inputCount, int idealCount) { GenerateCounts(dataDivisionList, dataset.Data.Length); GenerateMasks(dataDivisionList); if (_shuffle) { PerformShuffle(dataDivisionList, dataset.Data.Length); } CreateDividedDatasets(dataDivisionList, dataset, inputCount, idealCount); }
/// <summary> /// Create the datasets that we will divide into. /// </summary> /// <param name="dataDivisionList">The list of divisions.</param> /// <param name="parentDataset">The data set to divide.</param> /// <param name="inputCount">The input count.</param> /// <param name="idealCount">The ideal count.</param> private void CreateDividedDatasets(IEnumerable <DataDivision> dataDivisionList, MatrixMLDataSet parentDataset, int inputCount, int idealCount) { foreach (DataDivision division in dataDivisionList) { var dataset = new MatrixMLDataSet(parentDataset.Data, inputCount, idealCount, division.Mask) { LagWindowSize = parentDataset.LagWindowSize, LeadWindowSize = parentDataset.LeadWindowSize }; division.Dataset = dataset; } }
private void BuildSets(IList <int[]> foldContents) { _folds.Clear(); for (int i = 0; i < K; i++) { // first calculate the size int trainingSize = 0; int validationSize = 0; for (int j = 0; j < foldContents.Count; j++) { int foldSize = foldContents[j].Length; if (j == i) { validationSize += foldSize; } else { trainingSize += foldSize; } } // create the masks var trainingMask = new int[trainingSize]; var validationMask = new int[validationSize]; int trainingIndex = 0; for (int j = 0; j < foldContents.Count; j++) { int[] source = foldContents[j]; if (j == i) { EngineArray.ArrayCopy(source, 0, validationMask, 0, source.Length); } else { EngineArray.ArrayCopy(source, 0, trainingMask, trainingIndex, source.Length); trainingIndex += source.Length; } } // Build the set var training = new MatrixMLDataSet(_baseDataset, trainingMask); var validation = new MatrixMLDataSet(_baseDataset, validationMask); _folds.Add(new DataFold(training, validation)); } }
public KFoldCrossvalidation(MatrixMLDataSet theBaseDataset, int theK) : this() { _baseDataset = theBaseDataset; _k = theK; }
private void BuildSets(IList<int[]> foldContents) { _folds.Clear(); for (int i = 0; i < K; i++) { // first calculate the size int trainingSize = 0; int validationSize = 0; for (int j = 0; j < foldContents.Count; j++) { int foldSize = foldContents[j].Length; if (j == i) { validationSize += foldSize; } else { trainingSize += foldSize; } } // create the masks var trainingMask = new int[trainingSize]; var validationMask = new int[validationSize]; int trainingIndex = 0; for (int j = 0; j < foldContents.Count; j++) { int[] source = foldContents[j]; if (j == i) { EngineArray.ArrayCopy(source, 0, validationMask, 0, source.Length); } else { EngineArray.ArrayCopy(source, 0, trainingMask, trainingIndex, source.Length); trainingIndex += source.Length; } } // Build the set var training = new MatrixMLDataSet(_baseDataset, trainingMask); var validation = new MatrixMLDataSet(_baseDataset, validationMask); _folds.Add(new DataFold(training, validation)); } }
public DataFold(MatrixMLDataSet theTraining, MatrixMLDataSet theValidation) { _training = theTraining; _validation = theValidation; }
/// <summary> /// Create the datasets that we will divide into. /// </summary> /// <param name="dataDivisionList">The list of divisions.</param> /// <param name="parentDataset">The data set to divide.</param> /// <param name="inputCount">The input count.</param> /// <param name="idealCount">The ideal count.</param> private void CreateDividedDatasets(IEnumerable<DataDivision> dataDivisionList, MatrixMLDataSet parentDataset, int inputCount, int idealCount) { foreach (DataDivision division in dataDivisionList) { var dataset = new MatrixMLDataSet(parentDataset.Data, inputCount, idealCount, division.Mask) { LagWindowSize = parentDataset.LagWindowSize, LeadWindowSize = parentDataset.LeadWindowSize }; division.Dataset = dataset; } }