TL; DR: dado um grande conjunto de dados de imagem (cerca de 36 GiB de pixels brutos) de dados não rotulados, como posso agrupar as imagens (com base nos valores de pixel) sem saber o número de clusters K
para começar?
Atualmente, estou trabalhando em um projeto de aprendizado não supervisionado para agrupar imagens; pense nisso como agrupar MNIST com valores de pixel RGB de 16x16x3, apenas que eu tenho cerca de 48 milhões de exemplos que preciso agrupar. Sem conhecer suas identidades, eu sei que algumas das imagens estão definitivamente relacionadas porque são da mesma fonte, mas - digamos - eu também não conheço um apropriado K
para "apenas" executar o K-means no set ainda .
Eu estava pensando em fazer alguma incorporação 2D manual usando t-SNE e, em seguida, agrupar manualmente no espaço incorporado (uma tarefa mais simples do que fazê-lo manualmente em 16x16x3
-d), mas todas as implementações em t-SNE que encontrei exigiam o carregamento dos dados na memória. Também pensei em executar o t-SNE pela primeira vez, depois o K-significa nos dados incorporados do t-SNE, mas se você observar os resultados do t-SNE do MNIST, é muito óbvio que esses clusters podem e provavelmente serão distorcidos e distorcidos de maneiras não lineares. Portanto, mesmo se eu soubesse a K
, os grupos provavelmente seriam divididos. Usar distâncias de Mahalanobis para K-significa pode ser uma coisa interessante, mas desde que eu não conheço covariâncias, isso parece ser um beco sem saída também.
Atualmente estou tentando se posso executar a compactação PCA nos exemplos para, pelo menos, recuperar alguma memória do t-SNE, mas isso pode ou não funcionar ... não posso dizer por enquanto.
Alguém pode me dar um ponteiro na direção certa para fazer isso ( idealmente , mas definitivamente não é necessário em um contexto Python, TensorFlow ou Apache Beam / Dataflow)? Eu estava trabalhando na portabilidade de um Streaming / Ball K-meios há um tempo atrás, que tem a boa propriedade de criar novos clusters "sob demanda", mas antes de começar a implementá-lo novamente no Python / TensorFlow / Dataflow, eu esperava que alguém pudesse dê-me algumas idéias por onde começar ou o que evitar.