Tous les algorithmes, par définition, sont déterministes compte tenu de leurs entrées. Tout algorithme qui utilise des nombres pseudo-aléatoires est déterministe étant donné la valeur de départ.
K-signifie, que vous avez utilisé comme exemple, commence par des centres de gravité de cluster choisis au hasard afin de trouver les meilleurs. Outre l'initialisation, l'algorithme est totalement déterministe, car vous pouvez vous assurer de regarder son pseudo-code:
Rien ne vous interdit de commencer avec des centres de gravité non aléatoires. Nous utilisons des centres de gravité aléatoires afin de nous assurer que des points de départ mal choisis ne nous conduiront pas à de mauvais résultats. La même chose avec d'autres algorithmes "aléatoires": vous pouvez les utiliser de manière "déterministe", mais dans la plupart des cas, ce n'est pas une bonne chose à faire.
Dans le cas de k-means, l'algorithme minimise de manière déterministe la somme des carrés intra-cluster pour trouver la solution de clustering optimale. Malheureusement, il est sensible à la façon dont l'algorithme a été initialisé. Dans la plupart des cas, les problèmes de clustering n'ont pas de solutions claires, à cause de cela, nous voulons souvent utiliser des procédures aléatoires pour les renforcer.
Imaginez que vous ayez utilisé un algorithme de clustering hiérarchique déterministe . Imaginez qu'il parcourt vos données de manière séquentielle, à partir de la première observation. Que se passerait-il si le premier cas était une valeur aberrante? D'un autre côté, si vous l'initialisez plusieurs fois à des points aléatoires, la procédure sera moins sujette à des problèmes de données.
De plus, si vous exécutez plusieurs fois un algorithme non "déterministe" puis utilisez la majorité voter pour choisir pour chaque cas la classe qui apparaît le plus souvent parmi les résultats, puis la sortie finale sera également très déterministe.