Algoritmo para gerar regras de classificação

11

Portanto, temos potencial para um aplicativo de aprendizado de máquina que se encaixe perfeitamente no domínio do problema tradicional resolvido pelos classificadores, ou seja, temos um conjunto de atributos que descrevem um item e um "bloco" no qual eles terminam. No entanto, em vez de criar modelos de probabilidades, como Naive Bayes ou classificadores similares, queremos que nossa saída seja um conjunto de regras aproximadamente legíveis por humanos que possam ser revisadas e modificadas por um usuário final.

O aprendizado de regras de associação se parece com a família de algoritmos que resolve esse tipo de problema, mas esses algoritmos parecem focar na identificação de combinações comuns de recursos e não incluem o conceito de um intervalo final para o qual esses recursos podem apontar. Por exemplo, nosso conjunto de dados é mais ou menos assim:

Item A { 4-door, small, steel } => { sedan }
Item B { 2-door, big,   steel } => { truck }
Item C { 2-door, small, steel } => { coupe }

Eu só quero as regras que dizem "se é grande e uma porta 2, é um caminhão", não as regras que dizem "se é uma porta 4 também é pequena".

Uma solução alternativa em que posso pensar é simplesmente usar algoritmos de aprendizado de regras de associação e ignorar as regras que não envolvem um depósito final, mas isso parece um pouco invasivo. Perdi alguma família de algoritmos por aí? Ou talvez eu esteja abordando o problema incorretamente para começar?

super_seabass
fonte

Respostas:

9

O C45 fabricado por Quinlan é capaz de produzir regras para previsão. Verifique esta página da Wikipedia . Eu sei que em Weka o nome é J48. Não tenho idéia de quais são implementações em R ou Python. De qualquer forma, a partir desse tipo de árvore de decisão, você deve poder inferir regras para previsão.

Edição posterior

Além disso, você pode estar interessado em algoritmos para inferir regras diretamente para classificação. RIPPER é um, que novamente em Weka recebeu um nome diferente JRip. Veja o documento original do RIPPER: Indução Rápida de Regras Efetivas, WW Cohen 1995

rapaio
fonte
Eu havia experimentado o C45 / J48 em um projeto anterior. Eu não sabia que havia regras que eu poderia recuperar disso. Também vou conferir o RIPPER. Obrigado!
Super_seabass
Verifique também o pacote C50 em R.
nfmcclure
Queria fornecer uma atualização para esta pergunta / resposta: estamos usando o JRip com algum sucesso, mas nosso novo concorrente líder é o FURIA ( cs.uni-paderborn.de/fileadmin/Informatik/eim-i-is/PDFs/… ) Está gerando as melhores regras para revisão / uso humano, porque tenta gerar um conjunto de regras exaustivo. O JRip cria boas regras, mas possui uma regra "padrão" para classificação quando nenhuma outra regra se aplica. Os buckets padrão não funcionam bem no contexto de negócios do nosso projeto, precisamos de regras exaustivas.
Super_seabass 21/10
7

Na verdade, é ainda mais simples do que isso: pelo que você descreve - você está apenas procurando um algoritmo básico de árvore de classificação (portanto, não há necessidade de variantes um pouco mais complexas, como a C4.5, que são otimizadas para a precisão da previsão). O texto canônico é:

http://www.amazon.com/Classification-Regression-Wadsworth-Statistics-Probability/dp/0412048418

Isso é prontamente implementado no R:

http://cran.r-project.org/web/packages/tree/tree.pdf

e Python:

http://scikit-learn.org/stable/modules/tree.html

Therriault
fonte
Não concordo que as árvores sejam úteis aqui. É uma questão de regras de filtragem, e que pode ser conseguido com o arules pacote em R.
adesantos
1

Você deve tentar o pacote arules em R. Ele permite criar não apenas as regras de associação, mas também especificar o tamanho de cada regra, a importância de cada regra e também pode filtrá-las, e é isso que você está procurando (tente o comando rhs () deste pacote).

adesantos
fonte