Essa é uma comparação entre os modelos de machine learning, Naive-bayes e KNN, a fim de verificar a acurácia destes dois modelos sobre o dataset ‘income’.
Primeiramente, precisamos realizar o procedimento padrão que servirá para os dois modelos:
Procedimento padrão:
Leitura dos dados;
Exclusão de NA (neste caso: ‘?’);
Get_dummies devido a presença de variáveis categóricas;
Seleção do alvo/target (income) e das features. X e y, respectivamente;
Separando os dados em conjuntos de treino e teste (train_test_split do sklearn).
Code
import pandas as pd# Carrega o datasetdata = pd.read_csv('income/income.csv')# Removendo linhas com valores desconhecidos (?)data = data.replace(' ?', pd.NA).dropna()data_target = data['income']data_features = data.drop('income', axis=1)# o data.drop remove uma coluna/linha do dataframe# axis=1 remove a coluna e axis=0 remove a linha# Precisamos converter as variáveis categóricas, por isso, vamos usar o get_dummiesdata_features = pd.get_dummies(data_features)# get_dummies faz com que este data_set fique gigante, pois ele cria uma coluna para cada valor único da variável categórica, deixando o modelo muito lentoy = data_target # alvoX = data_features # features# Selecionando os conjuntos de treinamento e testefrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_scoreX_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, random_state=42)
Agora que estabelecemos a base para os modelos, já podemos usá-los.
KNN (KNeighborsClassifier)
Code
from sklearn.neighbors import KNeighborsClassifiermodelo = KNeighborsClassifier(n_neighbors=3)modelo.fit(X_train, y_train)# Fazendo a prediçãoy_pred = modelo.predict(X_test)score = accuracy_score(y_test, y_pred) # Acurácia de 0.79985print("Acurácia: ", score)df = pd.DataFrame({'Real': y_test, 'Previsto': y_pred})print(df)
O modelo Naive-bayes obteve uma acurácia de 0.55475
Conclusão
O modelo KNN obteve um desempenho muito superior em comparação com o naive-bayes, isso se deve pelo fato do método Gaussiano Naive Bayes tratar as variáveis como variáveis independentes (‘naive = ingênuo’), e dar a mesma importância para todas as variáveis, que não é uma abordagem boa para este dataset, por ter muitas variáveis diferentes, como o tipo de ocupação (profissão).