Escolar Documentos
Profissional Documentos
Cultura Documentos
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())
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])))
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])
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])
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.