3
respostas

Pq a acurácia ficou diferente?

import pandas as pd
uri = "https://gist.githubusercontent.com/guilhermesilveira/1b7d5475863c15f484ac495bd70975cf/raw/16aff7a0aee67e7c100a2a48b676a2d2d142f646/projects.csv"
dados = pd.read_csv(uri)
dados.head(5)

a_renomear = {
    'expected_hours' : 'horas_esperadas',
    'price' : 'preco',
    'unfinished' : 'nao_finalizado'
}
dados = dados.rename(columns = a_renomear)
dados.head()

troca = {
    0 : 1,
    1 : 0
}
dados['finalizado'] = dados.nao_finalizado.map(troca)
dados.head()

dados.tail()

import seaborn as sns
sns.scatterplot(x = 'horas_esperadas', y = 'preco', data = dados)

sns.scatterplot(x = 'horas_esperadas', y = 'preco', hue= 'finalizado', data = dados)

sns.relplot(x = 'horas_esperadas', y = 'preco', hue='finalizado', col= 'finalizado', data = dados)

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 %.2f%%" % acuracia)
3 respostas

Olá Maria, tudo bem? Espero que sim!

O que acontece é que o modelo LinearSVC() pode encontrar resultados diferentes se não utilizarmos um random_state específico para reproduzir sempre da mesma forma.

Como o código do curso não utilizou um random_state, vai ser muito difícil obter exatamente o mesmo resultado, mas caso você queira deixar os códigos reprodutíveis, utilize:

modelo = LinearSVC(random_state = SEED)

Dessa forma sempre que rodar o código o modelo terá o mesmo resultado.

Bons estudos!

opa joao tudo certo, estou nessa episodio do curso, apliquei seu codigo e funcionou, porem tenho outra duvida, diz que no codigo do curso nao foi aplicado o random_state = SEED porem ele foi aplicado no train_test_split como consta no codigo da colega, aquele SEED é desnecessário então ou não funcional?

Olá Everton, tudo bem? Espero que sim!

O SEED no train_test_split vai fazer com que seus dados sejam divididos em treino e teste sempre da mesma forma todas as vezes que o código for executado.

Porém, caso passe o SEED somente para ele, rodaria modelos diferentes porque não foi passado o SEED para o modelo.

O mesmo vale para o caso onde o SEED é definido para o modelo mas não para o train_test_split. Seria executado o mesmo modelo, mas como os dados seriam diferentes a cada execução, os resultados não seriam iguais.

Portanto, para manter a reprodutibilidade do código, deve ser utilizado o SEED para todas as funções que dependem de alguma aleatoriedade.

Bons estudos!