Oi, Gabriel! Tudo bem?
Pode ser que essa questão esteja relacionada à necessidade de escalar os dados antes de usar o SVC, que é sensível à escala das features. Na aula, foi mencionado que o SVM (SVC) precisa que as features sejam escaladas, e isso pode estar causando a diferença nos resultados.
Você pode criar um Pipeline que inclua o StandardScaler
para escalar os dados antes de aplicar o modelo SVC. Isso garantirá que o escalonamento seja feito de forma correta durante cada iteração do GroupKFold
.
Vou deixar abaixo um exemplo de como você pode fazer esse ajuste:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import GroupKFold, cross_validate
import numpy as np
SEED = 301
np.random.seed(SEED)
# Criando o pipeline com o scaler e o modelo
pipeline = Pipeline([
('transformacao', StandardScaler()),
('estimador', SVC())
])
# Definindo o GroupKFold
cv = GroupKFold(n_splits=10)
# Realizando o cross-validate com o pipeline
results = cross_validate(pipeline, x_azar, y_azar, cv=cv, groups=dados.modelo, return_train_score=False)
# Função para imprimir os resultados
def imprime_resultados(results):
media = results['test_score'].mean()
intervalo = results['test_score'].std() * 2
print(f"Accuracy médio: {media * 100:.2f}")
print(f"Accuracy intervalo: [{(media - intervalo) * 100:.2f}, {(media + intervalo) * 100:.2f}]")
imprime_resultados(results)
→ Ao usar o Pipeline
, garantimos que o StandardScaler
é aplicado antes do SVC
em cada iteração do GroupKFold
.
Espero ter ajudado!
Abraço! ✨✨
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!