docs: def kfold(dataset, problem, method, k=10):
      """
      Does a k-fold on `dataset` with `method`.
      This is, it randomly creates k-partitions of the dataset, and k-times
      trains the method with k-1 parts and runs it with the partition left.
      After all this, returns the overall success ratio.
      """
  
      if k <= 1:
          raise ValueError("k argument must be at least 2")
  
      dataset = list(dataset)
      random.shuffle(dataset)
  
      trials = 0
      positive = 0
      for i in range(k):
          train = [x for j, x in enumerate(dataset) if j % k != i]
          test = [x for j, x in enumerate(dataset) if j % k == i]
          classifier = method(train, problem)
          for data in test:
              trials += 1
              result = classifier.classify(data)
              if result is not None and result[0] == problem.target(data):
                  positive += 1
  
      return float(positive) / float(trials)