私はニューラルネットワークを使用してこのKaggle問題を解決しようとしています。PybrainPythonライブラリを使用しています。
これは、古典的な教師あり学習の問題です。次のコードでは、「data」変数はnumpy array(892 * 8)です。7つのフィールドは私の機能であり、1つのフィールドは「0」または「1」の出力値です。
from pybrain.datasets import ClassificationDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
dataset = ClassificationDataSet(7,1)
for i in data:
dataset.appendLinked(i[1:],i[0])
net = buildNetwork(7,9,7,1, bias = True,hiddenclass = SigmoidLayer, outclass = TanhLayer)
trainer = BackpropTrainer(net, learningrate = 0.04, momentum = 0.96, weightdecay = 0.02, verbose = True)
trainer.trainOnDataset(dataset, 8000)
trainer.testOnData(verbose = True)
ニューラルネットワークをトレーニングした後、トレーニングデータでテストしていると、すべての入力に対して常に単一の出力が得られます。好き:
Testing on data:
out: [ 0.075]
correct: [ 1.000]
error: 0.42767858
out: [ 0.075]
correct: [ 0.000]
error: 0.00283875
out: [ 0.075]
correct: [ 1.000]
error: 0.42744569
out: [ 0.077]
correct: [ 1.000]
error: 0.42616996
out: [ 0.076]
correct: [ 0.000]
error: 0.00291185
out: [ 0.076]
correct: [ 1.000]
error: 0.42664586
out: [ 0.075]
correct: [ 1.000]
error: 0.42800026
out: [ 0.076]
correct: [ 1.000]
error: 0.42719380
out: [ 0.076]
correct: [ 0.000]
error: 0.00286796
out: [ 0.076]
correct: [ 0.000]
error: 0.00286642
out: [ 0.076]
correct: [ 1.000]
error: 0.42696969
out: [ 0.076]
correct: [ 0.000]
error: 0.00292401
out: [ 0.074]
correct: [ 0.000]
error: 0.00274975
out: [ 0.076]
correct: [ 0.000]
error: 0.00286129
LearningRate、weightDecay、momentum、非表示ユニットの数、非表示レイヤーの数、非表示レイヤーのクラス、出力レイヤーのクラスを変更して解決しようとしましたが、いずれの場合も、入力がトレーニングからのものである場合、すべての入力に対して同じ出力が得られます。データ。
「XOR」用のニューラルネットワークを構築していたとき、ナノスケールでエラーが発生し始めるまでに少なくとも700回の反復が必要だったため、8000回以上実行する必要があると思います。'XOR'のトレーニングデータサイズはわずか4でしたが、この場合は892です。したがって、元のデータの10%(現在のトレーニングデータのサイズは89)で8000回の反復を実行しましたが、それでもすべての入力に対して同じ出力が得られました。トレーニングデータで。また、入力を「0」または「1」に分類したいので、出力層のクラスをSoftmaxとして使用している場合、出力として常に「1」が返されます。
どの構成(隠れユニットの数、出力層のクラス、学習率、隠れ層のクラス、勢い)に関係なく、「XOR」で使用していましたが、いずれの場合も多かれ少なかれ収束し始めました。
最終的にエラー率が低くなる構成がある可能性があります。トレーニングデータのすべての入力に対して同じ出力が得られないように、少なくともいくつかの構成。
80,000回の反復で実行しました(トレーニングデータサイズは89です)。出力サンプル:
Testing on data:
out: [ 0.340]
correct: [ 0.000]
error: 0.05772102
out: [ 0.399]
correct: [ 0.000]
error: 0.07954010
out: [ 0.478]
correct: [ 1.000]
error: 0.13600274
out: [ 0.347]
correct: [ 0.000]
error: 0.06013008
out: [ 0.500]
correct: [ 0.000]
error: 0.12497886
out: [ 0.468]
correct: [ 1.000]
error: 0.14177601
out: [ 0.377]
correct: [ 0.000]
error: 0.07112816
out: [ 0.349]
correct: [ 0.000]
error: 0.06100758
out: [ 0.380]
correct: [ 1.000]
error: 0.19237095
out: [ 0.362]
correct: [ 0.000]
error: 0.06557341
out: [ 0.335]
correct: [ 0.000]
error: 0.05607577
out: [ 0.381]
correct: [ 0.000]
error: 0.07247926
out: [ 0.355]
correct: [ 1.000]
error: 0.20832669
out: [ 0.382]
correct: [ 1.000]
error: 0.19116165
out: [ 0.440]
correct: [ 0.000]
error: 0.09663233
out: [ 0.336]
correct: [ 0.000]
error: 0.05632861
平均誤差:0.112558819082
(「最大エラー:」、0.21803000849096299、「中央値エラー:」、0.096632332865968451)
範囲(0.33、0.5)内のすべての出力を提供します。