・ Verwendet Bestandsdaten für ein Jahr 2019 für eine bestimmte Unterhaltungsmarke ・ Verwendet den Nikkei Average Inverse Index für denselben Zeitraum ・ Erwähnt nicht die Validierungsmethode, ob es sich um die optimale Kombination von Merkmalsgrößen handelt
・ Führen Sie zum Zweck der Implementierungsmethode keine Parameteroptimierung für Bewertungsindizes wie unzureichendes Lernen, Überlernen und Genauigkeit der vorhergesagten Werte durch.
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
npArray = np.loadtxt("stock.csv", delimiter = ",", dtype = "float",skiprows=1)
#Funktionswert(Volumen)
x = npArray[:,2:3]
#Prognosedaten (Aktienkurs)
y = npArray[:, 3:4].ravel()
#Unterteilt in Trainingsdaten und Bewertungsdaten
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)#, random_state=0)
#Standardisierung von Funktionen
sc = StandardScaler()
#Mit einem Konverter standardisierte Trainingsdaten
x_train_std = sc.fit_transform(x_train)
#Standardisieren Sie Testdaten mit einem Konverter, der mit Trainingsdaten trainiert wird
x_test_std = sc.transform(x_test)
#Erstellen Sie ein lineares Regressionsmodell
mod = LinearRegression()
#SVR-Modell erstellen
mod2 = SVR(kernel='linear', C=10000.0, epsilon=250.0)
#Lernen des linearen Regressionsmodells
mod.fit(x_train_std, y_train)
# SVR
mod2.fit(x_train_std, y_train)
#Darstellung der Trainingsdaten (Volumen)
plt.figure(figsize=(8,5))
#Volumensortierung (0 zwischen Minimal- und Maximalwerten).1 Mal ndarray Erstellung)
x_ndar = np.arange(x_train_std.min(), x_train_std.max(), 0.1)[:, np.newaxis]
#Vorhersage der linearen Volumenregression
y_ndar_prd = mod.predict(x_ndar)
#Volumen-SVR-Vorhersage
y_ndar_svr = mod2.predict(x_ndar)
## MSE(Durchschnittlicher quadratischer Fehler)
mse_train_lin=mod.predict(x_train_std)
mse_test_lin=mod.predict(x_test_std)
mse_train_svr= mod2.predict(x_train_std)
mse_test_svr = mod2.predict(x_test_std)
#Lineare Regression MSE
print('MSE-Training mit linearer Regression= %.1f,Prüfung= %.1f' % (mean_squared_error(y_train,mse_train_lin),mean_squared_error(y_test, mse_test_lin)))
#SVR MSE
print('SVRMSE-Training= %.1f,Prüfung= %.1f' % (mean_squared_error(y_train,mse_train_svr),mean_squared_error(y_test, mse_test_svr)))
Wenn Sie es mehrmals versuchen, ohne random_state anzugeben, ist die MSE von SVR natürlich klein.
Lassen Sie uns dies in einem Streudiagramm unten darstellen
#Volumen- und Aktienstreudiagramm
plt.scatter(x_train_std, y_train, color='blue', label='data')
#Gerade zurückgeben
plt.plot(x_ndar, y_ndar_prd, color='green', linestyle='-', label='LinearRegression')
#Rand
plt.plot(x_ndar, y_ndar_svr ,color='red', linestyle='-', label='SVR')
#Randlinie
plt.plot(x_ndar, y_ndar_svr + mod2.epsilon, color='orange', linestyle='-.', label='margin')
plt.plot(x_ndar, y_ndar_svr - mod2.epsilon, color='orange', linestyle='-.')
#Etikette
plt.ylabel('Closing price')
plt.xlabel('Volume')
plt.title('SVR Regression')
#Gebrauchsanweisung
plt.legend(loc='lower right')
plt.show()
Die SVR-Grenze ist sanfter als die Steigung der Regressionslinie Ich habe versucht, die Marge von Epsilon bei 250 Yen zu halten, aber es scheint gut zu sagen, dass der Aktienkurs nicht merklich nach dem Handelsvolumen geworfen wurde und sich in einem Aufwärtstrend befand.
Recommended Posts