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.