Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Explorando o paper: Classification in the presence of Label Noise: a Survey, Benoit Frenay; Michel Verleysen.

+1 voto
9 visitas
perguntada Nov 6 em Ciência da Computação por Fábio Springer (11 pontos)  
editado Nov 6 por Fábio Springer

O objetivo do paper [e apresentar um review da literatura sobre a presença de ruídos em bases de dados e seus efeitos em algoritmos de classificação. Ruídos são definidos como qualquer coisa que atrapalhe na relação entre features e a classificação.

Existem dois tipos de ruídos, feature a class. Os ruídos de classe são mais relevantes vistos que a existência de inconsistência em na observação de uma feature tem um impacto menor na previsão do que uma classe mal definida.

Ruídos podem ocorrer por diversos motivos e em geral ocorrem naturalmente quando humanos estão envolvidos. Isso ocorre porque humanos podem errar a classificação, digitar errado na base ou até mesmo escrever um algoritmo que binariza de forma incorreta a classe desejada.

Existem três modelos básicos que explicam como ocorre a inclusão de ruídos em uma determinada base. Seja \(Y a classe real, \tilde{Y} a classe apresentada na base \) , \(E =1\) se \(Y \neq \tilde{Y}\) e \(x\) o vetor de features.
Então a probabilidade do primeiro tipo de inclusão de é definida como: \(p_{e}=P(E=1)=P(Y \neq \tilde{Y})\). O segundo modelo é definido por: \(\begin{aligned}
P(\tilde{Y}&=\tilde{y} \mid Y=y) \\
&=\sum_{e \in{0,1}} P(\tilde{Y}=\tilde{y} \mid E=e, Y=y) P(E=e \mid Y=y)
\end{aligned}\).
E por fim o terceiro modelo: \(p_{e}=P(E=1)=\sum_{y \in \mathcal{Y}} P(Y=y) P(E=1 \mid Y=y)\).
O primeiro modelo é chamado de complementarmente randômico, logo o ruído é independente. O segundo modelo é o quase randômico e o ruído só depende do valor real da classe, por fim o terceiro modelo é o não randomico e o ruído depende do valor real daclasse e do vetor de features.

Ruídos podem ter diversos efeitos a depender do algoritmo utilizado. Os efeitos mais comuns são piora na performance, mudanças do tamanho da amostra e dificuldade de identificar features.

Dito isso existem três formas básicas de lidar com ruídos. A primeira consiste em assumir que algoritmos com menor propensão a overfitting são naturalmente robustos a ruídos. Essa abordagem é muito boa para casos simples de ruídos que se enquadrariam no nosso primeiro modelo.

A segunda abordagem consiste em filtrar a base de dados e tentar remover os ruídos. O problema dessa abordagem é que os resultados vão variar muito a depende da competência do programador em encontrar ruídos resultando em um método heurístico. O método comum de fazer a limpeza da base é rodar um algoritmo de classificação e eliminar as instancias mal classificadas antes de rodar o algoritmo de previsão.

A terceira abordagem em adicionar um passo no algoritmo de classificação que tenta modelar diretamente a presença de ruídos. Essa abordagem possui uma base teórica mais solida do que as duas anteriores, no entanto costuma gerar algoritmos mais complexos e não necessariamente com melhor acurácia ou precisão.

Conhecendo as formas de modelar a existência de ruídos e algumas abordagens é importante discutir como avaliar e estudar algoritmos em bases ruidosas. Existem poucas bases reais com ruídos que foram manualmente corrigidas limitando as possibilidades de estudo. Uma possibilidade seria adicionar randomicamente ruídos nas bases para realizar o estudo, o problema é que só podemos estudar casos simples de ruídos (primeira modelagem de ruídos) utilizando essa abordagem. Dado esse e outros problemas existem muitos problemas em aberto e não existe um método generalista para lidar com bases ruidosas.

Um exemplo interessante que pode ser replicado com python é o fato do Knn1 ser particularmente ruin com dados ruidosos. Para demostrar isso usei a base de dados iris modifica de duas formas. Em primeiro lugar mudei o objetivo da base, nesse exemplo classifico apenas se a flor é do tipo setosa ou não. Em seguida adicionei uma coluna com a nova classe e com uma classe com 10% de ruido randômico. Um exemplo da base pode ser visto abaixo, perceba que a décima primeira entrada possui ruído.
A imagem será apresentada aqui.

Agora rodamos o KNN1 para a coluna com ruído e sem ruído para observar a diferença de acurácia.

import pandas as pd
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# import dataset
iris = pd.read_csv("C:\\Users\\fabio\\OneDrive\\Documentos\\UNB\\computacao\\iris_noise.csv")

# Definir features
x_colums = iris["Sepal.Length","Sepal.Width","Petal.Length","Petal.Width","Species"]

#Definir classificador com e sem ruidos
y_colums = iris["setosa"]
y_colums_noise = iris["setosa_noise"] 

# Dividir a base 
X_train, X_test, y_train, y_test = train_test_split(x_colums, y_colums, test_size=0.33)
X_train2, X_test2, y_train2, y_test2 = train_test_split(x_colums, y_colums_noise, test_size=0.33)


# Definir kkn1
Knn = KNeighborsRegressor(n_neighbors = 1)
Knn_noise = KNeighborsRegressor(n_neighbors = 1)
#fitar o modelo
Knn.fit(X_train, y_train)
Knn_noise.fit((X_train2, y_train2))

# Predição 
y_pred = Knn.predict(X_test)
y_pred2 = Knn_noise.predict(X_test2)

# Acuracia 
print( accuracy_score(y_test, y_pred))
print((y_test2, y_pred2))

Obtemos 66% de acurácia para o algoritmo sem ruído e 54% de acurácia para o algoritmo com ruídos. Perceba que mesmo o KNN1 não sendo ideal a inclusão de ruídos piorou bastante a acurácia do nosso algoritmo.

Compartilhe
comentou Nov 10 por danielcajueiro (5,501 pontos)  
Ola Fabio, talvez vc possa dividir o post entre pergunta e resposta.

Entre ou cadastre-se para responder esta pergunta.

...