input: Write a function to perform a randomized search for the best hyperparameters for a RandomForestClassifier.
  assert 'n_estimators' in best_hyperparameters()
  assert 'max_features' in best_hyperparameters()
  assert 'max_depth' in best_hyperparameters()
output: from sklearn.ensemble import RandomForestClassifier
  from sklearn.datasets import load_iris
  from sklearn.model_selection import RandomizedSearchCV
  import numpy as np
  
  def best_hyperparameters():
      # Load dataset
      data = load_iris()
      X, y = data.data, data.target
  
      # Define the parameter grid
      param_grid = {
          'n_estimators': np.arange(10, 201, 10),
          'max_features': ['auto', 'sqrt', 'log2'],
          'max_depth': np.arange(1, 21, 1),
          'bootstrap': [True, False]
      }
  
      # Initialize the RandomForestClassifier
      rf = RandomForestClassifier()
  
      # Setup the RandomizedSearchCV
      random_search = RandomizedSearchCV(
          estimator=rf,
          param_distributions=param_grid,
          n_iter=100,
          cv=3,
          verbose=0,
          n_jobs=-1,
          random_state=42
      )
  
      # Fit the RandomizedSearchCV to the data
      random_search.fit(X, y)
  
      # Get the best hyperparameters
      best_params = random_search.best_params_
  
      return best_params