Standardiser les données
Certains modèles, comme K-nearest neighbors (KNN) et les réseaux de neurones, fonctionnent mieux avec des données mises à l'échelle — nous allons donc standardiser nos données.
Nous allons aussi supprimer des variables peu utiles (jour de la semaine), d'après les importances de variables, en indexant les DataFrames de features avec .iloc[]. KNN utilise des distances pour trouver des points similaires lors des prédictions, donc des features de grande amplitude dominent les petites. Mettre les données à l'échelle corrige ce problème.
scale() de sklearn va standardiser les données, ce qui fixe la moyenne à 0 et l'écart type à 1. Idéalement, nous utiliserions StandardScaler avec fit_transform() sur les données d'entraînement, puis fit() sur les données de test, mais nous sommes limités à 15 lignes de code ici.
Une fois les données standardisées, nous vérifierons le résultat en traçant des histogrammes des données.
Cet exercice fait partie du cours
<cours>Machine Learning pour la finance en Python</cours>Instructions de l’exercice
- Supprimez les features de jour de la semaine des features d'entraînement/test avec
.iloc(les jours de la semaine correspondent aux 4 dernières features). - Standardisez
train_featuresettest_featuresavecscale()de sklearn ; enregistrez les features standardisées sousscaled_train_featuresetscaled_test_features. - Tracez un histogramme de la moyenne mobile RSI sur 14 jours (indexée à
[:, 2]) à partir detrain_featuresnon mises à l'échelle sur le premier sous-graphe (ax[0]). - Tracez un histogramme de la moyenne mobile RSI standardisée sur le second sous-graphe (
ax[1]).
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
from sklearn.preprocessing import scale
# Remove unimportant features (weekdays)
train_features = train_features.iloc[:, :-4]
test_features = test_features.____
# Standardize the train and test features
scaled_train_features = scale(train_features)
scaled_test_features = ____
# Plot histograms of the 14-day SMA RSI before and after scaling
f, ax = plt.subplots(nrows=2, ncols=1)
train_features.iloc[:, 2].hist(ax=____)
ax[1].hist(scaled_train_features[:, 2])
plt.show()