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

acuracia

minha acuracia parace viciada

import pandas as pd


uri = "https://gist.githubusercontent.com/guilhermesilveira/4d1d4a16ccbf6ea4e0a64a38a24ec884/raw/afd05cb0c796d18f3f5a6537053ded308ba94bf7/car-prices.csv"
dados = pd.read_csv(uri)

a_renomear = {
    'mileage_per_year' : 'milhas_por_ano',
    'model_year' : 'ano_do_modelo',
    'price' : 'preco',
    'sold' : 'vendido'
}
dados = dados.rename(columns=a_renomear)
dados.head()

a_trocar = {
    'no' : 0
    ,'yes' : 1
}
dados.vendido = dados.vendido.map(a_trocar)

from datetime import datetime

ano_atual = datetime.today().year
dados['idade_do_modelo'] = ano_atual - dados.ano_do_modelo
dados.head()

dados["km_por_ano"] = dados.milhas_por_ano * 1.60934
dados.head()

dados = dados.drop(columns = ["Unnamed: 0", "milhas_por_ano", "ano_do_modelo"], axis=1)
dados.head()

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

x = dados[["preco", "idade_do_modelo","km_por_ano"]]
y = dados["vendido"]

SEED = 5
np.random.seed(SEED)
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 = LinearSVC()
modelo.fit(treino_x, treino_y)
previsoes = modelo.predict(teste_x)

acuracia = accuracy_score(teste_y, previsoes) * 100
print('A acuracia foi de %.2f%%'% acuracia)

from sklearn.dummy import DummyClassifier

dummy_stratified = DummyClassifier(strategy= 'stratified')
dummy_stratified.fit(treino_x,treino_y)
acuracia = dummy_stratified.score(teste_x, teste_y) * 100

print('a acuracia do Dummy stratified foi de %.2f%%' % acuracia)

from sklearn.dummy import DummyClassifier

dummy_mostfrequent = DummyClassifier(strategy = 'most_frequent')
dummy_mostfrequent.fit(treino_x, treino_y)
acuracia = dummy_mostfrequent.score(teste_x, teste_y) * 100

print("a acuracia do dummy mostfrequent foi %.2f%%" % acuracia)

from sklearn.preprocessing import StandardScaler
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)
raw_treino_x, raw_teste_x, treino_y, teste_y = train_test_split (x,y, test_size = 0.25,
                                                                 stratify = y)
print("treinaremos com %d elementros e testaremos com %d elementos" % (len(treino_x), len(teste_x)))

scaler = StandardScaler()
scaler.fit(raw_treino_x)
treino_x = scaler.transform(raw_treino_x)
teste = scaler.transform(raw_teste_x)

modelo = SVC()
modelo.fit(treino_x,treino_y)
previsoes = modelo.predict(teste_x)

acuracia = accuracy_score(teste_y, previsoes) * 100
print('A acuracia foi de %.2f%%' % acuracia)

minha acurácia do SCV continua igual o do meu dummy mostfrequent, tem algo errado ? com meu código ??

2 respostas
solução!

Olá, Everton!

Se você notar, ao final do código você chamou os dados normalizados de teste por teste. Nas predições utilizando seu último modelo, você está usando o array teste_x.


teste = scaler.transform(raw_teste_x)

modelo = SVC()
modelo.fit(treino_x,treino_y)
previsoes = modelo.predict(teste_x)

Isso significa que a acurácia foi calculada sobre os dados anteriores, onde você definiu teste_x, retornando assim os mesmos valores.

muito obrigada Giuliana, resolveu minha questão !