Como bin 'inteligentemente' uma coleção de dados classificados?


11

Estou tentando inteligentemente classificar uma coleção classificada. Eu tenho uma coleção de pedaços de dados. Mas eu sei que esses dados se encaixam em posições desiguais. Não sei como escolher de forma inteligente os pontos de extremidade para ajustar adequadamente os dados. por exemplo:mnm

Digamos que eu tenha 12 itens em minha coleção e sei que os dados cabem em três compartimentos:

Index:  1 2 3 4 5 6 7 8 9 10 11 12
Value:  1 1 1 3 3 3 3 3 3 5  5  6

Como escolho inteligentemente meus pontos de interrupção para os compartimentos de ?i={13},{49},{1012}

A implementação atual que eu tenho divide os dados em compartimentos de tamanho uniforme e leva a média dos pontos de extremidade para encontrar os índices para o final dos compartimentos. Então funciona assim:

Index:  1 2 3 4 5 6 7 8 9 10 11 12
Value:  1 1 1 3 3 3 3 3 3 5  5  6

first break evenly: i = 1-4, 5-8, 9-12
mean endpoints:  between 4 and 5: (3+3)/2 = 3
                 between 8 and 9: (3+3)/2 = 3

Portanto, agora qualquer coisa abaixo de 3 cabe no compartimento 1, qualquer coisa acima de 3, mas abaixo de 3, cabe no compartimento 2 e qualquer coisa acima de 3 cabe no compartimento 3. Você pode ver qual é o meu problema. Se os dados tiverem caixas desiguais, meu método falhará.

Um amigo mencionou o algoritmo k-vizinho mais próximo, mas não tenho certeza.


11
Poderia explicar o que significa "inteligentemente"? O que você está tentando realizar com o binning? Por que você está binning em primeiro lugar?
whuber

No segundo ao último parágrafo, você quer dizer , e ? Caso contrário, não faz sentido para mim. 3 e < 4 b i n 2 4 b i n 3<3bin13&<4bin24bin3
gung - Restabelece Monica

Quero dizer, de maneira inteligente e ingenuamente, como assumi que as caixas estavam espaçadas igualmente. se um dado cair em uma lixeira específica que me diz algo muito importante sobre esse dado. Classifico os dados para determinar os índices de quebra de compartimento e decido qual compartimento cada dado cai individualmente.
Matthew Kemnetz

a menos que eu tenha feito algo errado na minha média, acho que estou certo. escolhendo compartimentos espaçados uniformes, todos os meus pontos de extremidade são 3. Portanto, não posso armazenar meus dados corretamente. É por isso que minha implementação é interrompida sem compartimentos espaçados.
Matthew Kemnetz

Aqui está algo que eu fiz em um ambiente um pouco diferente.
Macro

Respostas:


9

Eu acho que o que você quer fazer é chamado clustering. Você deseja agrupar seus "Valores" de modo que valores semelhantes sejam coletados na mesma lixeira e o número total de posições seja predefinido.

Você pode resolver esse problema usando o algoritmo de agrupamento k-means . No MATLAB, você pode fazer isso:

bin_ids = kmeans(Values,3); 

A chamada acima agrupará os valores em Valuestrês grupos, de modo que a variação dentro do grupo seja mínima.


11
Eu também descobri isso. Isso é exatamente o que eu implementei e funcionou excelentemente. Eu vim aqui para responder minha própria pergunta, mas você me venceu! Agrupar era o que eu estava tentando fazer.
Matthew Kemnetz

8

O k-means é uma opção, mas não é muito sensível para dados unidimensionais. Em dados unidimensionais, você tem um benefício enorme : os dados podem ser totalmente classificados.

Veja a otimização de quebras naturais :
http://en.wikipedia.org/wiki/Jenks_natural_breaks_optimization


Isso é extremamente interessante. Você poderia entrar em mais detalhes sobre por que isso pode ser melhor do que k significa?
Matthew Kemnetz

A principal razão pela qual pergunto é porque estou usando o MATLAB para o meu algoritmo e não consegui encontrar nenhuma otimização de interrupções naturais do Jenks em nenhuma caixa de ferramentas etc., portanto, precisarei implementar o meu próprio. Eu só queria saber o quão melhor / mais rápido isso pode ser antes de mudar de marcha e implementar isso.
Matthew Kemnetz

11
k-means é bem estúpido. Tem meios, e sempre se dividirá no meio dos dois meios. Assim, dado, por exemplo, 0 1 2 3 4 5 7 7 7, k-means prefere dividir entre 4 e 5. Às vezes, até divide entre 3 e 4.
Tem QUIT - Anony-Mousse
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.