Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Valor de acurácia se modifica toda vez que o código é rodado

from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC
from sklearn.metrics import accuracy_score

SEED = 20

treino_x, teste_x, treino_y, teste_y = train_test_split(x,y,
                                                       random_state = SEED, test_size = 0.25,
                                                       stratify = y)

print("Treinaremos com %d elementos e testaremos com %d elementos" % (len(treino_x), len(teste_y)))

modelo = LinearSVC()
modelo.fit(treino_x, treino_y)
previsao = modelo.predict(teste_x)
acuracia = accuracy_score(teste_y, previsao)*100

print("A acurácia foi %.2f%%" % acuracia)

respostas:

Treinaremos com 1617 elementos e testaremos com 540 elementos A acurácia foi 47.41%

Treinaremos com 1617 elementos e testaremos com 540 elementos A acurácia foi 48.52%

Treinaremos com 1617 elementos e testaremos com 540 elementos A acurácia foi 49.44%

Treinaremos com 1617 elementos e testaremos com 540 elementos A acurácia foi 54.63%

Treinaremos com 1617 elementos e testaremos com 540 elementos A acurácia foi 57.78%

Pergunta:

Quando rodamos o modelo, o valor da acurácia está se alterando, esse valor não deveria ser fixo quando utilizamos o random state? Isso significa que o modelo não consegue se ajustar pois os dados precisam ser normalizados ?

3 respostas

Olá Fabio,

Além do random_state no train_test_split o LinearSVC também tem um pouco de aleatóriedade no seu funcionamento, mas você pode passar um SEED para ele também:

modelo = LinearSVC(random_state = SEED)

Espero ter ajudado, qualquer dúvida é só falar!

solução!

Ah sim, grato pelo esclarecimento... Posteriormente plotamos o gráfico onde ficou claro que não faz muito sentido utilizar o LinearSVC para problema. O correto foi utilizar o SVC, onde o modelo se ajustou a curva e ficou jóia a representação.

Acredito que por conta disso estava uma aleatoriedade grande nos resultados.. O modelo utilizando o LinearSVC não conseguia se ajustar ao problema..

Além disso o LinearSVC faz uma mistura dos dados internamente, um embaralhamento aleatório. Por isso que ele aceita o parâmetro random_state também.