Explicar a saída de um determinado classificador wrt features

7

Dado um classificador binário, é sempre possível explicar por que ele classificou alguma entrada como uma classe positiva? E com isso quero dizer, se temos um grande conjunto de recursos, existe uma ferramenta que diz: 'Para esse resultado, esses são os recursos que foram os mais responsáveis ​​por rotulá-lo como positivo'?

Obrigado !

mlx
fonte
Você pode pegar emprestada uma página do documento LIME e ajustar localmente um modelo que seja interpretável; regressão logística.
Emre
Uma árvore de decisão é muito apresentável / interpretável.
Hobbes

Respostas:

3

Experimente alguns dos exemplos desta biblioteca, que tenta usar o aprendizado de máquina para entender os modelos de aprendizado de máquina de caixa preta no Python:

https://github.com/TeamHG-Memex/eli5

CalZ
fonte
Ouvi sobre isso em uma conversa em um conf. ontem: D. No entanto, tentando fazer algos que não sejam árvores. explicar-se é desnecessariamente complexo. Mas essa é uma opinião pessoal!
Dawny33
Era isso que eu estava procurando, exceto que estou usando máquinas de fatoração no momento e, infelizmente, isso não está incluído no ELI5. Vou ver o desempenho dos algoritmos incluídos, obrigado!
mlx 31/07
@ CalZ obrigado pelo link, é impressionante experimentá-lo.
Xformer
2

É difícil dar uma resposta muito boa a uma pergunta tão ampla.

A interpretabilidade do modelo é um tópico importante e geralmente depende do modelo. Modelos mais simples, como regressões logísticas, são mais fáceis de interpretar do que as redes neurais. É fácil dizer coisas como "se eu puder aumentar o recurso em 1, as chances de acontecer aumentam em ".Xiyβi

Da mesma forma, as árvores de decisão individuais são mais fáceis de interpretar do que as florestas aleatórias. No entanto, algumas pessoas tentam interpretar florestas aleatórias computando a "importância do recurso", que pode ser calculada de várias maneiras, uma das quais é o número de divisões que incluem o recurso em relação ao número de amostras que ele divide.

Você quer uma maneira de tratar seu modelo como uma caixa preta e poder interpretar qualquer modelo?

Eu posso pensar em duas maneiras:

  1. Manipule suas entradas e veja o que acontece com a saída, usando sua amostra

Uma maneira típica é alterar a entrada e ver o impacto no desempenho do modelo. Nas imagens, você pode ocultar partes da imagem e ver quais partes contribuem mais para a precisão. Isso é amplamente usado para redes neurais convolucionais, que são difíceis de interpretar de outra forma.

Para variáveis ​​numéricas, você pode zerar ou adicionar algum ruído a cada recurso e ver qual o impacto desse recurso individual no resultado.

Eu já vi esse tipo de coisa amplamente usada.

  1. Treine com e sem o recurso

Semelhante ao anterior, exceto que você treina com e sem o recurso e vê o impacto que ele tem na precisão do modelo.

Isso tem o benefício adicional de que você não precisa pensar em hiperparâmetros, como a quantidade de ruído que você adicionará a cada recurso, como na abordagem anterior. Além disso, você pode entender melhor o impacto de vários recursos na saída, tentando com e sem esses.

Eu não vi essa abordagem sendo usada, mas aparentemente ela também está sendo usada, como outra pessoa respondeu.


De qualquer forma, eu evitaria tais ataques. A maioria dos modelos pode ser interpretada de alguma forma. Eu já vi pessoas até interpretando redes neurais recorrentes. E, se a interpretabilidade for uma preocupação, basta usar um modelo mais simples, mais fácil de interpretar e explicar.

Ricardo Cruz
fonte
0

Interessante, ainda não ouvi falar disso, mas a matriz de correlação entre os recursos e a variável de destino vai lhe dar uma idéia em certa medida. Se a correlação estiver no lado superior, é mais provável que esse recurso tenha maior voz ao prever o alvo. Se você estiver usando python, sugiro que você visualize a matriz de correlação usando seaborn, aqui está o código de exemplo 1 .

Xformer
fonte
Esta é uma maneira de começar. Mas, novamente, os métodos de seleção de recursos geralmente descobrem entradas importantes para a generalização, uma vez que examinam todo o conjunto de dados e fornecem o que pode ser uma visão útil do conjunto. O que seria legal é fornecer uma resposta a essa pergunta em uma instância!
mlx 31/07
Concordo, isso pode ser muito útil para criar mais recursos robustos. Este é um tópico que seguirei regularmente, com certeza. :)
Xformer