1
resposta

Executei o SVC após o LinearSVC e não encontrei o mesmo resultado que no vídeo

Executei o SVC após o LinearSVC da forma simples como mostrado na vídeo-aula, mas não encontrei o mesmo resultado que no vídeo, mesmo usando o mesmo seed:

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score


SEED = 5
np.random.seed(SEED)


X = dados[['horas_esperadas', 'preco']]
y = dados['finalizado']

treino_X, teste_X, treino_y, teste_y = train_test_split(X, y, test_size=0.25, 
                                                        stratify=y)

print("Treinaremos com %d elementos e testaremos com %d elementos" % (len(treino_X), len(teste_X)))


modelo = SVC()
modelo.fit(treino_X, treino_y)

previsoes = modelo.predict(teste_X)


acuracia = accuracy_score(teste_y, previsoes)

print("A acuracia foi de %.2f%%" % (acuracia*100))

print(treino_y.value_counts())
print(teste_y.value_counts())

Resultado:

Treinaremos com 1617 elementos e testaremos com 540 elementos
A acuracia foi de 55.19%
1    850
0    767
Name: finalizado, dtype: int64
1    284
0    256
Name: finalizado, dtype: int64

A decision boundary encontrada também foi linear, como no LinearSVC.

O que há de errado neste código?

1 resposta

Olá, se você observar os parâmetros do train_test_split

sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)

Verá que tem um componente aleatório. Este número escolhido no Seed (5, no caso), serve apenas para a sua codificação, caso queira repetir no futuro. Você poderia usar 6, 7, etc. Ou seja, qualquer número inteiro.

Portanto, ao usar seed =5 (ou 6,7,8,etc) , ele irá repetir apenas o valor que gerou no seu código. O código não irá gerar o mesmo valor do vídeo, porque tem o componente aleatório.