4
respostas

Cor do grafico

Olá, tudo bem?

Eu estou tendo dificuldade em entender porque ao aplicar o SVC em vez do LinearSVC não consigo ver a curva gráfica colorida.

import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
import matplotlib.pyplot as plt

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

dados = pd.read_csv(uri)
dados.head()

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

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

x = dados[["horas_esperadas", "preco"]]
y = dados["finalizado"]

SEED = 7
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 elementos e testaremos com %d elementos" % (len(raw_treino_x), len(raw_teste_x)))

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

modelo = SVC(gamma='auto')
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)

data_x = teste_x[:, 0]
data_y = teste_x[:, 1]

x_min = data_x.min()
x_max = data_x.max()
y_min = data_y.min()
y_max = data_y.max()

pixels = 100
eixo_x = np.arange(x_min, x_max, (x_max - x_min) / pixels)
eixo_y = np.arange(y_min, y_max, (y_max - y_min) / pixels)

xx, yy = np.meshgrid(eixo_x, eixo_y)

pontos = np.c_[xx.ravel(), yy.ravel()]

Z = modelo.predict(pontos)
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.3)
plt.scatter(data_x, data_y, c=teste_y, s=1)
4 respostas

Oi, Leonardo! Tudo bem com você?

O uso do SVC se dá pois o problema do projeto é não-linear e o LinearSVC é um modelo de aplicação linear, ou seja, apenas soluciona problemas lineares, já o SVC soluciona problemas não lineares.

Quanto a curva, seu código parece estar esse erros. Então, você poderia me retornar o erro que aparece quando a curva não aparece? Assim eu posso te ajudar melhor.

Fico no aguardo do seu retorno!

Oi, Mirla.

Aah, entendi mas o que eu vi aqui também foi que eu esqueci de comentar nessa linha aqui:

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

acho que tava tendo conflito de grafico e sempre ele tava lendo esse primeiro e não o ultimo.

Já que você está executando o código todo, ou seja, sem células, você pode colocar um comando plt.show() após cada plot para que assim, você consiga separar cada figura, do seguinte modo:

import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
import matplotlib.pyplot as plt

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

dados = pd.read_csv(uri)
dados.head()

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

sns.scatterplot(x="horas_esperadas", y="preco", hue="finalizado", data=dados)
plt.show()

x = dados[["horas_esperadas", "preco"]]
y = dados["finalizado"]

SEED = 7
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 elementos e testaremos com %d elementos" % (len(raw_treino_x), len(raw_teste_x)))

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

modelo = SVC(gamma='auto')
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)

data_x = teste_x[:, 0]
data_y = teste_x[:, 1]

x_min = data_x.min()
x_max = data_x.max()
y_min = data_y.min()
y_max = data_y.max()

pixels = 100
eixo_x = np.arange(x_min, x_max, (x_max - x_min) / pixels)
eixo_y = np.arange(y_min, y_max, (y_max - y_min) / pixels)

xx, yy = np.meshgrid(eixo_x, eixo_y)

pontos = np.c_[xx.ravel(), yy.ravel()]

Z = modelo.predict(pontos)
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.3)
plt.scatter(data_x, data_y, c=teste_y, s=1)
plt.show()

Bem melhor. Muito obrigado.