Ebook

第1章

データの調査


このebookでは、MATLABによる機械学習の前処理について、ご紹介いたします。

機械学習を使ったことがある方であれば、前処理が必要であることはご存知でしょう。また、手動で行うことが面倒であることもご存知のことでしょう。前処理のスクリプトをこの機械学習のフレームワーク内でアップデートできるようにしておけば、前処理の結果、学習モデルの精度がどう変化したかと確認できるでしょう。

小学生の算数で習う四則演算だと、左から順に計算するなど明確なルールをもっています。リンゴや住宅ローンといったどのような計算式であっても、2 * (6+4)2 = 200等の計算式の答えは不変です。

データの前処理は、それほど単純ではありません。どの順でタスクを処理するのか決まった手順もなければ、すべて変数が結果に少なからず影響を与えうるのです。

データの前処理を行う前に、どのような前処理タスクが必要か確認します。データの照会、可視化、およびその他の調査を行うことで、どこに注力すべきか、また繰り返し作業をすべきところはどこか知ることができます。このプロセスを、調べるべき内容がなくなるまで繰り返します。

Workflow diagram

このワークフローの繰り返しを記録するには、スクリプトで前処理操作を記録しておくと便利です。前処理の順序によって結果が変わりうるので、その順序を記録しておくことは、調整を容易にします。

それでは、MATLABによる前処理スクリプトの例を見てみましょう。

section

前処理が必要なデータの生成

% ノイズの入った正弦波を作成した後、
% いくつかの値を削除して欠損値を作成します。

rng default;
t = 0:0.01:5;
y = sin(t) + randn(size(t));
missingIdx = randi([1 length(y)],100,1);
y(missingIdx) = NaN;

% データをプロットします。
% 欠損値を表す隙間がプロットに表示されます。

figure;
plot(t,y)
Graph data with gaps
section

欠損値の前処理

% 線形補間を行うfillmissing
% 関数を使用して、欠損値を埋めます。

y_filled = fillmissing(y, "linear");

% 補完されたデータをプロットに追加します。
% これで欠損値が埋まったことがわかります。

hold on;
plot(t, y_filled, ':r')
Graph data with filled gaps
section

ライブエディター タスクによる欠損データの削除

あるいは、ライブエディターのタスクを使用して、この前処理を実行することもできます。ライブエディターのタスクは、MATLABツールバーのライブエディター > タスクのドロップダウンで見つけることができます。“欠損データの削除”では、クリーンアップされたデータと埋められた欠損値を描画します。その他にも、データをクリーンアップする様々な方法も用意されています。

section

データの平滑化

次に、”データの平滑化”を使用してノイズを滑らかにします。幅1の移動ウィンドウでガウスフィルタを適用します。

このスクリプトでは、平滑化を適用する前に欠落したデータをクリーンアップしています。しかし、これが必ずしも最良の選択とは限りません。 前処理の全順番が記録されているために、前処理の順序が結果に与える影響を確認することが容易ですので、遡って確認してみましょう。