code: def _can_apply_kmeans_features(self):
      if self._data_info is None:
          return False
  
      # are there any continous
      continous_cols = 0
      for k, v in self._data_info["columns_info"].items():
          if "categorical" not in v:
              continous_cols += 1
  
      # too little columns
      if continous_cols == 0:
          return False
  
      # too many columns
      if continous_cols > 300:
          return False
  
      # all good, can apply kmeans
      return True
  
imports: import copy
  import json
  import logging
  import os
  import numpy
  import pandas
  from sklearn.preprocessing import OneHotEncoder
  from supervised.algorithms.catboost import catboost_eval_metric
  from supervised.algorithms.lightgbm import lightgbm_eval_metric
  from supervised.algorithms.registry import BINARY_CLASSIFICATION, MULTICLASS_CLASSIFICATION, REGRESSION, AlgorithmsRegistry
  from supervised.algorithms.xgboost import xgboost_eval_metric
  from supervised.preprocessing.label_encoder import LabelEncoder
  from supervised.preprocessing.preprocessing_categorical import PreprocessingCategorical
  from supervised.tuner.hill_climbing import HillClimbing
  from supervised.tuner.preprocessing_tuner import PreprocessingTuner
  from supervised.tuner.random_parameters import RandomParameters
  from supervised.utils.config import LOG_LEVEL
  from supervised.utils.utils import dump_data, load_data
label_desc: Use image node_id 3 for calling the MljarTuner obj's underlying member method code with example usage: obj._can_apply_kmeans_features() and returns: True, False, False, False