・ Utilise les données de stock pour un an de 2019 pour une certaine marque de divertissement ・ Utilise l'indice inverse moyen Nikkei pour la même période ・ Ne mentionne pas la méthode de validation s'il s'agit de la combinaison optimale de quantités de caractéristiques
・ Pour les besoins de la méthode de mise en œuvre, ne poursuivez pas le réglage des paramètres pour les indices d'évaluation tels que l'apprentissage insuffisant, le surapprentissage et la précision des valeurs prédites.
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)
#Valeur de la fonctionnalité(Le volume)
x = npArray[:,2:3]
#Données de prévision (cours de l'action)
y = npArray[:, 3:4].ravel()
#Divisé en données d'entraînement et données d'évaluation
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)#, random_state=0)
#Standardisation des fonctionnalités
sc = StandardScaler()
#Données d'entraînement standardisées avec un convertisseur
x_train_std = sc.fit_transform(x_train)
#Standardisez les données de test avec un convertisseur formé avec des données d'entraînement
x_test_std = sc.transform(x_test)
#Créer un modèle de régression linéaire
mod = LinearRegression()
#Créer un modèle SVR
mod2 = SVR(kernel='linear', C=10000.0, epsilon=250.0)
#Apprentissage du modèle de régression linéaire
mod.fit(x_train_std, y_train)
# SVR
mod2.fit(x_train_std, y_train)
#Graphique des données d'entraînement (volume)
plt.figure(figsize=(8,5))
#Tri de volume (0 entre les valeurs minimum et maximum).1 fois création de ndarray)
x_ndar = np.arange(x_train_std.min(), x_train_std.max(), 0.1)[:, np.newaxis]
#Prédiction de la régression linéaire du volume
y_ndar_prd = mod.predict(x_ndar)
#Prédiction SVR de volume
y_ndar_svr = mod2.predict(x_ndar)
## MSE(Erreur quadratique moyenne)
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)
#Régression linéaire MSE
print('Formation MSE de régression linéaire= %.1f,tester= %.1f' % (mean_squared_error(y_train,mse_train_lin),mean_squared_error(y_test, mse_test_lin)))
#SVR MSE
print('Formation SVRMSE= %.1f,tester= %.1f' % (mean_squared_error(y_train,mse_train_svr),mean_squared_error(y_test, mse_test_svr)))
Si vous essayez plusieurs fois sans spécifier random_state, le MSE de SVR est naturellement petit. 1ère fois Entraînement MSE pour la régression linéaire = 38153,4, test = 33161,9 Formation SVR MSE = 52439,9, test = 56707,7 Deuxième fois Entraînement MSE pour la régression linéaire = 37836,4, test = 33841,3 Formation SVR MSE = 54044,5, test = 51083,7 3e fois Formation MSE pour la régression linéaire = 37381,3, test = 35616,6 Formation SVR MSE = 53499,2, test = 53619,4
Tracons ceci sur un diagramme de dispersion ci-dessous
#Graphique de dispersion des volumes et des stocks
plt.scatter(x_train_std, y_train, color='blue', label='data')
#Retour en ligne droite
plt.plot(x_ndar, y_ndar_prd, color='green', linestyle='-', label='LinearRegression')
#frontière
plt.plot(x_ndar, y_ndar_svr ,color='red', linestyle='-', label='SVR')
#Ligne de marge
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='-.')
#étiquette
plt.ylabel('Closing price')
plt.xlabel('Volume')
plt.title('SVR Regression')
#Guide d'utilisation
plt.legend(loc='lower right')
plt.show()
La limite SVR est plus douce que la pente de la droite de régression J'ai essayé de prendre la marge de l'epsilon à 250 yens, mais il semble bon de dire que le cours de l'action n'a pas été sensiblement modifié en fonction du volume des transactions et qu'il a suivi une tendance à la hausse.