O rpart usa divisões multivariadas por padrão?

8

Eu sei que a rpartfunção de R mantém os dados necessários para implementar a divisão multivariada, mas não sei se ele está realmente executando divisões multivariadas. Eu tentei pesquisá-lo on-line, olhando para os rpartdocumentos, mas não vejo nenhuma informação que ele possa fazer ou esteja fazendo. Alguém sabe ao certo?

chubbsondubs
fonte
O que você quer dizer exatamente com divisão multivariada? Teste multivariado que atributo deve ser usado para dividir ou dividir com base em alguma função de poucos atributos?
Esta é uma divisão que usa mais de uma variável. Geometricamente, isso significa uma divisão ao longo de um hiperplano, em vez de um plano perpendicular a um dos eixos.
Chubbsondubs

Respostas:

13

O Rpart fornece apenas divisões univariadas. Acredito, com base na sua pergunta, que você não está totalmente familiarizado com a diferença entre um método de particionamento univariado e um método de particionamento multivariado. Fiz o meu melhor para explicar isso abaixo, além de fornecer algumas referências para pesquisas adicionais e sugerir alguns pacotes R para implementar esses métodos.

Rpart é um classificador baseado em árvore que usa particionamento recursivo. Com os métodos de particionamento, você deve definir os pontos nos seus dados nos quais uma divisão deve ser feita. O algoritmo rpart em R faz isso encontrando a variável e o ponto que melhor divide (e, portanto, reduz) o RSS. Como as divisões acontecem apenas ao longo de uma variável por vez, essas são divisões univariadas. Uma divisão multivariada é normalmente definida como um particionamento simultâneo ao longo de vários eixos (portanto, multivariada), ou seja, o primeiro nó rpart pode se dividir ao longo de Idade> 35, o segundo nó pode se dividir em Renda> 25.000 e o terceiro nó pode se dividir nas cidades a oeste de o Mississippi. O segundo e o terceiro nós são divididos em subconjuntos menores dos dados gerais, portanto, no segundo nó, o critério de renda divide melhor o RSS apenas para as pessoas com mais de 35 anos, não se aplica a observações não encontradas neste nó, o mesmo se aplica ao critério Cidades. Pode-se continuar fazendo isso até que exista um nó para cada observação em seu conjunto de dados (rpart usa uma função de tamanho mínimo de bucket além de um critério de tamanho mínimo de nó e um parâmetro cp que é o mínimo que o valor do quadrado r deve aumentar para continue ajustando).

Um método multivariado, como o Método de Indução de Regras do Paciente (o pacote prim em R), seria dividido simultaneamente, selecionando, por exemplo, Todas as observações em que a renda fosse superior a 22.000, Idade> 32 e Cidades a oeste de Atlanta. A razão pela qual o ajuste pode ser diferente é porque o cálculo para o ajuste é multivariado em vez de univariado, o ajuste desses três critérios é calculado com base no ajuste simultâneo das três variáveis ​​em todas as observações que atendem a esse critério, em vez de particionar iterativamente com base no divisões univariadas (como com rpart).

Existem várias crenças no que diz respeito à eficácia dos métodos de particionamento univariado versus multivariado. Geralmente, o que eu vi na prática é que a maioria das pessoas prefere o particionamento univariado (como o rpart) para fins explicativos (só é usado na previsão quando se lida com um problema em que a estrutura está muito bem definida e a variação entre as variáveis ​​é bastante constante, é por isso que estes são frequentemente utilizados na medicina). Modelos de árvore univariados são tipicamente combinados com alunos de ensemble quando usados ​​para previsão (isto é, uma floresta aleatória). As pessoas que usam particionamento ou agrupamento multivariado (que está intimamente relacionado ao particionamento multivariado) costumam fazer isso para problemas complexos que os métodos univariados se encaixam muito mal, e o fazem principalmente para previsão ou para agrupar observações em categorias.

Eu recomendo o livro de Julian Faraway, Estendendo o modelo linear com R. O capítulo 13 é inteiramente dedicado ao uso de árvores (todas univariadas). Se você estiver mais interessado em métodos multivariados, Elements of Statistical Learning de Hastie et. al, fornece uma excelente visão geral de muitos métodos multivariados, incluindo o PRIM (embora Friedman em Stanford tenha seu artigo original sobre o método publicado em seu site), bem como os métodos de agrupamento.

No que diz respeito aos pacotes R para utilizar esses métodos, acredito que você já esteja usando o pacote rpart, e mencionei o pacote prim acima. Existem várias rotinas de cluster embutidas e eu gosto bastante do pacote de partes mencionado por outra pessoa neste segmento, devido à sua implementação de inferência condicional no processo de criação da árvore de decisão. O pacote optpart permite executar o particionamento multivariado, e o pacote mvpart (também mencionado por outra pessoa) permite executar árvores rpart multivariadas, no entanto, eu pessoalmente prefiro usar o partDSA, que permite combinar nós mais abaixo na sua árvore para ajudar a impedir o particionamento de similares observações, se achar que parte e parte não são adequadas para meus propósitos de modelagem.

Nota: No meu exemplo de uma árvore rpart no parágrafo 2, descrevo como o particionamento funciona com números de nós. Se alguém desenhar essa árvore, o particionamento continuará para a esquerda se a regra para a divisão for verdadeira, no entanto no RI acredite que a divisão realmente prossiga para a direita se a regra for verdadeira.

Adão
fonte
Adam ótima resposta. Era exatamente o que eu estava perguntando. No entanto, você adicionou um pouco de informações sobre as quais tive dificuldade em encontrar mais informações. O critério de parada de PC da Mallow. Examinei o código-fonte R, mas é muito difícil descobrir como eles estão escolhendo parar. Eu tenho aproximadamente uma ideia, mas preciso de um artigo ou de uma discussão sobre como funciona para que eu possa concluir a implementação. Você tem alguma informação sobre isso?
chubbsondubs
Portanto, verifiquei o manual de referência da rpart e, aparentemente, estava incorreto. Enquanto um dos critérios para parar no rpart é chamado "cp", é abreviação de "parâmetro de complexidade" e é apenas a quantidade mínima em que r ^ 2 deve aumentar, a fim de buscar uma divisão específica. Corrigi minha postagem acima para refletir isso. A falta de testes estatísticos nas regras de divisão é uma das razões pelas quais eu uso o pacote party sobre o pacote rpart. Com o pacote de terceiros, o método padrão implementa um valor p corrigido por Bonferroni como critério de parada (padrão p = 0,05). Para detalhes, consulte a vinheta.
Adam
Sinto que o fato de a rpart não usar um critério de parada é um ativo, e não um passivo. Uma divisão pode parecer inútil e, no entanto, abrir caminho para divisões subsequentes mais abaixo na árvore, o que pode ser bastante significativo. Uma política de "crescer e depois podar", conforme implementada na rpart, evitará paradas precoces e me parece uma abordagem sensata.
F. Tusell
@Tusell, que tem toda a ideia por trás da pesquisa da CART, é que escolher um critério de parada é subótimo. Cultive uma árvore completa e use a poda para encontrar uma árvore ideal. No entanto, como o @Adam apontou, o rpart não funciona exatamente assim. Parte disso, acho que é uma otimização para grandes conjuntos de dados. Se ele pode cortar uma subárvore mais cedo sem explorá-lo, pode economizar muito mais tempo de CPU do que passar por uma sessão completa de expansão e remoção. Como você ressalta, isso significa que algumas árvores não são totalmente exploradas e você precisa ajustar os parâmetros do cp para fazê-lo funcionar.
Chubbsondubs
@Adam é R ​​^ 2 calculado a partir do conjunto de dados de teste ou está usando o conjunto de poda para calcular o MSE?
Chubbsondubs
1

Por mais que eu saiba, isso não acontece; mas não o usa há um tempo. Se eu te entendo bem, você pode querer olhar para o pacote mvpart .

F. Tusell
fonte
1

Sua terminologia é confusa. Por que você quer dizer divisões usando mais de uma variável ou uma árvore que permita uma resposta multivariada (em oposição a uma univariada)? Eu presumo o último.

F. Tusell apontou para o pacote mvpart, que adiciona um critério multivariado para a impureza do nó que é avaliado para todas as divisões possíveis em cada estágio da construção da árvore.

Uma alternativa é o pacote de terceiros , cuja função ctree()pode lidar com respostas multivariadas.

Gavin Simpson
fonte
Na verdade, estou me referindo a divisões usando mais de uma variável. Se você ler o livro CART de Leo Breiman, ele se refere a isso como divisões multivariáveis ​​em oposição a univariável, onde apenas uma variável é considerada. Obrigado pela resposta.
Chubbsondubs
1
Todas as variáveis ​​são consideradas rpart, a divisão binária é formada pela pesquisa sobre todas as variáveis ​​e todos os possíveis locais de divisão dentro de cada variável. rparttambém armazena informações sobre divisões substitutas que podem ser usadas quando há dados ausentes em suas variáveis. Isso ajuda?
Gavin Simpson
Se você quer dizer divisões que são uma combinação de duas ou mais variáveis, não, rpartnão trata desse caso.
Gavin Simpson
1

As divisões multivariadas conforme definidas no livro CART não são implementadas rpart. O pacote de software CART da Salford Systems possui esse recurso, mas o AFAIK utiliza um algoritmo proprietário licenciado pela Breiman, Friedman et al.

Hong Ooi
fonte