1
resposta

Mudando de escala com o Pipeline sem mudar o datasets de treino e teste

Para resolver o problema de escala de forma mais simples, podemos usar o Pipeline do sklearn:

from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

seed = 5
np.random.seed(seed)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, stratify = y)
print('O modelo será treinado com %d elementos da amostra e treinado com %d elementos da amostra' % (X_train.shape[0], X_test.shape[0]))

modelo = Pipeline([
    ('scaler', StandardScaler()),
    ('svm', SVC(gamma = 'auto'))
])
modelo.fit(X_train, y_train)
modelo.predict(X_test)
acc = accuracy_score(y_test, modelo.predict(X_test)) * 100
print('Acurácia: %.2f%%' % acc)

Com isso, o StandardScaler() só será utilizado quando chamarmos o fit() ara treinar o modelo e posteriormente com o predict(), sem a necessidade de criar os dataframes raw_ e depois editar o código na para plotar a decision boundary.

1 resposta

Olá, Henrique! Tudo bem com você?

Muito obrigado por compartilhar sua dica. Tenho certeza que ajudará o pessoal e vai despertar o interesse por pesquisar ainda mais o método pipeline, que é muito utilizado em aprendizado de máquina. Como sugestão de leitura, vou deixar o tópico "Como usar a pipeline?" que explico sobre pipeline.

Ótimos estudos e abraço.