/// <summary> /// Exports the training data that was used to train the current tree. /// </summary> /// <param name="observations"> /// The genome. /// </param> /// <param name="ranks"> /// The target performance. /// </param> /// <param name="path"> /// The path and file name. Add '{0}' in path, if you want an auto-incremented counter in the file name. /// </param> internal static void WriteAggregatedTrainingData(F64Matrix observations, double[] ranks, string path) { var filePath = new FileInfo(path); if (filePath.DirectoryName != null) { Directory.CreateDirectory(filePath.DirectoryName); } var csvBuilder = new StringBuilder( string.Concat(string.Join(";", Enumerable.Range(1, observations.ColumnCount).Select(r => $"Feature_{r}")), ";Rank")).AppendLine(); for (var row = 0; row < observations.RowCount; row++) { var rowString = observations.GetRowAsCsv(row, ";"); csvBuilder.Append(rowString); csvBuilder.AppendFormat(CultureInfo.InvariantCulture, ";{0}", ranks[row]).AppendLine(); } File.WriteAllText(filePath.FullName, csvBuilder.ToString(), Encoding.UTF8); }