Насколько я понимаю, что вы хотите достичь, это динамически создавать экземпляры существующих классификаторов на основе некоторого пользовательского ввода, заданного в строке. BaseEstimator
является базовым классом для всех оценщиков, поэтому я думаю, что вы должны использовать его только в том случае, если вы планируете создать свой собственный оценщик.
Теперь я не знаю, как вам удалось запустить приведенный выше код, поскольку BaseEstimator()
не принимает никаких аргументов:
clf = BaseEstimator('RandomForestClassifier')
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3331, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-6-59dd1a62618a>", line 1, in <module>
clf = BaseEstimator('RandomForestClassifier')
TypeError: BaseEstimator() takes no arguments
В любом случае чем ближе вы можете подойти к динамической c реализации классификатора:
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
def get_clf(name):
if name not in ('RandomForestClassifier', 'DecisionTreeClassifier'):
raise ValueError(f"{name} is not a recognised option")
classifiers = {
"DecisionTreeClassifier": DecisionTreeClassifier,
"RandomForestClassifier": RandomForestClassifier
}
classifier = classifiers[name]
return classifier()
В качестве альтернативы вы можете go с более простым решением:
def get_clf(name):
if name not in ('RandomForestClassifier', 'DecisionTreeClassifier'):
raise ValueError(f"{name} is not a recognised option")
if name == 'RandomForestClassifier':
return RandomForestClassifier()
elif name == 'DecisionTreeClassifier':
return DecisionTreeClassifier()
else:
raise RuntimeError()
В качестве альтернативы вы можете использовать что-то вроде приведенного ниже: