public Metrics(LabelFeatureCore labelFeatureCore, LabelConverter labelConvert, DataPartitionType[] dataTypes) { this.labelFeatureCore = labelFeatureCore; this.dataTypes = dataTypes; this.optimalID = -1; this.labels = new float[labelFeatureCore.NumDataPoint]; if (labelConvert != null) { for (int i = 0; i < labelFeatureCore.NumDataPoint; i++) { this.labels[i] = labelConvert.convert(labelFeatureCore.GetLabel(i)); } } else { for (int i = 0; i < labelFeatureCore.NumDataPoint; i++) { this.labels[i] = labelFeatureCore.GetLabel(i); } } this.dataSegments = new int[(int)DataPartitionType.cTypes][]; this.metricsCur = new float[(int)DataPartitionType.cTypes][]; for (int i = 0; i < (int)DataPartitionType.cTypes; i++) { metricsCur[i] = new float[SIZE]; } foreach (DataPartitionType dataType in dataTypes) { DataSet dataSet = labelFeatureCore.DataGroups.GetDataPartition(dataType); int[] dataSegment = dataSet.DataIndex; if (dataSegment != null) { dataSegments[(int)dataType] = dataSegment; } else { //we will fill in the non-existing data sections with 0 //throw new Exception("data partition does not exist"); } } this.results_list = new List<Result>(); }