見出し画像

データからのノイズ除去

はじめに

すごく作業密度が濃くて疲れているので、note 用に新しく文書を書く元気がありません…というわけで、よそで見た感じの文章になるかもしれませんが、生暖かく見守っていただけますと幸いです。

というわけで本文です

先日、Machine Learning Data Checker をリリースしましたが、実際の性能についての紹介が十分に出来ていませんでした。
今回は、実例を踏まえてこのソフトウェアの特徴について説明したいと思います。

今回の説明では、MNIST データセットをサンプルとして提示します。ご存じの方も多いかと思いますが、MNIST の内部には多数の品質の良くないデータが含まれています。品質の悪いデータをどう扱うべきかという問題については議論する必要がありますが、私は次のような意見です。

品質の悪いデータを次の2種類に分けるるべきです。

  1. データが存在することで識別器の性能に悪影響を与えるもの

  2. データが存在していても識別器の性能に影響を与えないもの

  3. のデータはできるだけ検出して対策を打つべきです。代表的な例は、除去する・誤ったラベルを正しく訂正・問題の原因となる説明変数を見直すといったものです。

但し、これを実行するためには一つ大きなハードルを越える必要があります。それは、品質の悪いデータを特定するということです。機械学習のデータ数は極めて膨大であり、これを人間がが一つずつ識別していくことは現実的ではありません。

本ソフトウェアはこの問題を解決します。

本ソフトウェアでは、品質の悪いデータを3種類のいずれかであると定義しています。

まず、小さいクラスタを作るケースを考えます。この場合、クラスタには識別問題のラベルが付与できると考えます。これは、MNIST であれば 0~9 のラベルです。
そのように考えたとき、次の問題が発生します。

  1. 近しいデータのクラスタ中に存在する少数のクラスタに所属するべきではないデータがある。

  2. 近しいデータのクラスタ中のデータがばらついており、データからクラスタにラベルをつけることが難しいデータがある。

本アプリケーションでは、1 を "noise1", 2 を "confuse" と呼んでいます。

また、クラスタサイズが大きいケースを考えます。この場合、クラスタ中のデータ比率は本来の比率に近くなると考えます。MNIST ならば 0~9 のラベルが均等にあるべきであると考えます。
そのように考えたとき、次の問題が発生します。

  1. 大きめのクラスタ内で期待するデータ数に比べて明らかにデータ数が少ないデータがある。

本アプリケーションでは、3 を "noise2" と呼んでいます。

実際には、クラスタの要素数・判定係数などを試行錯誤で決定する必要がありますが、当面はデフォルトのままでも問題ありません。

実際に MNIST で実行したときの結果を以下に示します。クラスタ単位でのデータの抜粋となります。
実行条件は、クラスタサイズ = 10要素、noise1 判定比率 0.2, noise3 判定比率 0.2, confuse 判定比率 0.8 です。

train データ 60,000 に対して評価を行いました。これを7097クラスタに分類してデータの評価を行っています。

noise1 に相当するクラスタ : 検出できませんでした。条件が厳しいことが原因と考えています。
noise2 に相当するクラスタ : 1912クラスタにノイズが含まれており、その中で、2984件のノイズデータを検出。
confuse に相当するクラスタ : 1592クラスタ。16589件の紛らわしいデータを検出。

fig1, fig2 に noise2 のサンプル、fig3, fig4 に confuse のサンプルを示します。fig1,2 では、noise と検出したものは色がついています。


fig 1
fig 2
fig 3
fig 4

今回はわかりやすく MNIST で評価しましたが、センサデータなどでも同様の作業は可能です。他にも色々な用途がありますので、それらについても順次説明していきます。

なお、今回の結果に必要な出力は初期リリースには含まれていませんでした。現在修正版を Microsoft に提出していますので、明日(5/16)には利用可能になる見込みです。

引き続き、テストデータと評価データを比べて外挿となるデータを抽出する機能の実装に取りかかります。こちらも近いうちにリリースできるかと思いますので、少々お待ちください。

この記事が気に入ったらサポートをしてみませんか?