3
respostas

Resultado teste de acurácia

import pandas as pd

uri = "https://gist.githubusercontent.com/guilhermesilveira/1b7d5475863c15f484ac495bd70975cf/raw/16aff7a0aee67e7c100a2a48b676a2d2d142f646/projects.csv"

dados = pd.read_csv(uri)

mapa = {"unfinished" : "inacabado",
        "expected_hours" : "horas_esperadas",
        "price" : "preco"}

dados = dados.rename(columns=mapa)

troca = {0 : 1, 
         1 : 0}

dados['finalizado'] = dados.inacabado.map(troca)

x = dados[['horas_esperadas', 'preco']]

y = dados['finalizado']

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_x)))

modelo = LinearSVC()

modelo.fit(treino_x, treino_y)

previsoes = modelo.predict(teste_x)

acuracia = accuracy_score(teste_y, previsoes) * 100

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

Após rodar o código acima tive o seguinte retorno:

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

/usr/local/lib/python3.7/dist-packages/sklearn/svm/_base.py:947: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
  "the number of iterations.", ConvergenceWarning)

Mesmo tendo aplicado o stratify continuo tendo resultados dinâmicos, mudando a cada vez que executo o treino e o teste. Queria saber se alguém pode me ajudar com o motivo disto estar acontecendo.

3 respostas

Bom dia Diogo, blz?

Dei uma olhada rápida no seu código, aparentemente vc utiliza o SEED apenas no train_test_split, o que garante um mesmo estado sempre para suas amostras, entretanto vc não utiliza ele no seu modelo e desta forma a cada vez que vc instância um novo modelo :

modelo = LinearSVC()

Ele entra em execução com um novo random_state.

Para permitir que os resultados sejam reproduzíveis deve-se criar a instância do modelo com o parâmetro random_state definido, pode ser assim:

modelo = LinearSVC(random_state =SEED)

Para saber todos os parâmetros possíveis do modelo sugiro consultar a documentação oficial.

https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html

Boa tarde, João. Tudo certo e contigo?

Po cara, muito obrigado pelas explicações. Muito grato!! Não tinha me ligado nesse detalhe. Vlw pela dica.