Нам нужно изменить некоторые вещи в коде:
- Прежде всего,
min_impurity_decrease
следует заменить на min_impurity_split
.RandomForestClassifier
не имеет min_impurity_decrease
. - Во-вторых, проблема в вашем коде заключается в способе определения
class_weight
. - Вам не нужна функция
list
.range
отлично работает для всех параметров, кроме class_weight
.
Пример, который работает с данными радужной оболочки:
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
x = load_iris().data
y = load_iris().target
parameters = {'max_depth': range(3, 11, 2), 'class_weight':[{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}], 'min_impurity_split':range(3, 11, 2), 'max_features':range(3, 4)}
knc = RandomForestClassifier()
clf = GridSearchCV(knc, parameters)
clf.fit(x,y)
clf.best_estimator_
Из документации :
class_weight : dict, list of dicts, “balanced”,
Note that for multioutput (including multilabel) weights should be defined for
each class of every column in its own dict. For example, for four-class
multilabel classification weights should be [{0: 1, 1: 1}, {0: 1, 1: 5}, {0:
1, 1: 1}, {0: 1, 1: 1}] instead of [{1:1}, {2:5}, {3:1}, {4:1}].`