|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 405 ![]() |
Bonjour,
voilà deux classes permettant d'effectuer le calcul des centres mobiles / K-moyennes (en anglais k-means). La différence entre les centres mobiles et les K-moyennes est que les K-moyennes recalculent le barycentre d'une classe après chaque affectation d'un individu à la dite classe. Cela permet souvent de converger plus rapidement vers la solution. Ici c'est une version des k-moyennes et une version des centres mobiles dans la réponse suivante. Cette classe utilise des données contenues dans un fichier tabulé afin d'être générique et ainsi de pouvoir s'appliquer à tous les problèmes Code Java :
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots ! - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci) - ton poste tu dois marquer quand la bonne réponse tu as obtenu.
|
||
|
|
00
|
|
|
#2 | ||||
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 405 ![]() |
La classe permettant le calcul des centres mobiles :
Code Java :
Voilà la classe clusters Code Java :
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots ! - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci) - ton poste tu dois marquer quand la bonne réponse tu as obtenu.
|
||||
|
|
00
|
|
|
#3 | ||||
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 405 ![]() |
Voilà l'interface pour les métriques, à vous d'utiliser celle que vous préférez :
Code Java :
Et la petite classe pour standardiser les données (centrer réduire par l'écart type). Elle fait la même chose que la méthode se trouvant dans la classe OutilsFichierTabules que j'ai déjà partagé : Code Java :
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots ! - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci) - ton poste tu dois marquer quand la bonne réponse tu as obtenu.
|
||||
|
|
00
|
|
|
#4 | ||||
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 405 ![]() |
Et pour finir mes interfaces qui gèrent des points. Il y a des choses à améliorer dans ces classes, mais je n'ai pas trop le temps pour le moment
Code Java :
Code Java :
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots ! - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci) - ton poste tu dois marquer quand la bonne réponse tu as obtenu.
|
||||
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 26 ![]() |
Salut,
pourrais tu m'expliquer ce qu'est une forme forte, et à quoi ça sert ? merci. edit : je viens de voir un de tes anciens post, en faite les formes fortes te permettent d'initialiser les centres des kmeans ? je t'apprend peux être rien, mais il existe une très bonne méthode pour cela. Procéder d'abord à une CAH classique sur un échantillon pas trop grand (<1000) puis initialiser les kmean avec les centre de la CAH. Ainsi sur un très grand nombre d'individu on obtient presque les mêmes résultats qu'une CAH avec la rapidité des kmeans
|
|
|
00
|
|
|
#6 |
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 405 ![]() |
Bonjour,
il y a quelques algorithmes qui permettent d'initialiser plus ou moins correctement les K-Means ; SAS/JMP en utilise en d'entre eux. L'avantage des formes fortes c'est de pouvoir regrouper les individus les plus souvent ensembles, donc on sait que des classes gravites autour de ces groupes d'individus. Prendre le barycentre de ces groupes d'individus comme initialisation est une méthode robuste.
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots ! - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci) - ton poste tu dois marquer quand la bonne réponse tu as obtenu.
|
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : décembre 2008 Messages : 11 ![]() |
Bonjour Toto13,
J'ai lu vos posts concernant votre implémentation de K-means. J'ai moi-même réalisé un petit programme sous Java dont voici les objectifs: -Lecture de fichiers XML, provenant de fils RSS en anglais -Analyse des mots constituants les titres et les descriptions (avec filtrage grâce à tree-tagger) afin de consituer un vocabulaire. -Vectorisation de chaque item (chaque news des fils RSS) - Application de K-means Problème 1: J'ai essayé d'imaginer un critère d'arrêt de l'algo (pour l'instant le nombre d'itérations est fixé à l'avance) en calculant la distance qui sépare le barycentre (de chaque cluster) à sa position dans l'itération précédente mais ce critère est trop limité (l'algo ne tourne qu'une seule fois!!). Problème 2: L'initialisation des clusters joue-t-elle un rôle dans la convergence de l'algo ? autrement dit, arrivera-t-on à un résultat différent si on initialise les clusters différemment ? Problème 3: L'algo ne donne pas toujours le même résultat quand je n'initialise pas aléatoirement les clusters. En effet pendant le développement de l'application, j'obtenais des clusters relativement cohérent (avec des 10 itérations). Mais lorsque j'ai augmenté le nombre d'éléments à classer, tous les items se retrouvent dans le même cluster ! Bref mon application a beaucoup de petits soucis. J'espère que vous, ou quelqu'un d'autre pourra me guider. PS:Je n'attends pas forcément de lignes de codes ni même de corrections de mon code j'ai juste besoin d'inspiration... Bonnes fêtes. |
|
|
00
|
|
|
#8 | |||
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 405 ![]() |
Bonjour,
Citation:
L'avantage du déplacement des barycentres, c'est que tu peux changer le degrès de déplacement qui servira d'arrêt. Dans mon exemple j'ai utilisé un epsilon égal à 1.0, mais en pratique j'utilise souvent 0.001 voire moins lorsque je veux quelque chose de plus stable. Tu peux également utiliser comme critère d'arrêt : aucun mouvement d'individu entre les clusters !!! Donc que d'une itération sur l'autre, tous les éléments restent dans le même cluster. Citation:
J'ai lu que le logiciel SAS/JMP utilise un algorithme "intelligent", "malin" d'initialisation. Citation:
Hormis l'initialisation qui est souvent aléatoire, le reste est tout ce qu'il y a de plus déterministe. Pour deux initialisation identiques, le résultat doit être le même. Bonne continuation...
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots ! - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci) - ton poste tu dois marquer quand la bonne réponse tu as obtenu.
|
|||
|
|
00
|
|
|
#9 | ||
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 405 ![]() |
Et la classe permettant le calcul des formes fortes :
Code Java :
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots ! - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci) - ton poste tu dois marquer quand la bonne réponse tu as obtenu.
|
||
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : décembre 2008 Messages : 11 ![]() |
Bonjour,
J'ai rendu ce projet à mon responsable, il y a déjà quelques mois (et il était plutôt satisfait). Si cela intéresse encore quelqu'un, j'ai résolu tous mes problèmes et trouvé un moyen d'initialiser les clusters. Voici le principe que j'ai implémenté: Supposons que l'on veuille initialiser k clusters. Alors on commence d'abord par trouver les k vecteurs les plus "éloignés" des autres "en moyenne" (au sens de la distance euclidienne). En gros, on calcule pour chaque vecteur un nombre "dm" qui est en fait la moyenne des distances par rapport aux autres vecteurs. On choisit ensuite les k vecteurs dont les "dm" sont supérieurs aux autres et on se sert de leur coordonnées pour initialiser les barycentres des clusters. L'idée c'est de choisir comme point de départ les vecteurs qui ont le moins de choses en commun avec les autres barycentres... J'espère que c'est suffisamment clair...et j'ignore le degré de validité théorique de ce principe... en tous cas je serai heureux de répondre aux questions. |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Masmoudi NesrineChercheur en informatique Inscription : mai 2011 Messages : 3 ![]() |
Bonjour à tous,
J'ai un fichier .txt en entrée qui possède les données à classer. J'ai vu le code au dessus (sur un fichier tabulaire) mais quelle est la modification que je peut apporter pour le modifié pour un fichier texte et est ce que je peux faire des trucs comme ça? Je voudrai appliquer l'algorithme des k-moyenne à ces données S'il vous plait, j'ai besoin de vos aides, je suis coincée et je suis débutant en programmation java (eclipse). Merci énormément. |
|
|
00
|
|
|
#12 |
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 405 ![]() |
C'est simple :
- nom des colonnes sur la première ligne, entre guillemets si nécessaires et espacé d'un espace. - valeurs numérique séparées d'un espace - valeurs nominales entre guillemet si nécessaire. C'est également le format qu'acceptent weka et JMP.
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots ! - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci) - ton poste tu dois marquer quand la bonne réponse tu as obtenu.
|
|
|
00
|
|
|
#13 |
|
Membre à l'essai
![]() Enseignant Chercheur Inscription : décembre 2011 Messages : 98 ![]() |
Bonjour
Dans mon travail j'applique l'algorithme k-means 8 fois avec des objets prises aléatoirement. J'obtiens alors N vocabulaire. comment je peux évalué ces 8 vocabulaires pour selectionner le meileur d'entre eux. j’espère que la discussion encore valide. |
|
|
00
|
|
|
#14 | ||
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 405 ![]() |
Citation:
Citation:
La version des formes fortes que j'ai posté est assez "maladroite" :s Au lien de stocker toutes les combinaison, il vaudrait mieux faire un accumulateur de taille NxN (avec N le nombre d'individu) et l'incrémenter à chaque itération.
__________________
Consignes aux jeunes padawans : une image vaut 1000 mots ! - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci) - ton poste tu dois marquer quand la bonne réponse tu as obtenu.
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com