Est-il possible de spécifier votre propre fonction de distance en utilisant la classification K-Means de Scikit-learn ?
Réponses
Trop de publicités?
Igor Fobia
Points
68
k-means de Python spectral permet l'utilisation de la distance L1 (Manhattan).
Utilisateur non enregistré
Points
0
Rahul Nanda
Points
1
- Réponses précédentes
- Plus de réponses
44 votes
Notez que k-means est conçu pour la distance euclidienne. . Elle peut cesser de converger avec d'autres distances, lorsque le moyenne n'est plus la meilleure estimation du "centre" de la grappe.
2 votes
Pourquoi k-means ne fonctionne que pour la distance euclidienne ?
9 votes
@Anony-Mousse Il est incorrect de dire que k-means est uniquement conçu pour la distance euclidienne. Il peut être modifié pour fonctionner avec toute métrique de distance valide définie sur l'espace d'observation. Par exemple, regardez l'article sur k-medoids .
2 votes
PAM (alias k-medoids) est un algorithme très différent. Il est apparenté aux k-means mais beaucoup plus chers.
5 votes
@curious : le moyenne minimise les différences au carré (= distance euclidienne au carré). Si vous voulez une fonction de distance différente, vous devez remplacer l'option moyenne avec une estimation appropriée du centre. Les K-médoïdes sont un tel algorithme, mais trouver le médoïde est beaucoup plus coûteux.
4 votes
Quelque peu pertinent ici : il y a actuellement un demande de retrait ouverte mettant en œuvre le noyau K-Means. Lorsqu'il sera terminé, vous pourrez spécifier votre propre noyau pour le calcul.
1 votes
@ely. "Il est incorrect de dire que k-means est uniquement conçu pour la distance euclidienne." Non, ce n'est pas incorrect, IMHO. K-means et K-medoids peuvent être liés, mais ce sont des algorithmes différents avec des modèles mathématiques sous-jacents différents, et donc des conditions de convergence différentes. K-means suppose une distance euclidienne. K-medoids suppose une distance de Manhattan. Veuillez me corriger si je me trompe.
0 votes
@ChirazBenAbdelkader Il s'agit du même algorithme avec spécifiquement le même modèle sous-jacent. Ils ne diffèrent que par le calcul spécifique de l'exemplaire utilisé (qu'il s'agisse d'un centroïde de groupe ou d'un medoid de groupe réel). K-means fait référence à un famille d'algorithmes qui utilisent tous le même modèle sous-jacent, mais avec des notions différentes de distance ou d'exemplarité.
0 votes
@ely. Je suis partiellement d'accord avec vous. Peut-être que je coupe les cheveux en quatre. Mais cela dépend vraiment de ce que vous considérez comme le " même " modèle. Oui, Kmeans et Kmedoids sont basés sur le même modèle générique. Mais ils sont suffisamment différents et ne sont certainement PAS interchangeables dans la pratique.
1 votes
@ChirazBenAbdelkader De nombreux algorithmes généraux s'accompagnent de variations spécifiques. Par exemple, l'"algorithme" de SVM serait strictement différent, dans un sens pédant, si vous utilisez un noyau RBF ou un noyau polynomial, etc., et les deux choses ne seraient certainement pas facilement interchangeables dans la pratique. Mais il serait stupide de dire que le SVM avec un noyau RBF est "complètement différent" de celui avec un noyau polynomial. Il s'agit clairement du même algorithme, mais un sous-ensemble de l'algorithme peut être interchangé comme hyperparamètre. C'est la même chose avec les algorithmes k-means.
1 votes
Par exemple, envisagez d'utiliser simplement différents noyaux de dissimilarité pour un ensemble donné de points de données, comme dans l'outil de scipy
pdist
. Vous pouvez également envisager de minimiser la norme L1 ou la divergence KL si vous disposez de points de données soumis à une contrainte d'éparpillement ou qui sont des distributions de probabilité. Il n'y a aucune raison de ne pas exécuter l'algorithme k-means sur ces types de données, et d'utiliser simplement une "distance entre les points" différente et appropriée pour minimiser la fonction de perte par rapport aux centres candidats.