1
resposta

Erro no randint

seed = 301
np.random.seed(seed)

tree_hyperparams = {
    'max_depth' : [3, 5, 10, 15, 20, 30, None],
    'min_samples_split' : randint(32, 128),
    'min_samples_leaf' : randint(32, 128),
    'criterion' : ['gini', 'entropy']
}

tree_randomsearch = RandomizedSearchCV(DecisionTreeClassifier(),
                                       tree_hyperparams,
                                       n_iter = 16,
                                       cv = KFold(n_splits = 5, shuffle = True),
                                       random_state = seed)

tree_randomsearch.fit(X_badluck, y_badluck)
results_treerandom = pd.DataFrame(tree_randomsearch.cv_results_)
results_treerandom.head()

O código retorna:

TypeError: Parameter grid for parameter 'min_samples_split' is not iterable or a distribution (value=47)

Sendo que o value muda quando tento rodar novamente. Ainda não descobri o motivo para o erro.

1 resposta

Olá, Henrique! Tudo bem com você?

O que está acontecendo é que o tree_hyperparams nesse caso deve ser um dicioario com uma lista de valores para cada parâmetro. Logo para resolver esse erro tente passar os randint entre colchetes, da seguinte forma:

seed = 301
np.random.seed(seed)

tree_hyperparams = {
    'max_depth' : [3, 5, 10, 15, 20, 30, None],
    'min_samples_split' : [randint(32, 128)],
    'min_samples_leaf' : [randint(32, 128)],
    'criterion' : ['gini', 'entropy']
}

tree_randomsearch = RandomizedSearchCV(DecisionTreeClassifier(),
                                       tree_hyperparams,
                                       n_iter = 16,
                                       cv = KFold(n_splits = 5, shuffle = True),
                                       random_state = seed)

tree_randomsearch.fit(X_badluck, y_badluck)
results_treerandom = pd.DataFrame(tree_randomsearch.cv_results_)
results_treerandom.head()

Verifique se isso resolve o seu problema. Qualquer dúvida estou à disposição

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!