Depuis que j'ai étudié scikit-learn, je vais l'utiliser pour prédire le cours de l'action. Dernière fois, Dernière fois Je veux comparer avec TensorFlow En effet, il est difficile d'obtenir et de traiter les données utilisées pour l'entrée. S'il vous plaît, pardonnez-moi. Au fait, il y a déjà des gens qui font la même chose. De plus, comme j'ai seulement étudié scikit-learn (et la théorie qui l'entoure) pendant environ une semaine, je pense qu'il y a probablement des erreurs. Nous attendons vos suggestions.
Il semble lire "Sykit Learn". Une bibliothèque pour l'apprentissage automatique. Il est équipé de divers algorithmes et est relativement facile à utiliser. TensorFlow peut faire de même, mais scicit-learn est plus facile à écrire.
"Utilisez plusieurs jours d'indices boursiers mondiaux (Dow, Nikkei Average, DAX, etc.) pour prédire si le Nikkei Average augmentera ou baissera le lendemain (2 choix)" (comme la dernière fois)
scikit-learn 0.17.1 Python 2.7 Windows 7
Les données précédentes seront utilisées telles quelles. (Les indices boursiers de Nikkei, Dow, Hong Kong Hansen et l'Allemagne téléchargés à partir du site Quandl sont combinés en un seul sous forme de données textuelles)
Dans le cas de scikit-learn, l'étiquette semble spécifier une valeur numérique avec int au lieu d'un format d'indicateur (comme [0,0,1]), donc il a été mis à 0 pour la hausse et 1 pour la baisse.
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
Comme un échantillon complet Monter: 50,5% En baisse: 49,5% est devenu.
Sur la base des points d'amélioration précédents, au lieu de mettre le cours de l'action tel quel, nous donnons une liste de "combien (%) il a augmenté ou diminué par rapport à la veille".
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)
Divers algorithmes peuvent être utilisés avec scikit-learn, mais honnêtement, je ne sais pas lequel est le meilleur, alors j'ai décidé d'essayer environ trois de ces algorithmes. Cette fois, nous allons essayer trois méthodes: la descente de gradient stochastique, l'arbre de décision et la machine vectorielle de support. Au fait, je n'ai aucune idée en quoi ces trois sont différents. (^ _ ^;)
# 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)
J'ai essayé de m'entraîner et d'évaluer dans la fonction. L'entraînement est très facile car il n'exécute que fit () et l'évaluation exécute score ().
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
Lors de l'utilisation de TensorFlow, le taux de réponse correct était d'environ 63%, il semble donc que certains résultats aient été obtenus, mais pas tellement. Le traitement est lourd uniquement pour SVM.
Dans ce qui précède, lors de la création d'une instance de chaque classificateur, rien n'a été spécifié dans l'argument, mais il semble que la précision puisse être améliorée en ajustant les paramètres. En outre, il existe également une fonction qui recherche ce paramètre de manière circulaire. Pratique. Essayez-le avec le SVM qui a donné les meilleurs résultats.
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)
Dans ce qui précède, nous avons essayé le noyau SVM avec quatre, «rbf», «linear», «poly» et «igmoid », et nous nous sommes entraînés et testés à nouveau avec les meilleurs paramètres. (La formation est-elle plus inutile?) En passant, bien sûr, je ne comprends pas vraiment la signification du noyau. (^ _ ^;)
0.638958858102
Les meilleurs résultats ont été obtenus lorsque le noyau était linéaire, avec une légère augmentation de la précision. Environ 64% ... J'ai dépassé l'apprentissage profond ... (je pense que c'est dans la plage d'erreur)
――Après tout, il est préférable de saisir le taux de variation plutôt que de saisir le cours de l'action tel qu'il est. (Je l'ai essayé avec le cours de l'action tel quel, mais cela n'a pas fonctionné) «L'apprentissage en profondeur est très populaire, mais vous pouvez également faire de votre mieux dans d'autres domaines.
C'est amusant de bouger facilement même si vous ne comprenez pas du tout l'algorithme.
Recommended Posts