Ich versuche ein neuronales Netzwerk zu verwenden, um ein Problem zu lösen. Ich erfuhr von ihnen aus dem Machine-Learning-Kurs, der auf Coursera angeboten wurde, und war froh zu entdecken, dass FANN eine Ruby-Implementierung neuronaler Netzwerke ist, so dass ich das Flugzeug nicht neu erfinden musste.Probleme beim Verstehen von neuronalen Netzwerken haben
Allerdings verstehe ich nicht wirklich, warum FANN mir so seltsame Ergebnisse gibt. Basierend auf dem, was ich von der Klasse gelernt habe,
Ich habe eine Reihe von Trainingsdaten, die Ergebnisse von Übereinstimmungen ist. Der Spieler erhält eine Nummer, sein Gegner bekommt eine Nummer und das Ergebnis ist 1 für einen Sieg und 0 für einen Verlust. Die Daten sind ein wenig laut wegen Verstimmungen, aber nicht so schlimm. Mein Ziel ist es, herauszufinden, welche Rating-Lücken anfälliger für Störungen sind. Zum Beispiel sagt mir meine Intuition, dass Spiele mit niedrigerem Rating eher zu Überraschungen führen, weil die Bewertungen weniger genau sind.
Also habe ich einen Trainingssatz von etwa 100 Beispielen bekommen. Jedes Beispiel ist (Rating, Delta) => 1/0. Es ist also ein Klassifizierungsproblem, aber nicht wirklich eines, von dem ich denke, dass es sich für ein logistisches Regressionsdiagramm eignet, und ein neuronales Netzwerk schien korrekter zu sein.
Mein Code beginnt
training_data = RubyFann::TrainData.new(:inputs => inputs, :desired_outputs => outputs)
ich dann das neuronale Netz mit
network = RubyFann::Standard.new(
:num_inputs=>2,
:hidden_neurons=>[8, 8, 8, 8],
:num_outputs=>1)
In der Klasse einrichten, erfuhr ich, dass ein einigermaßen Standard jede verborgene Schicht mit der gleichen Nummer haben, ist von Einheiten. Da ich nicht wirklich weiß, wie ich das mache oder was ich noch mache, ging ich mit dem Standard.
network.train_on_data(training_data, 1000, 1, 0.15)
Und dann endlich, ich durch eine Reihe von Abtastwerteingang Bewertungen ging in Schritten und bei jedem Schritt, erhöht Delta, bis das Ergebnis davon, dass> ,5-< 0,5 geschaltet, die ich etwa 0 bis sein nahm und etwa 1, obwohl sie eher wie 0,45 und 0,55 waren.
Wenn ich das einmal ausgeführt habe, gab es mir 0 für jeden Eingang. Ich habe es nochmal zweimal mit den gleichen Daten durchgeführt und einen rückläufigen Trend negativer Zahlen und einen steigenden Trend positiver Zahlen bekommen, völlig entgegengesetzte Vorhersagen.
Ich dachte, vielleicht habe ich nicht genug Funktionen enthalten, so fügte ich hinzu (rating**2
und delta**2
). Leider habe ich dann jedes Mal angefangen, mein Anfangsdelta oder mein maximales Delta für jede Eingabe zu bekommen.
Ich verstehe nicht wirklich, warum ich so unterschiedliche Ergebnisse bekomme oder was Ruby-FANN mir erzählt, teilweise weil ich die Bibliothek nicht verstehe, aber auch, weil ich gerade angefangen habe über Neuronale Netze zu lernen und vermisse etwas Großes und Offensichtliches. Habe ich nicht genügend Trainingsdaten, muss ich mehr Funktionen hinzufügen, was ist das Problem und wie kann ich es entweder reparieren oder lernen, wie man die Dinge besser macht?
Ich weiß nicht viel über ML, aber verzerrte Proben verursachen verzerrte Ergebnisse, wenn die meisten Ihrer Beispieldaten für Gewinne ist, wird es wahrscheinlich vorhersagen/führen zu einem Gewinn, wenn Sie Ihr Modell verwenden . – iouri
Es ist mehr Gewinne als Verluste, aber warum sind die Ergebnisse in verschiedenen Läufen so unterschiedlich? –