π
<-

reprogrammer le k-means en LUA

Pour TI-Nspire OS 3.0 ou ultérieur.

reprogrammer le k-means en LUA

Unread postby bello john » 21 Nov 2013, 19:54

Salut les gens,

Est ce que quelqu'un pourrait m'aider à reprogrammer et améliorer cet algorithme en LUA. Cet algorithme, dont le nom est le kmeans, se présente ainsi: http://fr.wikipedia.org/wiki/Algorithme_des_k-moyennes
http://www.memoireonline.com/10/08/1603 ... ion17.html


En BASIC, pour des individus appartenant à R, cela donne:

Ne pouvant pas définir une liste de listes à tailles différentes, j'ai utilisé des matrices que j'ai complétées avec des 0 pour égaliser les tailles. Par conséquent, j'ai du redéfinir la moyenne pour qu'elle prenne en compte ce rajout de zéros.

La nouvelle moyenne: m0
Code: Select all
Define m0(a)=
Func
Local n
n:=countif(a,? =/= 0)
Return 1/n*sum(a)
EndFunc


Le début de l'algorithme: debutk, avec l: la liste des individus et c: ma liste de centres. Comme les individus sont des nombres réels, j'ai utilisé la distance euclidienne sur R, i.e. la distance entre deux individus = la valeur absolue de la différence des deux individus
Code: Select all
Define debutk(l,c)=
Func
Local d,r,i,j
d:=seq( seq( abs(l[i]-c[j]),i,1,dim(l)) ,j,1,dim(c) )
r:=NewMat(dim(c),dim(l))
For i,1,dim(c)
   For j,1,dim(l)
      If abs(l[j]-c[i])=min(mat>list(d^T[j])) Then
         r[i,j]:=l[j]
      EndIf
   EndFor
EndFor
Return r
EndFunc


et le kmeans

Code: Select all
Define kmeans(l,c)=
Func
Local r,i,d
i:=1
d:=c
r:=debutk(l,d)
Disp "Etape :",i;" :",r,d
While r=/= debutk(l,d)
   d:=seq(m0(mat>list(r[i])),i,1,rowDim(r))
   r:=debut(l,d)
   i:=i+1
   Disp "Etape :",i," :",r,d
EndWhile
Disp "kmeans fini en ",i," étape(s)"
Return debutk(l,d)
EndFunc


En gros j'aimerais pouvoir utiliser cet algorithme avec des n-uplets (n€N) (d'où la nécessité d'utiliser le lua, que je ne maitrise pas :(). Aussi, dans le cas où les individus appartiennent à R, j'aimerais pouvoir les visualiser sur une droite graduée avant qu'ils ne subissent le kmeans (d'où la nécessité d'utiliser le lua encore :()
Merci à celui qui pourra éclairer ma lanterne.
User avatar
bello john
Niveau 5: MO (Membre Overclocké)
Niveau 5: MO (Membre Overclocké)
Level up: 36%
 
Posts: 2
Joined: 15 Nov 2013, 17:50
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: reprogrammer le k-means en LUA

Unread postby AnToX98 » 21 Nov 2013, 20:49

Salut à toi. Pour être sincère, je n'ai vraiment pas compris ton algorithme.
Sinon, pour éviter que tu ais à m'expliquer concrètement son fonctionnement, je t'invite à me dire ce que tu voudrais programmer en lua.

Merci de ta compréhension,
AnToX98
User avatar
AnToX98Premium
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 75.5%
 
Posts: 1022
Images: 15
Joined: 19 May 2013, 16:54
Location: Paris, France
Gender: Male
Calculator(s):
MyCalcs profile
Class: 1ere S

Re: reprogrammer le k-means en LUA

Unread postby Bisam » 21 Nov 2013, 23:05

Je n'ai pas encore bien compris ce que fait ton algorithme... mais je vois déjà comment tu peux simplifier son écriture...

Code: Select all
Define m0(a)=
Func
Return sum(a)/countif(a,? =/= 0)
EndFunc


Code: Select all
Define debutk(l,c)=
Func
Local d
d:=seq(abs(l-c[j]),j,1,dim(c))
Return seq(seq(when(d[i,j]=min(mat>list(d^T[j])),l[j],0),i,1,dim(c)),j,1,dim(l))
EndFunc

et
Code: Select all
Define kmeans(l,c)=
Func
Local r,i,d
i:=1
d:=c
r:=debutk(l,d)
Disp "Etape :",i;" :",r,d
While r=/= debutk(l,d)
   d:=seq(m0(mat>list(r[i])),i,1,rowDim(r))
   r:=debutk(l,d)
   i:=i+1
   Disp "Etape :",i," :",r,d
EndWhile
Disp "kmeans fini en ",i," étape(s)"
Return debutk(l,d)
EndFunc


Ensuite, je n'ai pas bien compris ce que tu voulais faire avec des n-uplets... mais je pense que c'est faisable en Basic, à condition de modifier la façon de stocker tes données et de faire ton algorithme.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile


Return to Nspire-Lua

Who is online

Users browsing this forum: ClaudeBot [spider] and 2 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1640 utilisateurs:
>1589 invités
>44 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)