Melhor maneira de classificar conjuntos de dados com tipos mistos de atributos

13

Gostaria de saber qual é a melhor maneira de classificar um conjunto de dados composto por tipos mistos de atributos, por exemplo, textual e numérico. Sei que posso converter texto em booleano, mas o vocabulário é diverso e os dados se tornam muito escassos. Também tentei classificar os tipos de atributos separadamente e combinar os resultados por meio de técnicas de meta-aprendizado, mas não funcionou bem.

user900
fonte

Respostas:

11

As respostas de Christopher parecem muito razoáveis. Em particular, os métodos baseados em árvore se dão bem com esse tipo de dados, porque se ramificam em características discriminatórias. É um pouco difícil dizer sem conhecer seu aplicativo específico, mas, em geral, se você acha que alguns de seus recursos podem ser significativamente mais discriminativos que outros, tente algumas técnicas de redução de dimensionalidade para limpar um pouco isso.

Além disso, se você usar uma técnica de redução de dimensionalidade, acabará obtendo um formato um pouco mais robusto para seu vetor de recursos (eles geralmente acabam sendo vetores numéricos diretos em vez de tipos de dados mistos), o que pode permitir que você utilize métodos diferentes. Você também pode examinar os recursos de engenharia manual. Com os recursos projetados manualmente, você Random Forestficará muito próximo do estado da arte na maioria das tarefas.

indico
fonte
2
Outro voto pela redução da dimensionalidade. Apenas algumas adições: Principal Component Analysisou Non-Negative Matrix Factorizationreduzirão o número de variáveis, enriquecerão os dados esparsos e transformarão todas as variáveis ​​em quantitativas. Além disso, avaliando a qualidade do modelo de redução de dimensionalidade, o autor da pergunta pode estimar a utilidade das variáveis ​​textuais.
sobach
ótima resposta @indico. Você poderia nos dar uma referência em um livro ou artigo que os algoritmos baseados em árvore têm melhor desempenho com dados de tipo misto (dados categóricos e quantitativos)?
ZelelB
6

É difícil responder a essa pergunta sem saber mais sobre os dados. Dito isto, eu ofereceria o seguinte conselho:

A maioria das técnicas de aprendizado de máquina pode manipular dados de tipo misto. Métodos baseados em árvore (como AdaBoost e Random Forests) se dão bem com esse tipo de dados. A questão mais importante é na verdade a dimensionalidade, com a qual você está correto em se preocupar.

Eu sugeriria que você fizesse algo para reduzir essa dimensionalidade. Por exemplo, procure as palavras ou frases que melhor separam os dados e descarte as outras palavras (nota: os métodos baseados em árvore fazem isso automaticamente).

Christopher Louden
fonte
2

Com as poucas informações que você forneceu sobre a natureza de seus dados, recomendamos que você siga a seguinte abordagem:

  1. Converta dados de texto em categorias. Você pode tentar alternativas diferentes para quanta informação as categorias devem conter, mas categorias específicas precisam existir para cada variável. Como exemplo, assumirei uma variável que veio de um campo de texto de um questionário de pesquisa sobre a maneira preferível de as pessoas trabalharem.

    Inicialmente, precisamos garantir que as respostas com significado semelhante sejam escritas da mesma maneira e pertençam à mesma categoria (por exemplo, "de bicicleta", "ciclismo", "de bicicleta" todos tenham o mesmo significado). Em seguida, você pode tentar mesclar outras categorias menos detalhadas (por exemplo, mesclar "bonde", "metrô" e "ônibus" em "Meios de transporte público") ou até mais (por exemplo, "Caminhada", "Corrida", "Ciclismo" em " Atividade física "), dependendo do que você está tentando descobrir.

    Você pode até colocar algumas combinações diferentes no seu conjunto de dados e, em seguida, as próximas etapas determinarão quais serão usadas para a análise. Nos casos em que os dados de texto podem ser "traduzidos" em variáveis ​​ordenadas, faça isso (por exemplo, se você tiver "pequeno, médio, alto", transforme-o em "1,2,3").

  2. Transforme suas variáveis ​​categóricas (não as ordinais) em variáveis ​​fictícias (binárias). A maioria dos algoritmos de classificação / seleção de recurso faz isso automaticamente, mas verifique se é o caso dos que você seleciona. Percebo que a dimensionalidade dos dados se tornará bastante grande neste momento, mas isso será tratado na próxima etapa.

  3. Aplique uma técnica de seleção de característica / redução de dimensionalidade em seus dados. Você pode encontrar uma revisão útil de tais técnicas aqui . Se você estiver usando Python, as ferramentas do sklearn oferecem várias opções (veja mais detalhes aqui ). Certifique-se de usar uma técnica que também considere a multicolinearidade. Eu tentaria a análise de componentes principais ou um algoritmo baseado em árvore.

  4. Para classificar os dados, eu usaria o Decision Tree Classifier (também disponível via sklearn ). Ele também executa a seleção de recursos, definindo pesos importantes para os recursos. Você pode definir o nível de detalhe na árvore gerada, dependendo de suas opções (por exemplo, max_depth, min_samples_split) Certifique-se de ajustar o nível de detalhe com base na validação cruzada para evitar ajustes excessivos.

missrg
fonte