Toon posts:

[Algoritme] Functie mappings afleiden uit data *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een aantal natuurlijke getallen met daaraan gekoppeld een klasse.
Dus bijv. (1,a) (2,b) (3,c) (4,a) (data)

Hierin zijn a,b en c klassen.

Nu zou ik graag een algoritme willen hebben dat mij gegeven de data een functie F geeft. Als ik nu F(5) bereken, dat daar de gewenste klasse uitkomt. De functie F moet het patroon van de data representeren.

Ik weet dat dit soort methoden vaak mogelijk het goede antwoord geven, en niet per definitie het goede antwoord, maar ik denk dat er in dit geval wel degelijk een echt patroon is zonder randgevallen.

Nu zou ik dit patroon graag door de computer zelf uit laten zoeken, en het lijkt me ook wel dat het kan. De vraag is alleen: hoe?

Neurale netwerken zouden misschien wel kunnen worden gebruikt, maar ik vraag me af hoe goed die werken op input van onbekende grootte (een natuurlijke getal is nl. onbegrensd).

Beslisbomen kunnen per definitie niet, omdat deze op ranges werken, en die kunnen niet worden aangenomen.

Er zijn ook methoden om polynomiale functies te vinden uit data, maar ik denk niet dat die dit complexe patroon kunnen "zien".

Het probleem met functies bij data verzinnen is dat er oneindig veel mogelijkheden zijn om dit te doen (bijv. definieer de functie die in een lookup table de antwoorden voor de data die je al had opzoekt, en geef a voor de rest). Dus een willekeurige functie verzinnen is niet zo moeilijk, maar een zinvolle wel.

Weet iemand een algoritme, dat precies doet wat ik wil?

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Ik geef je even een kort antwoord Gang-ster. Als je interesse hebt kan ik het wel verder toelichten, en ik heb thuis nog wel een dun boekje liggen die je eventueel kan lenen.

Het antwoord:
Datamining

En als ik je vraagstelling bekijk, lijkt me een model als een neuraal netwerk interessant. Zolang de getallen van jouw uit te drukken zijn met fixed bits (bijv. een float) en je hebt er eindig veel van, dan is het mogelijk. Alleen is een neuraal netwerk niet een magisch iets. Zonder kennis van je probleem vast er verder weinig te zeggen of het wel of niet geschikt is. Je zou een test en training set kunnen samenstellen en kunnen meten of het wel of niet zal werken.

Trouwens, in principe is het niet erg dat de getallen niet een vaste hoeveelheid bits bevatten. Zolang je er maar mee kan rekeken en het aantal inputs vast staat, kan het in een neuraal netwerk. Alleen is het op een gegeven moment maar de vraag of die nauwkeurigheid er nog toe doet.

Wellicht moet je het corresponderende vak op de universiteit volgen.
Of heb je dat al gevolgd?

[ Voor 56% gewijzigd door Infinitive op 06-09-2004 18:54 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Verwijderd

Topicstarter
Infinitive schreef op 06 september 2004 @ 18:46:
Ik geef je even een kort antwoord Gang-ster. Als je interesse hebt kan ik het wel verder toelichten, en ik heb thuis nog wel een dun boekje liggen die je eventueel kan lenen.
Ik denk dat ik hetzelfde boekje heb (blauw?). Ik vond het boekje niet erg indrukwekkend.
Het antwoord:
Datamining

En als ik je vraagstelling bekijk, lijkt me een model als een neuraal netwerk interessant. Zolang de getallen van jouw uit te drukken zijn met fixed bits (bijv. een float) en je hebt er eindig veel van, dan is het mogelijk.
Het heeft niet een fixed aantal bits. Een natuurlijk getal heeft deze eigenschap niet.
Alleen is een neuraal netwerk niet een magisch iets. Zonder kennis van je probleem vast er verder weinig te zeggen of het wel of niet geschikt is. Je zou een test en training set kunnen samenstellen en kunnen meten of het wel of niet zal werken.

Trouwens, in principe is het niet erg dat de getallen niet een vaste hoeveelheid bits bevatten. Zolang je er maar mee kan rekeken en het aantal inputs vast staat, kan het in een neuraal netwerk. Alleen is het op een gegeven moment maar de vraag of die nauwkeurigheid er nog toe doet.
Het moet eigenlijk zo zijn dat het netwerk de structuur "ziet" en daardoor dus geen last heeft van nauwkeurigheid.
Wellicht moet je het corresponderende vak op de universiteit volgen.
Of heb je dat al gevolgd?
Ja, en ook nog gehaald.

Ik heb alleen geen echte ervaring met neurale netwerken, en ik weet niet hoe intelligent zo'n neuraal netwerk kan zijn. En dan ook nog het soort neuraal netwerk. Backpropagation is volgens mij al krachtig genoeg, maar welke klasse van berekeningen dit kan representeren weet ik niet zo 1-2-3. Het was niet Turing-complete.

Extra info:

De input data is gegarandeerd correct en bevat geen ruis/noise.

Edit: Ik zie geen enkele mogelijkheid om mogelijk oneindig veel bits te representeren in de huidige libraries.

[ Voor 12% gewijzigd door Verwijderd op 06-09-2004 20:24 ]


  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
• Heb je een eenmalige hoeveelheid (of onderling niet gerelateerde) data ('offline') of krijgt je programma steeds nieuwe aan het voorgaande gerelateerde data ('online')?

• Is er tussentijdse beoordeling van de gevonden functies ('supervised learning')?

• Hoe wordt de gevonden functie beoordeeld? (Hoe verhouden zich bij voorbeeld de prioriteiten: (i) dat de functie gebaseerd is op een compact patroon, (ii) dat de functie voor elk getal de oorspronkelijke klasse geeft?)

• Wat weet je op voorhand al van de te verwachten patronen?

Pas de replâtrage, la structure est pourrie.


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Mag ik vragen waarom je dit wilt doen? Als ik naar je probleem kijk zie ik niet in waarom je een Functie F wilt berekenen. Ik zou eerder een HashTable gebruiken om je data te bewaren. Maar misschien wil je er iets mee wat je niet verteld.

"Beauty is the ultimate defence against complexity." David Gelernter


  • 12_0_13
  • Registratie: April 2004
  • Laatst online: 12-02 13:19
Bovendien heb je natuurlijk wel een vast aantal bits voor je input getallen, want hoe wil je ze anders ooit in je computer stoppen?

De meeste "natuurlijke getallen" worden afgepeeld op een 32 bits woord. Wil je echt grote getallen gaan gebruiken, kan je altijd 64 bits nemen. 64 bits input (=> 64 neuronen) voor een neuraal netwerk is niet groot.

Een neuraal netwerk is ook niet alles hoor. Extrapoleren zoals jij dat wilt is ook voor een neuraal netwerk lastig. Zeker als je wel bij input hebt van 1..20 , maar nier hoger.

Ik weet niet hoe complex je data is, hoeveel klassen je hebt enzo, maar misschien kan je (toch) kijken naar functie approximatie. Misschien moet je meer kijken naar Fourier transformaties/descriptors, als je complexe repeterende patronen tegenkomt.

Je kan een PCA doen, kijken hoeveel variantie er in je data zit etc.etc.etc. Eigenlijk is het onmogelijk om zomaar een methode te geven, meer kennis over het probleem is gewenst.

Als je het echt helemaal automatsch zou willen doen, misschien moet je dan kijken naar genetische algorithmes, of zelfs genetishce neurale netwerken. (Altijd interessant trouwens :) )

Verwijderd

Topicstarter
Apollo_Futurae schreef op 07 september 2004 @ 00:14:
• Heb je een eenmalige hoeveelheid (of onderling niet gerelateerde) data ('offline') of krijgt je programma steeds nieuwe aan het voorgaande gerelateerde data ('online')?
Deze twee methoden tot op zeker niveau gelijk aan elkaar. Het zou beide kunnen.
• Is er tussentijdse beoordeling van de gevonden functies ('supervised learning')?
Ik denk dat ik daar wel een beoordeling voor kan verzinnen.
• Hoe wordt de gevonden functie beoordeeld? (Hoe verhouden zich bij voorbeeld de prioriteiten: (i) dat de functie gebaseerd is op een compact patroon, (ii) dat de functie voor elk getal de oorspronkelijke klasse geeft?)
Het belangrijkste is dat het correct is en het mag niet zo zijn dat er eigenlijk gewoon een hashtable wordt opgeslagen op een onzichtbare manier. Dat is wel een functie, maar geen generalisatie.
• Wat weet je op voorhand al van de te verwachten patronen?
Ik verwacht dat deze met een hoop + - * / -tekens kunnen worden gerepresenteerd.
Bovendien heb je natuurlijk wel een vast aantal bits voor je input getallen, want hoe wil je ze anders ooit in je computer stoppen?
Er zijn zat datatypes die met oneindig ("zo groot als de computer toelaat") veel bits kan rekenen. Een voorbeeld:

data Nat = Nul|Suc Nat

Maar BigInt van Java, of Integer van Haskell kun je ook gebruiken.

Verwijderd

Kun je nogmaals proberen duidelijk te maken wat je precies wilt?

Wat bedoel je met data? Is dat een string na het getal en de klasse?
Wat wil je precies met die functie?

Kun je meer uitleg geven waarom je dit zoekt? Wat is de context?

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Ik begrijp niet echt de moeilijkheid. Je hebt een gegeven set tupels: (natuurlijk getal, klasse). Die tupels sla je op in een hashtable, key = natuurlijk getal. Je functie is dan 1 regel: return indexed klasse in hashtable voor gegeven key.

Het punt is nl.: je natuurlijk getal - klasse binding is immers eindig.

* EfBe , die vindt dat de OP riekt naar huiswerk.

[ Voor 8% gewijzigd door EfBe op 07-09-2004 12:57 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Verwijderd schreef op 07 september 2004 @ 12:09:
Kun je nogmaals proberen duidelijk te maken wat je precies wilt?

Wat bedoel je met data? Is dat een string na het getal en de klasse?
Wat wil je precies met die functie?

Kun je meer uitleg geven waarom je dit zoekt? Wat is de context?
(data) is een samenvatting van het voorgaande. Dus een tuple is een stukje data. Ik dacht dat dit wel duidelijk was.

Verwijderd

Topicstarter
EfBe schreef op 07 september 2004 @ 12:57:
Ik begrijp niet echt de moeilijkheid. Je hebt een gegeven set tupels: (natuurlijk getal, klasse). Die tupels sla je op in een hashtable, key = natuurlijk getal. Je functie is dan 1 regel: return indexed klasse in hashtable voor gegeven key.

Het punt is nl.: je natuurlijk getal - klasse binding is immers eindig.

* EfBe , die vindt dat de OP riekt naar huiswerk.
Je leest niet erg goed, geloof ik. Wel bedankt voor de moeite, maar ik heb er alleen helemaal niets aan. Dit heeft totaal niets met huiswerk te maken. Daar huiswerk te maken heeft met dingen die al bedacht zijn.

  • rollebol
  • Registratie: Mei 2000
  • Laatst online: 22-08-2025
Ik ben het met olav en EfBe eens dat je vraag zeer onduidelijk is, je hoeft dus niet te doen alsof het zo vanzelfsprekend is. Als er echt helemaal niets over de input valt te zeggen, dan kan je in ieder geval toelichten waarom niet, zodat dat ook inzichtelijk is.

Ik zou het met een genetisch algoritme proberen met de gegevens die je in je post geeft, maar als je er wat meer omheen vertelt dan komen er misschien betere ideetjes.

Verwijderd

ok, zo als ik het nu begrijp het je de volgende data:

1, a
2, b
3, c

enz

je wilt een koppeling maken tussen getal en letter op basis van de data.

Mijn vragen:

hoe uniek is de koppeling? Komt elk nummer 1x voor? Kan een klasse bij meerdere nummers voorkomen?

Wat voor soort relatie mag je verwachten?

Hoeveel nummers zijn er? Hoeveel klassen?

Wat is de achtergrond van het probleem?

Hoe belangrijk is de correcte classificatie? Mag het probabilistisch?

  • rollebol
  • Registratie: Mei 2000
  • Laatst online: 22-08-2025
Ik zat aan een Markov-model te denken maar de openingspost is niet gedetailleerd genoeg om dat zo maar te kunnen voorstellen zonder meer info.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 07 september 2004 @ 13:19:
Je leest niet erg goed, geloof ik. Wel bedankt voor de moeite, maar ik heb er alleen helemaal niets aan. Dit heeft totaal niets met huiswerk te maken. Daar huiswerk te maken heeft met dingen die al bedacht zijn.
Ik denk dat ik prima lees, alleen ik zie deze dingen:

(1,a), (2,b) etc...

en een stukje wollig taalgebruik over allerlei zaken zoals neurale netwerken en andere ongein.

Je wilt een functie genereren die bij input N de klasse behorende bij N oplevert, en welke klasse dat is, is opgeslagen in de data, correct? Indien ja, dan is het bepalen van de klasse een zaak van de data parsen en daarin zoeken. Indien nee, dan zou ik als ik jou was toch echt wat beter je vraag omschrijven want ik snap er dan geen reet van wat je wilt.

(hint: het helpt vaak als je aangeeft wat je al hebt geprobeerd, zoals stukjes voorbeeldcode, zodat men ook daaruit kan afleiden wat je wilt)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Ik denk dat er een bepaalde relatie zit tussen de waarden van 1 2 3 4 5 6 7 8 ... tot hoogsteGetalBekend, die ook voorkomt in de onbekende data.

Dus als ik een patroon vind die de bekende data verklaart, dat deze ook kan worden gebruikt voor de onbekende data.

Markov modellen hebben met statistiek te maken, in dit geval zou de functie, gegeven genoeg data, het patroon per definitie moeten kunnen vinden.

Bij een natuurlijk getal past 1 klasse en niet meer. Bij 1 klasse kunnen er wel meerdere natuurlijke getallen zijn.

Het eerste getal van de tuple zal oplopend zijn. (1, a) (2,c)...
Dus als (10,a) voorkomt in de data, dan staat daarvoor (9,eenOfAndereKlasse)

Stel je hebt de volgende rij: (1, ja) (2,nee) (3,ja)
Dan zou hij voor 4 bijvoorbeeld nee moeten geven. Dit is een voorbeeld met priemgetallen. Nu weet ik dat dit niet werkt met neurale netwerken, maar er zijn misschien wel methoden om dit wel correct te doen, alleen is dit nog niet gevonden. Het probleem waar ik mee bezig ben heeft een soort gelijk iets, maar ik denk dat er een relatief eenvoudig("als in uitrekenbaar") patroon in zit.

Verwijderd

Topicstarter
EfBe schreef op 07 september 2004 @ 13:54:
[...]

Ik denk dat ik prima lees, alleen ik zie deze dingen:

(1,a), (2,b) etc...

en een stukje wollig taalgebruik over allerlei zaken zoals neurale netwerken en andere ongein.

Je wilt een functie genereren die bij input N de klasse behorende bij N oplevert, en welke klasse dat is, is opgeslagen in de data, correct? Indien ja, dan is het bepalen van de klasse een zaak van de data parsen en daarin zoeken. Indien nee, dan zou ik als ik jou was toch echt wat beter je vraag omschrijven want ik snap er dan geen reet van wat je wilt.

(hint: het helpt vaak als je aangeeft wat je al hebt geprobeerd, zoals stukjes voorbeeldcode, zodat men ook daaruit kan afleiden wat je wilt)
Er zit een patroon in de data en die heeft een bepaalde logica in zich. Als de computer die logica kan vinden, dan kunnen onbekende natuurlijke getallen kunnen worden berekend. Het is niet zo dat je iets vergelijkt met datapunten of iets dergelijks, omdat dit gewoon niet werkt. De waarde van 5 is *niet* bekend (ook al kan deze wel worden uitgerekend). Dat is juist het probleem. Dat "wollig taalgebruik" is zeker wel relevant. Ik verwacht dat >95% van de mensen op dit forum geen idee heeft waar ik het over heb, omdat het niets te maken heeft met wat zij ooit eerder hebben gezien. Code kun je pas schrijven op het moment dat je weet hoe je iets kan doen.

  • rollebol
  • Registratie: Mei 2000
  • Laatst online: 22-08-2025
Klinkt meer iets voor W&L dan, ik dacht dat je een concrete toepassing had. Wat je voorbeeld betreft geef je al gelijk een mooi probleem aan. Je rijtje staat namelijk niet alleen voor 'priemgetallen' maar ook voor 'oneven getallen'.

Verwijderd

Topicstarter
rollebol schreef op 07 september 2004 @ 14:12:
Klinkt meer iets voor W&L dan, ik dacht dat je een concrete toepassing had. Wat je voorbeeld betreft geef je al gelijk een mooi probleem aan. Je rijtje staat namelijk niet alleen voor 'priemgetallen' maar ook voor 'oneven getallen'.
Het idee is dat er dan meer data is, zodat dit soort functies afvallen, maar ik denk dat je dat zelf ook al door had.

Ik heb wel een concrete toepassing, maar dat heeft weinig zin om dat hier neer te zetten (lees: ik heb weinig zin om dat hier neer te zetten).

  • rollebol
  • Registratie: Mei 2000
  • Laatst online: 22-08-2025
Verwijderd schreef op 07 september 2004 @ 14:17:
[...]

Het idee is dat er dan meer data is, zodat dit soort functies afvallen, maar ik denk dat je dat zelf ook al door had.
Uiteraard. Ik bedoelde dat dit in het algemeen geldig is. Ik heb net even voor je gezocht, want ik kwam laatst een voorbeeld tegen van een machtreeksontwikkeling die tot heel erg lang hetzelfde resultaat gaf als de Fibonacci-reeks, om aan te geven hoe makkelijk het is om met weinig data een verkeerde formule te 'geloven'. Helaas heb ik de link even niet paraat.
Ik heb wel een concrete toepassing, maar dat heeft weinig zin om dat hier neer te zetten (lees: ik heb weinig zin om dat hier neer te zetten).
Dat begrijp ik, maar misschien is het W&L-publiek voor dit soort vragen wat meer in de stemming dan het P&W-publiek, no offense to either party. Ik denk dat een move het topic best goed zou kunnen doen...

Verwijderd

Heb je binnen hoogste_nummer_bekend al een wederkeringe structuur?

Stel je hebt een zoekalgoritme dat een structuur zoekt in je data.

Dan wil je het ook kunnen testen. Je hebt dus een gedeelte van je data nodig om te schatten, en een ander gedeelte om je algoritme te valideren.

Heb je daar genoeg gegevens voor?

vb:

Stel je hebt de string "abcdef" en je wilt de volgende letter voorspellen.

1. een algoritme "bedenkt" nooit de letter g
2. in de geobserveerde data zit geen herhaling, dus het meest logisch zou zijn om weer bij a te beginnen.

Gegeven deze data kun je het algoritme dus niet valideren.

Stel je hebt de string "abcabcabc" en je wilt de volgende letter voorspellen.

1. doordat er een repetitie in zit, kun je nu aannemelijker maken dat "a" de volgende letter is, omdat dit al eerder gebeurde. Het algoritme zou de string "abc" kunnen herkennen als logische structuur op basis van de eerste 6 letters, en dat ook nog testen op de derde keer dat het voorkomt.


Nogmaals:

Wat is de achtergrond van je probleem?
Wat voor logische structuur verwacht je?


Edit: als je weinig zin hebt de achtergrond van het probleem te vertellen, heb ik ook geen zin om voor jou na te denken. Dus, vooruit met die geit.

[ Voor 13% gewijzigd door Verwijderd op 07-09-2004 14:52 ]


Verwijderd

Topicstarter
Er zijn een eindig aantal klassen, alle klassen komen voor in de inputdata en er kan gevalideerd worden met testdata. Dus g zal al niet voor kunnen komen.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 07 september 2004 @ 14:11:
Er zit een patroon in de data en die heeft een bepaalde logica in zich.
Nee, je hebt meerdere patronen in de data en een paar (je hoopt: 1) heeft logica achter zich die jij zoekt, of beter: die jij verder kunt gebruiken. Dit is het manko aan al die IQ test puzzeltjes waar je 8 figuren ziet en de 9e moet invullen, of 'welke hoort er niet in thuis': er zijn altijd redenen te verzinnen waarom een andere dan degene die door de puzzlemaker als antwoord wordt gezien ook goed is.

Je hebt dus een bak data, en in die data vind je oneindig veel patronen. Je voert dan een algoritme een deel van een patroon en je wilt een functie die dan dat patroon afmaakt op basis van de patronen in de data, echter dat gegeven patroon kan wel matchen met 200 gevonden patronen en er is er dus geen logica in te ontdekken. Die 'logica' is overigens niets anders dan het aflopen van regels die als 'logica bouwstenen' worden gezien voor dit soort reeksen. Ik kan 4 random getallen achter elkaar prakken zonder enige logica en je kunt er toch een reeks uithalen (meerdere). De simpelste is 1, 2, 3, 4, 5 ... Een andere is bv 8 4 12 6 18 etc.. Die laatste heeft ogenschijnlijk 1 reeks, maar dat is niet zo.
De waarde van 5 is *niet* bekend (ook al kan deze wel worden uitgerekend). Dat is juist het probleem.
Ok, maar op basis van wat moet het algorithme dan besluiten wat de waarde die bij '5' hoort is? Je kunt wellicht wel 10.000 reeksen verzinnen op de input data, dus de waarde van 5 heeft evenzovele oplossingen (of minder)
Dat "wollig taalgebruik" is zeker wel relevant. Ik verwacht dat >95% van de mensen op dit forum geen idee heeft waar ik het over heb, omdat het niets te maken heeft met wat zij ooit eerder hebben gezien. Code kun je pas schrijven op het moment dat je weet hoe je iets kan doen.
Jij weet niet wat mensen hier al hebben gezien. Jij wilt antwoord maar niet veel vertellen. Ik denk dat je dan uiteindelijk gewoon geen antwoord krijgt...

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Jij weet niet wat mensen hier al hebben gezien. Jij wilt antwoord maar niet veel vertellen.
Er is niet meer te vertellen.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 07 september 2004 @ 15:46:
[...]
Er is niet meer te vertellen.
Dan houdt het wel aardig op denk ik :). Hoe weet je of een reeks geeindigd is? Klein dingetje, die niet te achterhalen is uit jouw info. Zonder een eindig marker (halverwege reeks 1 kan reeks 2 beginnen etc.) kun je niet veel. Met achtergrond info zou je van een 'algemene zaak' een specifieke zaak kunnen maken omdat je specifieke informatie weet omtrent de reeks data.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Dit kun je nooit deterministisch bepalen.

Patronen herkennen is typisch iets waar een mens goed in is, maar een computer zeer slecht. Het verondersteld context die een computer niet heeft en er komt zelfs gevoel bij kijken. Laat honderd mensen naar hetzelfde muziekstuk luisteren en vraag ze het ritme mee te trommelen met hun vinger. Verbaas je vervolgens over het aantal verschillende ritmes dat je zult zien.

Als je veel input hebt per identificatie, kun je met technieken als neurale netwerken best een leuk herkennings systeempje maken. Maar jouw input bestaat uit niets meer dan tuppels. Dat is zelfs voor een mens te weinig om een zinvolle herkenning of speculatie op te baseren. Er zijn gewoon teveel "voor de handliggende" of "logische" patronen om een deterministische keuze uit te maken. Bovendien kun je die begrippen niet aan een computer uitleggen.

He who knows only his own side of the case knows little of that.


  • Opi
  • Registratie: Maart 2002
  • Niet online

Opi

Data mining lijkt me inderdaad iets voor dit probleem. Tevens kan je proberen patroonherkenningsalgorithmen en classifiers te beschouwen. Neurale netwerken in hun zuivere vorm werken in dit geval niet, omdat de outputs niet numeriek zijn.
Verwijderd schreef op 07 september 2004 @ 14:11:
Er zit een patroon in de data en die heeft een bepaalde logica in zich. Als de computer die logica kan vinden, dan kunnen onbekende natuurlijke getallen kunnen worden berekend.
Er zitten oneindig veel patronen in, jij moet er alleen voor zorgen dat je een criteria hebt dat de mate van correctheid kan bepalen en deze mate van correctheid kan vergroten door te trainen.
Ik verwacht dat >95% van de mensen op dit forum geen idee heeft waar ik het over heb, omdat het niets te maken heeft met wat zij ooit eerder hebben gezien.
Desalniettemin ben ik erg geïnteresseerd in je applicatie. :) Tevens is dit voor de meesten een ingang om je beter te kunnen helpen.

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 21-05 22:50
Wat ik van je probleem begrijp, zoek je een formule waarmee de beschikbare data geextrapoleerd kan worden. Dus (even numeriek ipv alfanumeriek) met de volgende data:

(1,1)(2,0)(3,1)

Komt er de volgende (kortste) functie eruit:

f(x) = x modulus 2

En dan is f(4) dus 0.

Waar dit op lijkt is een soort genetisch algoritme die, in een boomstructuur, langzaam een functie opbouwt en controlleerd op de aangeboden data. Dan moet je bekijken wat je bouwstenen zijn, met als knooppunten verschillende unaire en binaire mathematische berekeningen (+,-,*,%,modulus,machtverheffen,!,etc) en op de uiteinden danwel de functie input danwel een constante waarde.

Zoiets? Lijkt op het vinden van een boolean function op basis van een input uitput matrix, maar dan met numerieke waarden.

[ Voor 10% gewijzigd door DaCoTa op 07-09-2004 16:12 ]


Verwijderd

Topicstarter
DaCoTa schreef op 07 september 2004 @ 16:10:
Zoiets? Lijkt op het vinden van een boolean function op basis van een input uitput matrix, maar dan met numerieke waarden.
Zoiets, ja. Dit is dan een voorbeeld van wat je zou willen doen. Ik heb alleen niet zulke goede ervaringen met genetisch programmeren, omdat ze extreem langzaam zijn. Alleen als je een grote hoeveelheid computerkracht hebt, zal zoiets werken.

Wel een leuk distributed computing projectje dit, maar op dit moment kan ik dat nog niet zo 1-2-3 bouwen, misschien over een paar maanden :)

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 21-05 22:50
Ach, dat is maar relatief. Ik weet niet hoe groot je datasets zijn, maar ik neem iig aan dat de functies die je zoekt wel te overzien zijn. Zolang die beheersbaar blijven, is het met GA wel goed te doen. Probleem is wel dat je aan de ene kant een uitgebreide blokkendoos moet hebben om goede (complete) functies te kunnen bouwen, maar hiermee wel de mogelijkheden exploderen. Andere issues zijn natuurlijk de fitness functie en welke mogelijkheden de GA heeft om de functies te muteren.

Ik tijdens mijn studie redelijk wat met GA's gerommeld op een P2 350Mhz. Dat ging heel goed. We zijn inmiddels wat generaties computers verder, dus over rekenkracht zou ik zeker geen zorgen maken.

Heb je ook een echte voorbeeld van de data waar je het over hebt? Dat is misschien beter voor de beeldvorming.

[ Voor 9% gewijzigd door DaCoTa op 07-09-2004 17:26 ]


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Hoe denk je trouwens met behulp van +,-.* en / een functie te construeren waarvan de functiewaarden voor alle natuurlijke getallen binnen een eindige verzameling liggen. Dat lijkt me onmogelijk voor polynomen van graad >= 1, daar het bereik van een dergelijk polynoom altijd aan tenminste 1 kant onbegrends is. De / introduceert in principe alleen maar asymptoten dus daar kom je ook niet verder mee.

He who knows only his own side of the case knows little of that.


  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Verwijderd schreef op 07 september 2004 @ 11:59:
Ik denk dat ik daar wel een beoordeling voor kan verzinnen.
De beoordeling van je (tussen)resultaat lijkt me een fundamenteel deel van je probleemstelling, niet iets dat je 'wel kunt verzinnen' :?.
Ik verwacht dat deze met een hoop + - * / -tekens kunnen worden gerepresenteerd.
Hoe bedoel je dit precies? Ik had bij gebrek aan informatie aangenomen dat de klassen geen verdere structuur hebben. Zijn de klassen in werkelijkheid onbekende natuurlijke getallen, of hebben ze een andere ((on)bekende) structuur?
Verwijderd schreef op 07 september 2004 @ 14:03:
[...] in dit geval zou de functie, gegeven genoeg data, het patroon per definitie moeten kunnen vinden.
Dan is het noodzakelijk om vast te leggen wat voor jouw doeleinden een patroon is.
Stel je hebt de volgende rij: (1, ja) (2,nee) (3,ja)
Dan zou hij voor 4 bijvoorbeeld nee moeten geven. Dit is een voorbeeld met priemgetallen.
offtopic:
1 is geen priemgetal. 2 wel.

Pas de replâtrage, la structure est pourrie.


Verwijderd

Topicstarter
Die + - * opmerkingen waren bij nader inzien onzin, omdat ze totaal niet toepasbaar zijn in dit geval. Evenzo het feit dat twee ook een priemgetal is en één niet.

Ik denk dat het makkelijker is om het patroon in de reeks te zien, net als in
1 2 4 8 16 32

of

1 3 7 13 22

of

..

Een reeks staat voor alle natuurlijke getallen die in een klasse zitten. De rest zit dan in de andere klassen.

En dan moet dat patroon dus voor elke klasse worden gevonden.

Dus gegeven het vorige getal het nieuwe te bepalen en dan proberen F efficient te berekenen.

Ik bedoelde de operators dan ook in deze context, ook al zou dat alleen voor helderzienden duidelijk zijn geweest. Dus een duidelijk geval van onzin.

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Good luck, als computers dat konden, dan konden we mensen wel wegdoen. Laat ons maar eens horen wanneer je iets hebt.

"Beauty is the ultimate defence against complexity." David Gelernter


  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 21-05 22:50
Verwijderd schreef op 07 september 2004 @ 23:41:
Die + - * opmerkingen waren bij nader inzien onzin, omdat ze totaal niet toepasbaar zijn in dit geval. Evenzo het feit dat twee ook een priemgetal is en één niet.
[...]
Ik bedoelde de operators dan ook in deze context, ook al zou dat alleen voor helderzienden duidelijk zijn geweest. Dus een duidelijk geval van onzin.
Maar wat zijn dan wel goede operators? Want nu wordt het alleen maar vager en vager. En als je met natuurlijke getallen werkt, waarom wil je dan (benaderingen) van polynomen oid?

Daarnaast, waarom lopen er meerdere patronen door elkaar? Zijn dan niet alle getallen van dezelfde klasse eruit te halen en dit als losstaand probleem te behandelen, of hebben de verschillende patronen ook nog met elkaar te maken?
Pagina: 1