2020年6月12日データの前処理という重要な工程を勉強しました。何事にも準備は大切だよね。今まで、データの処理を行わずに機械学習の訓練を行っていました。機械学習の精度を向上させるためには、アルゴリズムのチューニングより、訓練するためのデータを整えることが重要だということを学びました。今回は、前処理の一つである、「標準化」というものを試してみました。機械学習アルゴリズムに与えるデータは、整えてあげることでより精度を向上させる可能性があります。このように、機械学習アルゴリズムにデータを入れる前にあらかじめデータを整えたりすることを「前処理」といいます。その中で、「標準化」と呼ばれる手法はかなり一般的に行われている前処理の手法とのことです。標準化は、データの平均を「0」にして、標準偏差を「1」にそろえる操作です。特徴量のデータの中心が0になるってことだね。データを確認してみるscikit-learnの乳がんデータを見てみます。stratify=y)print文でDESCRを表示すると、特徴量のデータの最大値、最小値が確認できます。(表示は省略しています。0.201これを見ると、4番目の「area」は143~2501という範囲の値に対して、5番目の「smoothness」は、0.019~0.345というとても小さな数値になっています。この特徴量のスケール感の違いを整えるのが、標準化です。乳がんデータの標準化をして、サポートベクターマシンで分類してみます。標準化プログラムまずは、scikit-learnの標準化モジュール、「StandardScaler」をimportします。(fit)」→「変換(transform)」という順番で使用します。fitでデータの平均や標準偏差を計算します。transformでスケールの変換を実行する、という流れです。ちなみに、今回は「fit_transform」という訓練と変換を一括にやってくれる機能を利用しています。scaler.transform(X_test)ここで「fit_transform」したStandardScalerは、訓練データである「X_train」のデータのスケール感を訓練した状態です。テストデータである「X_test」もこのscalerでtransformすることで同じ変換処理が適用されます。変換したデータの平均と標準偏差を確認してみます。print("標準化後の訓練データの特徴量毎の平均")print(X_train_scaled.mean(axis=0))print("標準化後の訓練データの標準偏差")print(X_train_scaled.std(axis=0))print("標準化後のテストデータの特徴量毎の平均")print(X_test_scaled.mean(axis=0))print("標準化後のテストデータの標準偏差")print(X_test_scaled.std(axis=0))結果を表示させるとこうなりました。0.96157146]標準化した訓練データのそれぞれの特徴量の平均値が配列で並んでいます。それぞれの特徴量のデータの平均が「e-15」などと、かなり0に近い数値になっています。標準偏差は、すべての特徴量で「1」になっています。次の、標準化後のテストデータは訓練データのscalerを基準に標準化したので、訓練データほど平均は0に近くないですが、かなりデータの中心が0に近づいていることがわかります。標準偏差も1に近い値になっています。最初、完全にぴったり0にならなければいけないのかと考えていましたが、そうではなく、「特徴量同士の値のスケール感を近づけてあげる」ことが重要であることを勉強しました。今回は、「rbfカーネル」(デフォルト設定)のサポートベクターマシンを利用します。サポートベクターマシンについてはこちらの記事もご参考ください。サポートベクターマシンのカーネルによる違いで境界線がどのように変化するかを見てみるよ。da...まずは、標準化なしのデータです。.format(cls.score(X_test,y_test)))訓練データ:0.9155テストデータ:0.9371訓練データよりテストデータへの正解率が高いので、過学習も起きていなく、いい感じです。標準化したデータです。.format(cls2.score(X_test_scaled,y_test)))訓練データ:0.9859テストデータ:0.9860標準化するだけで、すごく精度が向上しました。標準化が一般的に行われる前処理であることを確信しました。pythonよかったらシェアしてね!URLをコピーしました!URLをコピーしました!パンダの中のパンダサウンドクリエータ、プログラマひたすら脳内の思考と雑念を記事にしている気が・・・ご容赦ください!音楽、プログラム、自分の作品となる何かが作れる日を目指して邁進中です。