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:m
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 ?
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.
fonte
Respostas:
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:
A chamada acima agrupará os valores em
Values
três grupos, de modo que a variação dentro do grupo seja mínima.fonte
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
fonte