public ClassificationModel[] Train(BaseVector[] x, int[][] y, int ngroups, int[] rankedFeatures,
			IGroupDataProvider data)
        {
            int[] o = ranker.Rank(x, y, ngroups, rankerParam, data, 1); //TODO
            Array.Copy(o, rankedFeatures, o.Length);
            int[] sizes = GetSizes(x[0].Length, reductionFactor, maxFeatures);
            ClassificationModel[] result = new ClassificationModel[sizes.Length];
            for (int i = 0; i < result.Length; i++){
                if (i == 0 && sizes[0] == x[0].Length){
                    result[0] = classifier.Train(x, y, ngroups, classifierParam, 1);
                } else{
                    int[] inds = ArrayUtils.SubArray(o, sizes[i]);
                    result[i] =
                        new ClassificationOnSubFeatures(
                            classifier.Train(ClassificationWithRanking.ExtractFeatures(x, inds), y, ngroups, classifierParam, 1), inds);
                }
            }
            return result;
        }
 public ClassificationModel[] Train(BaseVector[] x, int[][] y, int ngroups, int[] rankedFeatures,
                                    IGroupDataProvider data)
 {
     int[] o = ranker.Rank(x, y, ngroups, rankerParam, data, 1);             //TODO
     Array.Copy(o, rankedFeatures, o.Length);
     int[] sizes = GetSizes(x[0].Length, reductionFactor, maxFeatures);
     ClassificationModel[] result = new ClassificationModel[sizes.Length];
     for (int i = 0; i < result.Length; i++)
     {
         if (i == 0 && sizes[0] == x[0].Length)
         {
             result[0] = classifier.Train(x, y, ngroups, classifierParam, 1);
         }
         else
         {
             int[] inds = ArrayUtils.SubArray(o, sizes[i]);
             result[i] =
                 new ClassificationOnSubFeatures(
                     classifier.Train(ClassificationWithRanking.ExtractFeatures(x, inds), y, ngroups, classifierParam, 1), inds);
         }
     }
     return(result);
 }