① https://qiita.com/yohiro/items/04984927d0b455700cd1 ② https://qiita.com/yohiro/items/5aab5d28aef57ccbb19c ③ https://qiita.com/yohiro/items/cc9bc2631c0306f813b5 ④ https://qiita.com/yohiro/items/d376f44fe66831599d0b ⑤ https://qiita.com/yohiro/items/3abaf7b610fbcaa01b9c ⑥ https://qiita.com/yohiro/items/e9e80183e635e0ac4894 A continué
Compte tenu du taux d'augmentation des cours des actions au cours des quatre derniers jours, on estime si le cours de l'action ce jour-là augmentera ou baissera.
stock_price.txt
10000
9993
10259
...
Le cours de clôture du cours de l'action pour un jour est stocké sur une seule ligne.
from sklearn import svm
Lire des exemples de données et stocker dans stock_data
#Lecture de fichier
stock_data = []
stock_data_file = open("stock_price.txt", "r")
for line in stock_data_file:
line = line.rstrip()
stock_data.append(float(line))
stock_data_file.close()
Le taux d'augmentation est calculé comme suit
Taux d'augmentation le jour i=\frac{Cours de l'action le jour i- (i-1)Stock journalier}{(i-1)Stock journalier}
Stockez les données calculées ci-dessus dans modified_data
.
count_s = len(stock_data)
modified_data = []
for i in range(1, count_s):
modified_data.append(float(stock_data[i] - stock_data[i-1]) / float(stock_data[i-1]) * 20)
count_m = len(modified_data)
Pour chaque jour, enregistrez le taux d'augmentation des 4 derniers jours dans successive_data
.
De plus, s'il a augmenté ou diminué ce jour-là, il est stocké dans «réponses».
#Données pour 4 jours jusqu'au jour précédent
successive_data = []
#Bonne réponse augmentation de prix: 1 baisse de prix:0
answers = []
for i in range(4, count_m):
successive_data.append([modified_data[i-4], modified_data[i-3], modified_data[i-2], modified_data[i-1]])
if modified_data[i] > 0:
answers.append(1)
else:
answers.append(0)
n = len(successive_data)
m = len(answers)
Former sur 75% des données.
#Machine de vecteur de support linéaire
clf = svm.LinearSVC()
#Formation avec machine à vecteurs de support (75 de données)%Utilisé pour la formation)
clf.fit(successive_data[:int(n*75/100)], answers[:int(n*75/100)])
Faites des prédictions sur les 25% restants des données.
#Données de test
#Bonne réponse
expected = answers[int(-n*25/100):]
#Prévoir
predicted = clf.predict(successive_data[int(-n*25/100):])
#Comparez les 10 derniers
print(expected[-10:])
print(list(predicted[-10:]))
#Calcul du taux de réponse correcte
correct = 0.0
wrong = 0.0
for i in range(int(n*25/100)):
if expected[i] == predicted[i]:
correct += 1
else:
wrong += 1
print("Taux de réponse correct:" + str(correct/(correct+wrong) * 100) + "%")
Dans la vidéo du matériel pédagogique, le taux de réponse correcte est d'environ 61%, Quand je l'essaie, un avertissement apparaît, et le taux de réponse correct est d'environ 50% (presque aucune différence si je suppose) ...
Y aura-t-il une différence dans les résultats parce que les versions de python, etc. sont différentes?
C:\Anaconda3\lib\site-packages\sklearn\svm\_base.py:947: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
"the number of iterations.", ConvergenceWarning)
[0, 0, 0, 1, 0, 0, 0, 1, 1, 0]
[0, 0, 0, 0, 1, 0, 0, 0, 1, 1]
Taux de réponse correcte: 55.62248995983936%
Visualisez des exemples de données
Recommended Posts