Da ich Scikit-Learn studiert habe, werde ich es verwenden, um den Aktienkurs vorherzusagen. Letztes Mal, Letztes Mal Ich möchte mit TensorFlow vergleichen Dies liegt daran, dass es schwierig ist, die für die Eingabe verwendeten Daten zu erhalten und zu verarbeiten. Bitte verzeih mir. Übrigens gibt es bereits Leute, die das Gleiche tun. Da ich Scikit-Learn (und die Theorie dazu) ungefähr eine Woche lang studiert habe, denke ich außerdem, dass es wahrscheinlich Fehler gibt. Wir warten auf Ihre Vorschläge.
Es scheint "Sykit Learn" zu lesen. Eine Bibliothek für maschinelles Lernen. Es ist mit verschiedenen Algorithmen ausgestattet und relativ einfach zu bedienen. TensorFlow kann möglicherweise dasselbe tun, aber Scicit-Learn ist einfacher zu schreiben.
――Tiefes Lernen ist nicht möglich.
"Verwenden Sie globale Aktienindizes im Wert von einigen Tagen (Dow, Nikkei Average, DAX usw.), um vorherzusagen, ob der Nikkei Average am nächsten Tag steigen oder fallen wird (2 Auswahlmöglichkeiten)" (wie beim letzten Mal)
scikit-learn 0.17.1 Python 2.7 Windows 7
Die vorherigen Daten werden unverändert verwendet. (Die von der Website Quandl heruntergeladenen Aktienindizes von Nikkei, Dow, Hong Kong Hansen und Deutschland werden als Textdaten zu einem zusammengefasst.)
Im Fall von Scikit-Learn scheint das Label einen numerischen Wert mit int anstelle eines Flag-Formats (wie [0,0,1]) anzugeben, daher wurde es für das Steigen auf 0 und für das Fallen auf 1 gesetzt.
if array_base[i][3] > (array_base[i+1][3]):
y_flg_array.append(0)
up += 1
else:
y_flg_array.append(1)
down += 1
Als ganze Probe Steigen Sie um: 50,5% Rückgang: 49,5% ist geworden.
Basierend auf den vorherigen Verbesserungspunkten geben wir anstelle des aktuellen Aktienkurses eine Liste an, "wie viel (%) er im Vergleich zum Vortag gestiegen oder gefallen ist".
tmp_array = []
for j in xrange(i+1, i + data_num + 1):
for k in range(16):
tmp_array.append((array_base[j][k] - array_base[j+1][k]) / array_base[j][k] * 100)
x_array.append(tmp_array)
Mit scikit-learn können verschiedene Algorithmen verwendet werden, aber ehrlich gesagt weiß ich nicht, welcher besser ist, deshalb habe ich beschlossen, drei solcher zu versuchen. Dieses Mal werden wir drei Methoden ausprobieren: stochastischer Gradientenabstieg, Entscheidungsbaum und Support-Vektor-Maschine. Ich habe übrigens keine Ahnung, wie sich diese drei unterscheiden. (^ _ ^;)
# SGDClassifier
clf = linear_model.SGDClassifier()
testClf(clf, x_train_array, y_flg_train_array, x_test_array, y_flg_test_array)
# Decision Tree
clf = tree.DecisionTreeClassifier()
testClf(clf, x_train_array, y_flg_train_array, x_test_array, y_flg_test_array)
# SVM
clf = svm.SVC()
testClf(clf, x_train_array, y_flg_train_array, x_test_array, y_flg_test_array)
Ich habe versucht, in der Funktion zu trainieren und zu bewerten. Das Training macht einfach fit () und die Bewertung macht score (), also ist es sehr einfach.
def testClf(clf, x_train_array, y_flg_train_array, x_test_array, y_flg_test_array):
print clf
clf.fit(x_train_array, y_flg_train_array)
print clf.score(x_test_array, y_flg_test_array)
SGDClassifier : 0.56591099916
DecisionTreeClassifier : 0.544080604534
SVM : 0.612090680101
Bei Verwendung von TensorFlow lag die korrekte Antwortrate bei etwa 63%. Es scheint also, dass einige Ergebnisse erzielt wurden, wenn auch nicht so viele. Die Verarbeitung ist nur für SVM schwer.
Oben wurde beim Erstellen einer Instanz jedes Klassifikators nichts im Argument angegeben, aber es scheint, dass die Genauigkeit durch Anpassen der Parameter verbessert werden kann. Darüber hinaus gibt es eine Funktion, die auf Umwegen nach diesem Parameter sucht. Praktisch. Probieren Sie es mit der SVM aus, die die besten Ergebnisse erzielt hat.
clf = svm.SVC()
grid = grid_search.GridSearchCV(estimator=clf, param_grid={'kernel': ['rbf','linear','poly','sigmoid']})
grid.fit(x_train_array, y_flg_train_array)
testClf(grid.best_estimator_, x_train_array, y_flg_train_array, x_test_array, y_flg_test_array)
Oben habe ich den SVM-Kernel mit 4'rbf ',' linear ',' poly 'und' sigmoid 'ausprobiert und mit den besten Parametern trainiert und erneut getestet. (Ist Training nicht mehr nötig?) Abgesehen davon verstehe ich natürlich die Bedeutung des Kernels nicht wirklich. (^ _ ^;)
0.638958858102
Die besten Ergebnisse wurden erzielt, wenn der Kern linear war, mit einer leichten Erhöhung der Genauigkeit. Ungefähr 64% ... Ich habe das tiefe Lernen überschritten ... (Ich denke, es liegt im Fehlerbereich)
―― Schließlich ist es besser, die Änderungsrate einzugeben, als den Aktienkurs so einzugeben, wie er ist. (Ich habe es mit dem Aktienkurs versucht, aber es hat nicht funktioniert) ――Tiefes Lernen ist sehr beliebt, aber Sie können auch in anderen Bereichen Ihr Bestes geben.
――Es macht Spaß, sich leicht zu bewegen, auch wenn Sie den Algorithmus überhaupt nicht verstehen.
Recommended Posts