code: def forward_selection(self, data, labels, weights, num_features):
          
          clf = Ridge(alpha=0, fit_intercept=True, random_state=self.random_state)
          used_features = []
          for _ in range(min(num_features, data.shape[1])):
              max_ = -100000000
              best = 0
              for feature in range(data.shape[1]):
                  if feature in used_features:
                      continue
                  clf.fit(data[:, used_features + [feature]], labels,
                          sample_weight=weights)
                  score = clf.score(data[:, used_features + [feature]],
                                    labels,
                                    sample_weight=weights)
                  if score > max_:
                      best = feature
                      max_ = score
              used_features.append(best)
          return np.array(used_features)
docs: Iteratively adds features to the model