Sto cercando di utilizzare una rete neurale per risolvere un problema. Ho imparato a conoscerli dal corso di Machine Learning offerto su Coursera e sono stato felice di scoprire che FANN è un'implementazione Ruby di reti neurali, quindi non ho dovuto reinventare l'aeroplano.Problemi nella comprensione delle reti neurali
Tuttavia, non capisco davvero perché FANN mi stia dando un'uscita così strana. Sulla base di ciò che ho imparato dalla lezione,
Ho una serie di dati di allenamento che sono i risultati delle partite. Al giocatore viene assegnato un numero, al suo avversario viene assegnato un numero e il risultato è 1 per una vittoria e 0 per una perdita. I dati sono un po 'rumorosi a causa di disturbi, ma non così terribilmente. Il mio obiettivo è scoprire quali gap di valutazione sono più inclini a turbolenze - ad esempio, la mia intuizione mi dice che le partite con rating inferiore tendono a comportare più turbamenti perché le valutazioni sono meno accurate.
Quindi ho ottenuto un set di formazione di circa 100 esempi. Ogni esempio è (valutazione, delta) => 1/0. Quindi è un problema di classificazione, ma non proprio quello che penso si presta a un grafico di tipo regressivo logistico, e una rete neurale sembrava più corretta.
Il mio codice inizia
training_data = RubyFann::TrainData.new(:inputs => inputs, :desired_outputs => outputs)
Ho quindi impostare la rete neurale con
network = RubyFann::Standard.new(
:num_inputs=>2,
:hidden_neurons=>[8, 8, 8, 8],
:num_outputs=>1)
Nella classe, ho imparato che un tempo ragionevolmente predefinito è quello di avere ogni strato nascosto con lo stesso numero di unità. Dal momento che non so davvero come funziona questo o quello che sto facendo, sono andato con il default.
network.train_on_data(training_data, 1000, 1, 0.15)
E poi finalmente, ho attraversato una serie di valutazioni di ingresso del campione in incrementi e, ad ogni incremento, l'aumento delta fino a quando il risultato passa da essere> 0,5-< 0.5, che ho preso per essere circa 0 e circa 1, anche se in realtà erano più come 0.45 e 0.55.
Quando l'ho eseguito una volta, mi ha dato 0 per ogni input. L'ho eseguito di nuovo due volte con gli stessi dati e ho avuto un andamento decrescente di numeri negativi e un trend crescente di numeri positivi, previsioni completamente opposte.
ho pensato che forse non era compresa caratteristiche abbastanza, così ho aggiunto (rating**2
e delta**2
). Sfortunatamente, ho iniziato a ricevere il mio delta iniziale o il mio delta massimo per ogni input ogni volta.
Non capisco davvero perché sto ottenendo risultati così divergenti o quello che Ruby-FANN mi sta dicendo, in parte perché non capisco la libreria ma anche, sospetto, perché ho appena iniziato a conoscere le reti neurali e mi manca qualcosa di grosso e ovvio. Non ho abbastanza dati di allenamento, ho bisogno di includere più funzionalità, qual è il problema e come posso risolverlo o imparare come fare le cose meglio?
Non so molto su ML, ma i campioni distorti causano risultati distorti, se la maggior parte dei dati campione è per vincere, è probabile che pronostici/si traduca in una vittoria quando usi il tuo modello . – iouri
È più vittorie che perdite, ma perché i risultati sono così diversi nelle diverse esecuzioni? –