Você está na página 1de 1

Trabalho de TEIA - PCA

Douglas Custódio de Araújo


Introdução
Esse exercício prático possui como propósito avaliar a redução de dimensionalidade de um dataset utilizando-se do algorítmo PCA, comparando-o por meio da realização da regressão linear entre um dataset não tratado com PCA e um dataset tratado com PCA.

O dataset utilizado foi o Tennis-Major-Tournaments-Match-Statistics encontrado em https://archive.ics.uci.edu/ml/datasets/Tennis+Major+Tournament+Match+Statistics, o qual trata-se de um histórico de estatísticas de partidas do campeonato Major de tennis. O dataset original
possui um total de 39 features.

Importação
Nessa seção realiza-se a importação das bibliotecas utilizadas para se realizar as operações sobre os dados trabalhados

In [1]:
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score, confusion_matrix, f1_score
from sklearn.model_selection import train_test_split
from scipy import stats

Carregamento
Esse método possibilita o carregamento dos dados do dataset

In [2]:
def load_data():
return pd.read_csv('FrenchOpen.csv')

Tratamento de dados
Visando-se remover colunas desnecessárias do dataset, realiza-se o tratamento das features presentes, as quais não se pode trabalhar de forma numérica

In [3]:
def process_data(dataset):
features = list(dataset.columns)
features.remove('Player1')
features.remove('Player2')
features.remove('Result')
return stats.zscore(np.array(dataset[features].values.tolist())), np.array(dataset['Result'].values.tolist())

Carregando os dados, tratanto, realizando o PCA


Nessa seção realiza-se o carregamento dos dados do dataset, trata-se os dados e realiza-se o algoritmo PCA por meio da implementação já existente na biblioteca importada anterioremente

In [4]:
dataset = load_data()
dataset = dataset.fillna(0)
dataset, target = process_data(dataset)
a = PCA(n_components = 'mle')
a = a.fit(dataset)
new_dataset = a.transform(dataset)

Reduções executadas
Tendo-se executado o algorítmo, verifica-se que houve uma diminuição de 2 features do total de features abordadas no dataset

In [5]:
print("Quantidade de colunas antes = " + str(len(dataset[0])) + " e quantidade de colunas depois = " + str(len(new_dataset[0])))

Quantidade de colunas antes = 39 e quantidade de colunas depois = 37

In [6]:
dataframe_test, dataframe_train, target_test, target_train = train_test_split(dataset, target, test_size = 0.4, shuffle = False)
pca_test, pca_train, target_test, target_train = train_test_split(new_dataset, target, test_size = 0.4, shuffle = False)

Comparativo
Nessa seção, realiza-se o comparativo entre os resultados obtidos para a regressão linear com o dataset não tratado com PCA e o dataset tratado com PCA

In [7]:
def Regression(dataset, target):
regressor = LogisticRegression(C = 10,max_iter=1e4).fit(dataset[0], target[0])
logreg = regressor.predict(dataset[1])
print("Acuracia: ", accuracy_score(target[1], logreg), '\n')
print("Matriz de confusão: \n", confusion_matrix(target[1], logreg), '\n')
print("F1: ", f1_score(target[1],logreg,average = 'macro'))

In [8]:
print("Resultado com o PCA: \n")
Regression([pca_test, pca_train], [target_test, target_train])

Resultado com o PCA:

Acuracia: 1.0

Matriz de confusão:
[[24 0]
[ 0 26]]

F1: 1.0

In [9]:
print("Resultado sem o PCA: \n")
Regression([dataframe_test, dataframe_train], [target_test, target_train])

Resultado sem o PCA:

Acuracia: 1.0

Matriz de confusão:
[[24 0]
[ 0 26]]

F1: 1.0

Resultado
Observa-se que, tendo em vista não só a pequena diminuição de features possibilitada pelo dataset obtido como também o nível de qualidade do algoritmo, obteve-se um mesmo nível de acurácia para a regressão com o tratamento PCA e sem o tratamento PCA, o que permite
uma diminuição no tempo de execução do algoritmo e no tamanho do dataset trabalhado, diminuindo os gastos com armazenamento e processamento de dados sem afetar a qualidade do resultado obtido.

Você também pode gostar