データの標準化
K最近傍法(KNN)やニューラルネットワークなど、スケーリングされたデータで性能が向上するモデルがあります。そこで、データを標準化しましょう。
また、特徴量の重要度に基づいて、重要度の低い変数(曜日)を .iloc[] でインデックス指定し、特徴量の DataFrame から除外します。KNN は距離を使って予測に使う類似点を探すため、値の大きな特徴量が小さな特徴量を圧倒してしまいます。スケーリングによってその問題を解消できます。
sklearn の scale() を使うとデータを標準化できます。これは平均を 0、標準偏差を 1 に変換する処理です。本来であれば訓練データに StandardScaler の fit_transform() を、テストデータに fit() を使うのが理想的ですが、ここではコードを 15 行以内に収める必要があるため、scale() を使用します。
データを標準化したら、ヒストグラムを描画して結果を確認しましょう。
この演習はコースの一部です
Python による金融のための Machine Learning
演習の手順
.ilocを使って、訓練・テストの特徴量から曜日の特徴量を除外してください(曜日は末尾の 4 特徴量です)。- sklearn の
scale()を使ってtrain_featuresとtest_featuresを標準化し、結果をそれぞれscaled_train_featuresとscaled_test_featuresに格納してください。 - スケーリング前の
train_featuresから 14 日間 RSI 移動平均([:, 2]でインデックス指定)のヒストグラムを、1 つ目のサブプロット(ax[0])に描画してください。 - 標準化後の 14 日間 RSI 移動平均のヒストグラムを、2 つ目のサブプロット(
ax[1])に描画してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
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()