① 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 Fortsetzung
Angesichts der Anstiegsrate der Aktienkurse in den letzten vier Tagen wird geschätzt, ob der Aktienkurs an diesem Tag steigen oder fallen wird.
stock_price.txt
10000
9993
10259
...
Der Schlusskurs des Aktienkurses für einen Tag wird in einer Zeile gespeichert.
from sklearn import svm
Lesen Sie die Beispieldaten und speichern Sie sie in "stock_data"
#Datei lesen
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()
Die Steigerungsrate wird wie folgt berechnet
Steigerungsrate am Tag i=\frac{Aktienkurs am Tag i- (i-1)Tagesbestand}{(i-1)Tagesbestand}
Speichern Sie die oben berechneten Daten in modifizierte_Daten
.
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)
Speichern Sie für jeden Tag die Steigerungsrate der letzten 4 Tage in "sukzessive_Daten". Außerdem speichert es in "Antworten", ob es an diesem Tag hoch oder runter ging.
#Daten für 4 Tage bis zum Vortag
successive_data = []
#Richtige Antwort Preiserhöhung: 1 Preisverfall: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)
Trainiere 75% der Daten.
#Lineare Stützvektormaschine
clf = svm.LinearSVC()
#Training mit Support Vector Machine (75 Daten)%Wird für das Training verwendet)
clf.fit(successive_data[:int(n*75/100)], answers[:int(n*75/100)])
Machen Sie Vorhersagen zu den verbleibenden 25% der Daten.
#Testdaten
#Richtige Antwort
expected = answers[int(-n*25/100):]
#Prognose
predicted = clf.predict(successive_data[int(-n*25/100):])
#Vergleichen Sie die letzten 10
print(expected[-10:])
print(list(predicted[-10:]))
#Berechnung der richtigen Antwortrate
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("Richtige Antwortrate:" + str(correct/(correct+wrong) * 100) + "%")
Im Lehrmaterialvideo liegt die korrekte Antwortrate bei 61%. Wenn ich es tatsächlich versuche, erscheint eine Warnung und die richtige Antwortrate liegt bei etwa 50% (fast kein Unterschied, wenn ich es vermute) ...
Wird es einen Unterschied in den Ergebnissen geben, weil die Versionen von Python usw. unterschiedlich sind?
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]
Richtige Antwortrate: 55.62248995983936%
Visualisieren Sie Beispieldaten
Recommended Posts