Tagclouds vergelijken

Pagina: 1
Acties:
  • 211 views sinds 30-01-2008
  • Reageer

  • Dentist
  • Registratie: December 2000
  • Laatst online: 22:40

Dentist

Next patient please...

Topicstarter
Voor een nieuwe projectje waar ik aan wil gaan werken, wil ik een aantal willekeurige tagclouds met elkaar vergelijken. Het doel is om te kijken of ik op basis van clouds bepaalde objecten (in verschillende gradaties) aan elkaar kan koppelen.

Het is op zich redelijk straightforward om te stellen dat twee dezelfde tagclouds een volledige 1:1 relatie is en twee totaal verschillende tagclouds geen enkele relatie heeft. Maar ik ben op zoek naar informatie die me kan helpen om het enorme grijze gebied daartussen te definieren.

Stel ik heb:

Object A
3x Appel
2x Peer
1x Banaan

en

Object B
1x Appel
15x Kiwi

en

Object C
3x Appel
15x Druif
20x Kokosnoot
1x Kiwi

hoe zou je deze relaties dan mogelijk kunnen definieren? Ik ben niet zozeer op zoek naar een concrete oplossing, maar meer naar mogelijke methodieken om zoiets aan te pakken. En hoewel ik veel over tagclouds en folksonomies kan vinden, heb ik hier nog maar weinig over kunnen vinden.

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Kun je niet simpelweg met verschillen gaan werken? Het verschil tussen A en B is: { -2 peren, -1 banaan, +15 kiwis }. Aan de hand van die informatie zou je kunnen definieren dat de 'afstand' tussen A en B gelijk is aan |-2| + |-1| + |15| = 18. De afstand tussen twee identieke objecten is natuurlijk 0.

Het vervelende hiervan is wel dat als je een object D { 1 appel } en object E { 1 peer } hebt, dat de afstand dan slechts 2 is, terwijl er totaal geen overeenkomsten zijn. Je zou overeenkomstige elementen een negatief gewicht kunnen geven om dat tegen te gaan.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 30-11 21:02
Of maak alles relatief, op een vastgestelde schaal. BIjvoorbeeld 0%-100%. Alle elementen gelijk: 100%, voor iedere mismatch gaat er een gewogen percentage af.

  • Dentist
  • Registratie: December 2000
  • Laatst online: 22:40

Dentist

Next patient please...

Topicstarter
.oisyn schreef op dinsdag 17 april 2007 @ 14:54:
Kun je niet simpelweg met verschillen gaan werken? Het verschil tussen A en B is: { -2 peren, -1 banaan, +15 kiwis }. Aan de hand van die informatie zou je kunnen definieren dat de 'afstand' tussen A en B gelijk is aan |-2| + |-1| + |15| = 18. De afstand tussen twee identieke objecten is natuurlijk 0.

Het vervelende hiervan is wel dat als je een object D { 1 appel } en object E { 1 peer } hebt, dat de afstand dan slechts 2 is, terwijl er totaal geen overeenkomsten zijn. Je zou overeenkomstige elementen een negatief gewicht kunnen geven om dat tegen te gaan.
Dat is ook waar ik in eerste instantie aan zit te denken.. Probleem is wel als ik dan een aantal objecten heb die in hun grote tagcloud 1x appel hebben in combinatie met objecten met een kleine tagcloud die ook 1x appel bevat. Daar is de appel relatief belangrijker, maar hoe vergelijk je dat (en: doet dat er eigenlijk toe)?

  • Marcj
  • Registratie: November 2000
  • Laatst online: 01-12 16:59
Als je twee object pakt, je telt het totale aantal dingen daar in bij elkaar op en noemt dat totaal. Vervolgens ga je zoveel mogelijk aantal dingen matchen. Als je nu het aantal matches deelt op het totaal aantal dingen die er zijn krijg je volgens mij netjes een goed verdeling tussen 0 en 1 die aangeeft in hoeverre ze op elkaar lijken.

Een paar voorbeeltjes:
F { 1 appel } <--> G { 1 appel en 1 peer } => 2 / 3 = 0.67
H { 1 appel 2 peren } <--> K { 2 appels 1 peer } => 4 / 6 = 0.67
L { 1 banaan } <--> F = 0 / 2 = 0
F <--> F = 1 / 1 = 1

Maar ook uit jouw voorbeeld:
A <--> B = 2 / 22 = 0.091
A <--> C = 6 / 45 = 0.133
B <--> C = 4 / 55 = 0.073

Dit lijkt me toch wel een redelijke oplossing?

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dentist schreef op dinsdag 17 april 2007 @ 15:01:
Daar is de appel relatief belangrijker, maar hoe vergelijk je dat (en: doet dat er eigenlijk toe)?
Dan deel je door het totaal aantal elementen :).
.edit: En dan krijg je 1 - Marcj's methode ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • storeman
  • Registratie: April 2004
  • Laatst online: 01-12 09:22
Dus als ik het goed begrijp

A{ 3X1; 1Y1 } <--> B{ 1X2; 3Y2 =>

totaal = 3 {X1} + 1{Y1} + 1{X2} + 3{Y2}
= 8

overeenkomst = totaal - ( |3 {X1} - 1{X2}| + | 1{Y1} - 3{Y2} |
= 8 - ( | 3 - 1 | + | 1 - 3 |)
= 8 - (2+2) = 4

match = overeenkomst / totaal
= 4 / 5 = 1/2
= 0.5

[ Voor 2% gewijzigd door storeman op 18-04-2007 12:20 . Reden: 3 + 1 + 1 + 3 = 8 :S ]

"Chaos kan niet uit de hand lopen"


  • Dentist
  • Registratie: December 2000
  • Laatst online: 22:40

Dentist

Next patient please...

Topicstarter
thanks! daar kan ik wel wat mee :)

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

3+1+1+3 = 8 ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • storeman
  • Registratie: April 2004
  • Laatst online: 01-12 09:22
whoeps :), ook wel logisch, een match van 1/2 ==> 2x en 2y

post is aangepast

[ Voor 5% gewijzigd door storeman op 18-04-2007 12:22 ]

"Chaos kan niet uit de hand lopen"


Verwijderd

Wat dacht je er van om alle objecten als een punt in een N dimensionale ruimte te beschouwen waarbij N het aantal distinct woorden is. Wanneer je twee punten in deze ruimte neemt (2 documenten) en daar vervolgens de hoek tussen uit rekent dan weet je wat de gelijkheid is. Hoe kleiner de hoek, hoe meer assen (en woorden) ze gelijk hebben, hoe meer de documenten hetzelfde zijn.

Voorbeeld:

A = 3t1 + 2t2 + 1t3 + 0t4
B = 1t1 + 0t2 + 0t3 + 15t4

Sim(A, B ) = (3 * 1 + 2 * 0 + 1 * 0 + 0 * 15) / sqrt((3*3 + 2*2 + 1*1 + 0*0) * (1*1 + 0*0 + 0*0 + 15*15))

Zoek eens op Cosine Similarity

  • mr.inno
  • Registratie: April 2003
  • Laatst online: 26-11 13:17
code:
1
2
3
a -> {1 appel, 1 peer, 1 kiwi} 
b -> {0 appel, 1 peer, 1 kiwi} 
c -> {2 appel, 1 peer, 1 kiwi}


Als "a" het orgineel is, wat krijgt dan een hogere waarde "B" of "C"?

Mij lijkt "C" deze heeft namelijk wel appels, alleen meer. Waar "B" er helemaal geen heeft.

inno


  • Dentist
  • Registratie: December 2000
  • Laatst online: 22:40

Dentist

Next patient please...

Topicstarter
storeman schreef op dinsdag 17 april 2007 @ 16:49:
Dus als ik het goed begrijp

A{ 3X1; 1Y1 } <--> B{ 1X2; 3Y2 =>

totaal = 3 {X1} + 1{Y1} + 1{X2} + 3{Y2}
= 8

overeenkomst = totaal - ( |3 {X1} - 1{X2}| + | 1{Y1} - 3{Y2} |
= 8 - ( | 3 - 1 | + | 1 - 3 |)
= 8 - (2+2) = 4

match = overeenkomst / totaal
= 4 / 5 = 1/2
= 0.5
Het probleem bij deze methode is bijvoorbeeld de volgende verzameling arrays

a{1X1, 3Y1}
b{1X2, 3Z1}

Je krijgt dan:

totaal = 8
overeenkomst = 8 - ( | 1X1 - 1X2 | ) = 8
match = overeenkomst / totaal = 8/8 = 1

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je berekening klopt niet.

overeenkomst = 8 - ( | 1X - 1X | + | 3Y - 0Y | + | 0Z - 3Z | ) = 8 - (0 + 3 + 3) = 2
match = 2/8 = 0.25

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Dentist
  • Registratie: December 2000
  • Laatst online: 22:40

Dentist

Next patient please...

Topicstarter
D'oh..

thanks! (ik had al zo'n naar voorgevoel...)

  • Dentist
  • Registratie: December 2000
  • Laatst online: 22:40

Dentist

Next patient please...

Topicstarter
mr.inno schreef op woensdag 02 mei 2007 @ 10:29:
code:
1
2
3
a -> {1 appel, 1 peer, 1 kiwi} 
b -> {0 appel, 1 peer, 1 kiwi} 
c -> {2 appel, 1 peer, 1 kiwi}


Als "a" het orgineel is, wat krijgt dan een hogere waarde "B" of "C"?

Mij lijkt "C" deze heeft namelijk wel appels, alleen meer. Waar "B" er helemaal geen heeft.
A <-> B = 67%
A <-> C = 83%

dus, dat klopt ;)

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Euh, dan is jouw implementatie fout. |1 - 0| is natuurlijk net zoveel als |1 - 2|, dus het verschil zou even groot moeten zijn ;) (A heeft 1 appel en B 0 he, niet andersom)

.edit: argh nou doe ik het zelf ook fout :P. Verbeterd.

[ Voor 29% gewijzigd door .oisyn op 04-05-2007 16:42 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Dentist
  • Registratie: December 2000
  • Laatst online: 22:40

Dentist

Next patient please...

Topicstarter
.oisyn schreef op vrijdag 04 mei 2007 @ 16:27:
Euh, dan is jouw implementatie fout. |1 - 0| is natuurlijk net zoveel als |1 - 2|, dus het verschil zou even groot moeten zijn ;) (A heeft 0 appels en B 1 he, niet andersom)
ik schrijf het op en ik bedenk me net precies hetzelfde..

Heeft dat trouwens niet te maken met het aantal elementen? Als ik het even uitschrijf:

A { 1 peer, 1 appel, 1 kiwi }
B { 1 peer, 0 appel, 1 kiwi}

totaal 5 elementen
overeenkomst = 5 - ( 0 + 1 + 0) = 4
match = 4/5 = 0,8

A { 1 peer, 1 appel, 1 kiwi }
C { 1 peer, 2 appel, 1 kiwi}

totaal 7 elementen
overeenkomst = 7 - (0 + 1 + 0) = 6
match = 6/7 = 0,86

(edit: die 67% kwam voort uit iets anders: ik maak de clouds eerst relatief, want volgens mij is 'beter'. Een tagcloud {100, 10, 20} is 100% volgens mij namelijk wiskundig dezelfde als {10, 1, 2}. Ik vraag me nog enigszins af of dat in dit geval handig is.. )

[ Voor 48% gewijzigd door Dentist op 04-05-2007 16:58 ]


  • mr.inno
  • Registratie: April 2003
  • Laatst online: 26-11 13:17
Dentist schreef op vrijdag 04 mei 2007 @ 16:26:
[...]


A <-> B = 67%
A <-> C = 83%

dus, dat klopt ;)
dat is belangrijk.

inno


  • Dentist
  • Registratie: December 2000
  • Laatst online: 22:40

Dentist

Next patient please...

Topicstarter
Euh, wat is precies belangrijk?

  • q2no
  • Registratie: December 2003
  • Laatst online: 21-11 15:40
dat het kopt :D
Pagina: 1