Clustering flou : l’algorithme fuzzy c-means et les points entre les clusters
K-means et son affectation nette, fuzzy c-means avec des appartenances à tous les clusters, le fuzzificateur m, le coefficient de partition et l’indice de Xie–Beni pour choisir le nombre de clusters — et pourquoi les points aberrants reçoivent des appartenances élevées.
Série Bases de l’IA Partie 36 sur 52
- Carte de l’intelligence artificielle : qu’est-ce qui est quoi et comment tout s’emboîte
- Brève histoire de l’intelligence artificielle : de Turing aux modèles de langage
- Données, modèle, entraînement, inférence : les notions de base sur un seul exemple
- Lire la notation mathématique : symboles, indices, sommes et quantificateurs
- Ensembles et relations : les briques dont sont faites les définitions en IA
- Fonctions et applications : pourquoi tout modèle d’IA est une fonction
- Logique et démonstrations : les règles selon lesquelles on raisonne en IA
- Graphes et arbres : la structure sur laquelle reposent la recherche et les réseaux de neurones
- Algèbre linéaire pour l’apprentissage automatique : vecteurs, matrices et pourquoi l’IA multiplie surtout
- Dérivées, gradient et règle de dérivation en chaîne : comment un modèle sait dans quelle direction apprendre
- Descente de gradient : comment un modèle apprend
- Qu’est-ce que la probabilité : du lancer de dé aux axiomes de Kolmogorov
- Probabilité conditionnelle et théorème de Bayes : comment réviser une estimation quand on apprend du nouveau
- Variable aléatoire et fonction de répartition : une seule fonction qui dit tout de la loi
- Fonction de densité et fonction de masse : pourquoi une variable continue a une probabilité nulle en chaque point
- Espérance, variance et covariance : où se situe une loi, quelle est sa largeur et ce qui varie avec quoi
- Panorama des lois de probabilité : Bernoulli, binomiale, Poisson, uniforme, normale et exponentielle
- Loi des grands nombres et théorème central limite : pourquoi les moyennes sont si prévisibles
- Statistique et estimation de paramètres : maximum de vraisemblance, MAP et intervalles de confiance
- Théorie de l’information : entropie, entropie croisée et divergence KL — d’où viennent les fonctions de perte
- Recherche dans l’espace d’états : BFS, DFS, UCS et A* en animations
- Jeux et adversaires : minimax, élagage alpha-bêta et Monte Carlo tree search
- Satisfaction de contraintes : backtracking, propagation de contraintes et AC-3 sur un sudoku et une carte des régions tchèques
- Logique et systèmes à base de connaissances : chaînage avant et arrière, résolution et systèmes experts
- Planification : STRIPS, monde des blocs, heuristiques par relaxation et planification dans les agents IA
- Recherche locale et recuit simulé : un voyageur de commerce à travers les chefs-lieux de région tchèques
- Algorithmes génétiques : population, croisement, mutation et sélection sur un sac à dos de randonnée
- Stratégies d’évolution et programmation génétique : de la règle du cinquième à la loi de Kepler
- Optimisation par colonies de fourmis : comment une piste de phéromone trouve un chemin court
- Optimisation par essaim de particules : inertie, expérience propre et expérience de l’essaim
- Neuroévolution : faire évoluer les poids et la forme des réseaux de neurones, et l’algorithme NEAT
- Ensembles flous et fonctions d’appartenance : comment écrire « un peu chaud »
- Logique floue et probabilité : pourquoi « un peu chaud » ne veut pas dire « probablement chaud »
- Logique floue : t-normes, implications et règles SI–ALORS
- Commande floue : Mamdani et Sugeno, du ventilateur au pendule inversé sur un chariot
- Clustering flou : l’algorithme fuzzy c-means et les points entre les clusters
- Systèmes neuro-flous (ANFIS) : des règles floues qui apprennent à partir des données
- Chaînes de Markov : matrice de transition, distribution stationnaire et PageRank
- Modèles de Markov cachés : l’algorithme de Viterbi et le casino malhonnête
- Réseaux bayésiens : pourquoi l’herbe est mouillée et ce que cela implique pour l’arroseur
- Le filtre de Kalman : comment estimer, à partir de mesures imprécises, où se trouve une voiture et à quelle vitesse elle roule
- Types d’apprentissage automatique : supervisé, non supervisé, semi-supervisé et plus
- Prompts, contexte et RAG : comment donner au modèle les bonnes informations
- Autoencodeurs variationnels (VAE) : de nouvelles images à partir d’un espace latent continu
- Réseaux antagonistes génératifs (GAN) : le faussaire contre le détective
- Modèles de diffusion : comment une image naît du bruit pur
- Processus de décision markoviens : états, actions, récompenses et équations de Bellman
- Q-learning et DQN : apprendre la valeur des actions, du tableau au réseau de neurones
- Policy gradient et PPO : apprendre directement la politique
- Comment fonctionne un agent IA : un modèle de langage en boucle avec des outils
- Programmer avec des agents IA : consigne, tests et vérification
- Évaluation et sécurité des systèmes d’IA : comment mesurer et comment surveiller
Programme complet de la série 52 sur 83 sujets publiés
- Comment fonctionne k-means et ce qu’il passe sous silence sur les points à la frontière des clusters.
- Comment fuzzy c-means calcule les appartenances et les centres, et ce que fait le fuzzificateur m.
- Comment choisir le nombre de clusters et où fuzzy c-means échoue.
Utile à connaître avant : Ensembles flous et fonctions d’appartenance : comment écrire « un peu chaud », Types d’apprentissage automatique : supervisé, non supervisé, semi-supervisé et plus
Le clustering cherche dans les données des groupes dont on ne sait rien à l’avance : des clients au comportement d’achat similaire, des zones d’un même tissu sur une image d’IRM, des documents sur des thèmes proches. L’algorithme classique k-means affecte chaque point à un seul et unique groupe. Mais les données réelles comportent souvent des points à la frontière — un client qui achète un peu comme un étudiant et un peu comme un parent, un pixel où se rencontrent la substance grise et la substance blanche du cerveau. Le clustering flou permet à un point d’appartenir à plusieurs groupes à la fois, un peu à chacun.
Il fait suite aux épisodes Ensembles flous et fonctions d’appartenance et Types d’apprentissage automatique, où le clustering est apparu comme une tâche typique de l’apprentissage non supervisé.
1. Clustering net : k-means
Définition — problème des k-means
Pour des points x1, …, xn ∈ ℝd et un nombre de clusters c, on cherche des centres v1, …, vc et une affectation des points aux clusters qui minimisent
J = ∑i=1n ‖xi − vshluk(i)‖2.
L’algorithme de Lloyd alterne deux étapes : affecte chaque point au centre le plus proche ; recalcule chaque centre comme la moyenne de ses points. Répète tant que l’affectation change.
Vous plantez quelques « drapeaux » dans les données. Chaque point rejoint le plus proche. Puis chaque drapeau se déplace au milieu de ses points. Les points rejoignent à nouveau le drapeau le plus proche — et ainsi de suite, jusqu’à ce que plus rien ne change. Chaque étape diminue J, donc l’algorithme s’arrête à coup sûr, mais pas forcément sur la meilleure partition possible.
Définition — distance euclidienne
Pour des points x, v ∈ ℝd, ‖x − v‖ = √( ∑r=1d (xr − vr)2 ). Dans le plan, c’est la longueur ordinaire d’un segment, par exemple du point M1 = (4,5 ; 2,5) au centre du cluster A (1,73 ; 2,31) tel que le trouve plus bas fuzzy c-means : √(2,772 + 0,192) ≈ 2,78. Le clustering travaille avec le carré ‖·‖2 — la racine disparaît et les points éloignés sont davantage pénalisés.
def kmeans(X, c):
V = c points de X choisis au hasard # centres initiaux
while True:
shluk = [argmin_j ‖x − V[j]‖² for x in X] # étape d’affectation
if shluk n’a pas changé: return V, shluk
for j in range(c): # étape des centres
V[j] = moyenne des points x tels que shluk(x) = j
Théorème — l’algorithme de Lloyd s’arrête
Aucune étape n’augmente J, et l’algorithme s’arrête donc après un nombre fini d’étapes.
Démonstration : Affectation : chaque terme ‖xi − vshluk(i)‖2 est remplacé par le plus petit de tous les ‖xi − vj‖2, il n’augmente donc pas. Centres : pour les points S d’un cluster de moyenne x̄, on a la décomposition
∑i∈S ‖xi − v‖2 = ∑i∈S ‖xi − x̄‖2 + |S| · ‖x̄ − v‖2
(le terme croisé 2 ∑ (xi − x̄) · (x̄ − v) est nul, car ∑ (xi − x̄) = 0). La somme est donc minimale pour v = x̄. Il n’existe qu’un nombre fini de partitions de n points en c clusters et J diminue strictement à chaque changement d’affectation (à distance égale, on laisse le point dans son cluster), donc aucune partition ne se répète. ∎
Le théorème ne dit rien sur le fait que la partition trouvée soit celle de plus petit J — seulement que l’algorithme ne bouclera pas.
Nos données : trois groupes de 40 points — A en bas à gauche, B à droite et C en haut —, quatre points à la frontière (M1–M4) et deux points aberrants loin de tout (O1, O2). K-means s’est stabilisé après quatre itérations :
Il a bien trouvé les clusters, mais il a dû trancher pour les points à la frontière : il a mis M1, M3 et M4 dans B, M2 dans A. Or le point M3 se trouve presque exactement entre B et C — k-means n’en dit rien. Et les deux points aberrants sont tombés dans le cluster C, comme s’ils lui appartenaient autant que son noyau.
2. Fuzzy c-means
Définition — fuzzy c-means (Dunn 1973, Bezdek 1981)
Au lieu d’une affectation, on cherche une matrice d’appartenance U = (uij), uij ∈ [0, 1], où pour chaque point ∑j uij = 1, et des centres vj qui minimisent
Jm = ∑i ∑j uijm ‖xi − vj‖2,
où m > 1 est le fuzzificateur. L’algorithme alterne deux étapes qui découlent des conditions d’optimalité :
vj = ∑i uijm xi / ∑i uijm, uij = 1 / ∑k (dij / dik)2/(m−1),
où dij = ‖xi − vj‖.
Chaque point répartit son « un » entre tous les clusters — davantage à celui dont il est le plus proche. Le centre d’un cluster est la moyenne pondérée de tous les points : les points qui appartiennent fortement au cluster le tirent davantage, ceux des autres clusters à peine. La formule d’appartenance compare les distances : si un point est deux fois plus proche d’un centre que de l’autre, il reçoit (pour m = 2) une appartenance quatre fois plus grande.
Jm = ∑i=1n ∑j=1c uijm ‖xi − vj‖2, ∑j uij = 1
- Jm
- le « coût » total de la partition — l’algorithme le minimise ; il est faible quand les points appartiennent surtout aux centres qui sont proches d’eux
- ∑i ∑j
- chaque point est compté pour chaque cluster — contrairement à k-means, où l’on ne prenait qu’un cluster par point
- uij
- appartenance du point i au cluster j — le poids avec lequel la distance entre dans le coût
- m
- fuzzificateur — sans puissance (m = 1), il serait avantageux de donner tout le « un » au centre le plus proche et l’on retomberait sur k-means ; avec m > 1, partager devient avantageux : un point à égale distance de deux centres ne paie, pour m = 2 et un partage moitié-moitié, que (½2 + ½2) · d2 = ½d2 au lieu de d2
- ‖xi − vj‖2
- carré de la distance — ce que coûte d’avoir le point « chez » ce centre ; un centre éloigné revient cher
- ∑j uij = 1
- contrainte — sans elle, le minimum serait trivial : tous les uij = 0 et un coût nul
uij = 1 / ∑k=1c ( dij / dik )2/(m−1)
- uij
- nouvelle appartenance du point i au cluster j à centres fixés
- dij / dik
- rapport des distances — combien de fois le centre j est plus loin que le centre k ; le rapport (et non la différence) rend le résultat indépendant de l’échelle des données
- 2/(m−1)
- avec quelle netteté le rapport tranche — pour m = 2 il vaut 2, donc un centre deux fois plus proche reçoit quatre fois plus ; pour m → 1 l’exposant croît sans limite et tout revient au centre le plus proche
- ∑k
- comparaison avec tous les centres, y compris j lui-même (le terme k = j vaut 1) — grâce à cela, les appartenances d’un point ont pour somme exactement 1
Théorème — d’où viennent les deux étapes
Appartenances à centres fixés. Pour un point i, on minimise ∑j uijm dij2 sous la contrainte ∑j uij = 1. Le lagrangien est L = ∑j uijm dij2 − λ (∑j uij − 1). De ∂L/∂uij = m uijm−1 dij2 − λ = 0 découle uij = (λ/m)1/(m−1) · dij−2/(m−1). En substituant dans la contrainte de somme, l’inconnue λ se simplifie et il reste
uij = dij−2/(m−1) / ∑k dik−2/(m−1) = 1 / ∑k (dij / dik)2/(m−1).
On obtient des nombres positifs, il n’est donc pas nécessaire de surveiller séparément la contrainte uij ≥ 0. (Si un point se trouve exactement sur un centre, dij = 0, il reçoit une appartenance 1 à ce cluster ; notre implémentation le gère en ne laissant jamais la distance descendre sous 10−12.)
Centres à appartenances fixées. Jm est une fonction quadratique convexe en vj et ∂Jm/∂vj = −2 ∑i uijm (xi − vj) = 0 donne vj = ∑i uijm xi / ∑i uijm.
Chaque étape minimise donc Jm à l’autre groupe de variables fixé et ne peut pas l’augmenter — le même argument que pour k-means. Bezdek et al. (1987, correction du théorème original de Bezdek de 1980) ont montré que la suite a ses points d’accumulation en des points stationnaires de Jm (pas nécessairement au minimum global).
import numpy as np
def fcm(X, c, m=2.0, iteraci=100, eps=1e-5):
U = np.random.dirichlet(np.ones(c), size=len(X)) # appartenances aléatoires, ligne = 1
for _ in range(iteraci):
W = U ** m
V = (W.T @ X) / W.sum(axis=0)[:, None] # centres comme moyennes pondérées
D = np.linalg.norm(X[:, None, :] - V[None, :, :], axis=2) + 1e-12
nove = 1 / ((D[:, :, None] / D[:, None, :]) ** (2 / (m - 1))).sum(axis=2)
if np.abs(nove - U).max() < eps:
return V, nove
U = nove
return V, U
3. Fuzzy c-means sur nos données
La couleur d’un point est maintenant un mélange des couleurs des clusters selon les appartenances : un point vert pur n’appartient qu’à A, un point « entre » le vert et l’orange est en partie dans A et en partie dans B. Les lignes pointillées montrent comment les centres se sont déplacés — l’algorithme s’est stabilisé après neuf itérations :
| Point | k-means | A | B | C |
|---|---|---|---|---|
| M1 (4,5 ; 2,5) | B | 0,41 | 0,45 | 0,15 |
| M2 (3,3 ; 4,5) | A | 0,43 | 0,18 | 0,38 |
| M3 (5,8 ; 5) | B | 0,12 | 0,44 | 0,45 |
| M4 (4,6 ; 4) | B | 0,28 | 0,40 | 0,32 |
On voit maintenant ce que k-means a passé sous silence. M1 est presque à mi-chemin entre A et B ; M3 est en fait un cheveu plus dans C que dans B, bien que k-means l’ait mis dans B ; et M4, au milieu du triangle, appartient un peu aux trois. Les points des noyaux des clusters ont une appartenance à leur cluster proche de un. Les centres sont pratiquement les mêmes qu’avec k-means — fuzzy c-means ne change pas où sont les clusters, mais ajoute l’information de avec quelle certitude chaque point leur appartient.
Exemple — appartenances du point M1 = (4,5 ; 2,5)
Centres après neuf itérations : A ≈ (1,73 ; 2,31), B ≈ (7,12 ; 2,87), C ≈ (4,51 ; 7,11). Pour m = 2, les inverses des carrés des distances suffisent :
| Cluster | d2 | 1/d2 | u = (1/d2) / 0,3190 |
|---|---|---|---|
| A | 2,772 + 0,192 ≈ 7,72 | 0,1296 | 0,41 |
| B | 2,622 + 0,372 ≈ 7,03 | 0,1423 | 0,45 |
| C | 0,012 + 4,612 ≈ 21,25 | 0,0471 | 0,15 |
| somme | 0,3190 | 1,00 |
M1 est presque aussi loin des centres A et B (7,72 contre 7,03), et se partage donc presque à moitié entre eux ; C est trois fois plus loin (au carré), et ne reçoit donc que le reste.
4. Le fuzzificateur m
Définition — coefficient de partition
Le coefficient de partition (partition coefficient) est PC = (1/n) ∑i ∑j uij2. Il vaut 1 pour une partition nette et 1/c quand chaque point appartient également à tous les clusters.
Un seul nombre qui dit à quel point la partition est « nette ». Pour trois clusters, il se situe entre 1/3 (tout est flou) et 1 (chaque point a un foyer clair).
PC = (1/n) ∑i ∑j uij2
- PC
- netteté de toute la partition, un nombre de [1/c ; 1]
- (1/n) ∑i
- moyenne sur les points — pour pouvoir comparer des jeux de données de tailles différentes
- ∑j uij2
- netteté d’un seul point — le carré « récompense » une appartenance concentrée : (1, 0, 0) donne 1, (⅓, ⅓, ⅓) seulement ⅓ ; à somme fixée égale à 1, la somme des carrés est minimale quand toutes les parts sont égales
Pour m proche de 1, fuzzy c-means se rapproche de k-means : le coefficient de partition vaut 0,98 et le point M4 appartient à B à 0,79. Pour m = 2, le coefficient vaut 0,84 et pour m = 5 seulement 0,42 — les couleurs se fondent et même un point du noyau du cluster A n’a qu’une appartenance de 0,45 à A. Pour m → ∞, toutes les appartenances tendraient vers 1/3. On utilise le plus souvent m = 2 : assez souple pour que les points à la frontière soient visibles, et assez net pour que les clusters restent distincts.
Exemple — un point deux fois plus proche de l’un des deux centres
Un point est à distance 1 du centre 1 et à distance 2 du centre 2. D’après la formule, u1 = 1 / (1 + (1/2)2/(m−1)) :
- m = 1,2 : exposant 10, u1 = 1 / (1 + 1/1 024) ≈ 0,999 — affectation pratiquement nette,
- m = 2 : exposant 2, u1 = 1 / (1 + 1/4) = 0,8,
- m = 5 : exposant 0,5, u1 = 1 / (1 + 0,707) ≈ 0,586,
- m → ∞ : exposant → 0, (1/2)0 = 1 et u1 → 1/2.
En général : pour m → 1+, l’exposant 2/(m − 1) tend vers l’infini, les rapports dij/dik < 1 tendent vers zéro et ceux > 1 vers l’infini, donc le centre le plus proche reçoit 1 et les autres 0 (k-means). Pour m → ∞, l’exposant tend vers zéro, les c termes de la somme tendent tous vers 1 et uij → 1/c.
5. Combien de clusters ?
Le nombre de clusters doit être fourni à l’algorithme. Si on ne le connaît pas, on le lance pour différentes valeurs de c et on compare la qualité des partitions. Le coefficient de partition et l’indice de Xie–Beni s’y prêtent bien.
Définition — indice de Xie–Beni
XB = ∑i ∑j uijm ‖xi − vj‖2 / (n · minj ≠ k ‖vj − vk‖2) — plus il est petit, mieux c’est.
Le numérateur mesure à quel point les points sont serrés autour de leurs centres ; le dénominateur, à quelle distance l’un de l’autre sont les deux centres les plus proches. Une bonne partition a des clusters compacts et éloignés les uns des autres.
XB = ∑i ∑j uijm ‖xi − vj‖2 / ( n · minj ≠ k ‖vj − vk‖2 )
- XB
- rapport « dispersion à l’intérieur des clusters / distance entre eux » — plus petit est meilleur
- ∑ ∑ uijm ‖xi − vj‖2
- compacité — exactement la valeur de Jm que l’algorithme a minimisée
- n
- nombre de points — fait du numérateur une moyenne par point, pour que l’indice ne croisse pas avec la taille des données
- minj ≠ k ‖vj − vk‖2
- séparation — c’est la paire de centres la plus proche qui décide ; Jm seul ne fait que diminuer quand on ajoute des clusters, et ce terme pénalise une partition qui scinde un vrai cluster en deux clusters proches
Exemple — indice de Xie–Beni pour c = 3
À la fin de l’algorithme, J2 ≈ 166,73. Carrés des distances entre centres : A–B ≈ 29,4, A–C ≈ 30,8, B–C ≈ 24,79 (les plus proches sont B et C). Pour n = 126 points :
XB = 166,73 / (126 · 24,79) = 166,73 / 3 124 ≈ 0,053.
| Nombre de clusters c | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| Coefficient de partition (plus grand est meilleur) | 0,745 | 0,841 | 0,748 | 0,661 | 0,609 |
| Indice de Xie–Beni (plus petit est meilleur) | 0,228 | 0,053 | 0,298 | 0,682 | 0,529 |
Les deux indicateurs s’accordent sur les trois clusters que nous avons placés dans les données. Sur des données réelles, un tel accord ne va pas de soi et les indicateurs sont davantage un repère qu’un verdict.
6. Où fuzzy c-means échoue
Regardez les points aberrants : O1 en haut à droite a une appartenance de 0,45 à C et de 0,39 à B ; O2 en haut à gauche, même 0,58 à C. Pourtant, ils n’appartiennent à aucun cluster. La faute en revient à la contrainte ∑j uij = 1 : le point doit distribuer son « un » à quelqu’un, même s’il est loin de tous. L’appartenance signifie ici plutôt « de qui il est le plus proche » que « à quel point il a sa place ici ».
Exemple — pourquoi O2 = (0,2 ; 9,5) « appartient » à C
Carrés des distances aux centres : A ≈ 54,07, B ≈ 91,88, C ≈ 24,29. Même du centre le plus proche, C, il est donc à 4,9 — plus de six fois l’écart-type de 0,8 avec lequel les points des clusters sont dispersés autour des centres. Les inverses 0,0185, 0,0109 et 0,0412 donnent une somme de 0,0706 et des appartenances de 0,26, 0,15 et 0,58. La formule ne voit que les rapports des distances, pas leur grandeur : plus le point serait loin, plus les rapports se rapprocheraient de 1 et les appartenances de ⅓ — mais elles ne tendraient jamais vers zéro.
Définition — possibilistic c-means (Krishnapuram et Keller, 1993)
On supprime la contrainte de somme et on ajoute au coût un terme qui empêche la solution triviale u = 0 :
J = ∑i ∑j uijm dij2 + ∑j ηj ∑i (1 − uij)m, d’où uij = 1 / (1 + (dij2 / ηj)1/(m−1)).
ηj est le « rayon » du cluster j : un point à la distance d2 = ηj a une appartenance de ½, et pour m = 2 un point avec d2 = 9ηj seulement 0,1. L’appartenance dépend maintenant de la distance à un seul centre, et non du rapport aux autres — un point aberrant reçoit de petites valeurs partout.
- Possibilistic c-means (Krishnapuram et Keller, 1993) supprime la contrainte de somme — un point aberrant reçoit alors de petites appartenances à tous les clusters.
- Forme des clusters. La distance euclidienne produit des clusters ronds. L’algorithme de Gustafson et Kessel (1979) donne à chaque cluster sa propre matrice de distance et trouve aussi des ellipses allongées.
- Position initiale. Comme k-means, il peut finir dans un moins bon minimum local — en pratique, on le lance plusieurs fois depuis différents départs.
7. Le clustering flou en pratique
- Imagerie médicale. La segmentation d’images IRM du cerveau en substance grise, substance blanche et liquide cérébrospinal est une application classique : un pixel à la frontière des tissus contient réellement les deux.
- Segmentation de la clientèle. Un client peut appartenir en partie à plusieurs groupes, et le marketing peut en tenir compte.
- Un cousin probabiliste. Les mélanges gaussiens appris par l’algorithme EM affectent eux aussi les points aux clusters de manière « souple » — mais avec des probabilités, pas des appartenances. Les résultats sont souvent semblables, l’interprétation diffère exactement comme l’a décrit l’épisode sur la logique floue et les probabilités.
- Embeddings. Des textes transformés en vecteurs par un modèle de langage peuvent être regroupés de la même manière ; l’affectation souple révèle alors les documents qui se trouvent entre plusieurs thèmes.
8. Résumé
- K-means affecte chaque point à un seul cluster et ne dit rien des points à la frontière.
- Fuzzy c-means cherche des appartenances uij de somme 1 et des centres comme moyennes pondérées ; il alterne deux étapes simples.
- Sur nos données, il a trouvé les mêmes centres que k-means et a montré en plus que les points M1–M4 appartiennent à deux ou trois clusters à la fois.
- Le fuzzificateur m règle la souplesse de la partition ; le coefficient de partition et l’indice de Xie–Beni aident à choisir le nombre de clusters.
- La contrainte de somme égale à 1 donne aux points aberrants des appartenances élevées ; les variantes possibilistes y remédient.
Envie d’essayer par vous-même ? Demandez à un agent IA de lancer fuzzy c-means sur les couleurs des pixels d’une de vos photos et de la recolorer selon les clusters — et regardez quels pixels se trouvent « entre » les couleurs.
Vous voyez les choses autrement ? Écrivez à support@coden-app.com.