2010-11-17 26 views
0

Ceci est difficile. Il y a probablement un nom pour cela et je ne le sais pas, alors je vais décrire le problème exactement."Analyse de cluster" avec MySQL

J'ai un ensemble de données incluant un certain nombre de valeurs soumises par l'utilisateur. Je dois être en mesure de déterminer, en fonction d'une sorte de moyenne, ou mieux, d'une «proximité des données», quelle valeur est la valeur correcte. Par exemple, si j'ai reçu les trois soumissions suivantes de trois utilisateurs, 4, 10, 3, je saurais que 3 ou 4 serait la valeur «correcte» dans ce cas. Si je devais faire la moyenne, j'obtiendrais 5,6, ce qui n'est pas le résultat escompté. J'essaie de faire cela en utilisant MySQL et PHP.

tl; dr besoin de trouver une valeur à partir d'un ensemble de données basé sur "proximité" des valeurs relatives (en utilisant MySQL/PHP)

de Merci!

+2

Je crois que le terme pour ce type d'analyse est "analyse de cluster". –

+0

Cela semble à peu près juste. Je viens de mettre à jour le titre de ce post. –

+1

Vous recherchez donc la ** distance de Hamming ** entre les jeux de données. Voici le modèle mathématique: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.6.7315&rep=rep1&type=pdf – stillstanding

Répondre

1

Je pense que c'est le genre de chose que vous cherchez:

SELECT id, MIN(ABS(id - (SELECT AVG(id) FROM table))) as min 
FROM table 
GROUP BY id 
ORDER BY min 
LIMIT 1; 

Par exemple, si votre ensemble de données contient les ID suivants: 3, 4, 10, avec une moyenne de 5,6667. La valeur la plus proche de 5.6667 est 4. Si votre ensemble de données est 3, 6, 10, 14, avec une moyenne de 8,25, la valeur la plus clostest est 10.

Cette requête renvoie cette requête. J'espère que cela aide.

2

La mise en cluster à l'aide d'une base de données ne va pas être une procédure de type requête unique. Il faut des itérations pour générer les clusters de manière efficace.

Vous devez d'abord décider du nombre de clusters souhaité. Si vous ne vouliez qu'un seul cluster, alors évidemment tout irait dans. Si vous en voulez deux, vous pouvez écrire votre programme pour séparer les noeuds en deux groupes en utilisant une sorte de métrique de corrélation. En d'autres termes, je ne pense pas que ce soit une question MySQL autant qu'une question de clustering.

0

J'ai l'impression que vous êtes à la recherche de la médiane

Par ex dans la liste 1 2 3 4 100, la médiane (valeur centrale) est 3.

Vous pouvez rechercher [https://stackoverflow.com/search?q=sql+median trouver la médiane dans SQL].