教育

3分でわからない点を解決!機械学習で有名な「DBSCAN」とは

DBSCANのイメージ

機械学習に関連する用語に「DBSCAN」というものがあります。機械学習では有名なアルゴリズムのひとつとして挙げられるのですが、耳にしたことがないという人もいますよね。

DBSCANとは、K-meansクラスタリングや、階層クラスタリングなどと同様にクラスタリングのアルゴリズムの一種。そしてクラスタリングといえば、大量のデータから類似性を見て自動的に分類する、一般的には機械学習の教師なし学習における手法のことです。

ですからこの「DBSCAN」をほかのクラスタリングのアルゴリズムと比べてどんな特徴を持っているのでしょうか。

そこで今回は、3分で解決!「DBSCAN」のあれこれについて詳しく解説していきます。

DBSCANとは何か

DBSCANとは何か

DBSCANがクラスタリングのアルゴリズムの一種であるということは、冒頭でご紹介しました。

では一体DBSCANはどのような特徴を持っていて、どのようにして使われるのでしょう。ここではまず、DBSCANとはいったい何者なのか?についてご説明することにします。

DBSCANは、Density-based spatial clustering of applications with noiseの略称。直訳すると「ノイズを伴うアプリケーションの密度ベースの空間クラスタリング」となります。

なんだかわかったようなわからないような気がしますよね。(ちなみに、データベースともスキャンとも一切関係はありません。)

DBSCANは、1996年にMartin Ester, Hans-Peter Kriegel, Jorg Sander, Xiaowei Xuによって提唱された密度に基づいたクラスタリングのアルゴリズムです。
実際には、ある半径の内側に点がいくつあるか(密度)によってその領域をクラスタとして判断します。(ここでいう点とは、大量にあるデータのひとつひとつです。)その領域の周辺の密度があるしきい値を超えている限りは、クラスタを成長させ続け、一方、ある半径内の近くに点がない場合、その点はノイズとして捉えます。互いに密に詰まっている点は同じグループにクラスタリングし、密度の低い領域にある点は外れ値(ノイズ)として捉えるということですよね。

つまりDBSCANとは、簡単に言えば「≪データの密度≫を基準として、クラスタリングをするアルゴリズム」ということができます。

これでDBSCANについては何となく頭の中でイメージが湧いてきたのではないでしょうか。

DBSCANをPythonで実装する方法

DBSCANをPythonで実装する方法

ではDBSCANは、実際にはどのようにして使うことができるのでしょうか。

ここで登場するのはやはり、機械学習に最適なプログラミング言語「Python」。「Python」で実装することで簡単に動かすことができます。

そこでここでは、DBSCANをPythonで実装する方法についてわかりやすくご説明していくことにしましょう。

データセットの作成

Pythonで作られたscikit-learnというパッケージにあるmake blobs関数を使ってデータセットを作っていきます。(scikit-learnを使用するにはインストールが必要です。)

DBSCANの重要なパラメータ

DBSCANにはいくつかのパラメータがあるのですが、中でも特に重要なパラメータが2つあります。それが、epsパラメータ、min_pointsパラメータです。

DBSCANのアルゴリズムでは、すべてのデータはコア点、到達可能点、外れ値のいずれかに分類されます。この分類を決定するのがmin_pointsパラメータ。一方、epsパラメータは、半径を決めるパラメータです。

簡単に言うと、epsパラメータで決められた半径内にmin_pointsパラメータの値以上の点が集まっていれば、それはコア点であると判断します。コア点ではないデータでも、近くにあるコア点からeps半径の中に入っているものは到達可能点であると判断。
コア点は、そこから到達可能な点すべてでクラスターを形成します。一方、どのコア点からも到達可能ではない点ももちろん考えられますよね。これは、外れ値(ノイズ)と判断するわけです。

DBSCANの実装

scikit-learnを使って実装していきます。

実際には、すでに用意されているクラスを呼び出し、自らが用意したデータにあてはめていくだけ。あとは、先ほどのパラメータを微調整しながら最適なパラメータを決めていくことになります。

DBSCANを機械学習で使うことのメリット

DBSCANを機械学習で使うことのメリット

それでは、DBSCANを機械学習で使うとどんないいことがあるのでしょうか。

クラスタ数の設定が不要

 K-meansクラスタリングなど他のクラスタリングのアルゴリズムでは、クラスタ数をあらかじめ設定する必要がありましたが、DBSCANでは、クラスタ数を設定する必要はありません。

ノイズの除去

先ほども述べたように、どのコア点からも到達不可能な点を、外れ値(ノイズ)として判別することができましたよね。このようにDBSCANはノイズの除去ができるのです。

outlierの影響を受けにくい

 DBSCANでは、クラスターが再帰的に決定されていくため、外れ値(outlier)の影響を受けにくいという特徴もあります。

DBSCANを機械学習で使うときのデメリット

DBSCANを機械学習で使うときのデメリット

そんなDBSCANですが、もちろんいいことずくめというわけでもなさそうです。

今度は、このDBSCANのデメリットとはいったい何なのかお話しましょう。

計算コストの高さ

ひとつは計算コストの高さです。つまり、潤沢なコンピュータリソースを必要とし、計算にもそれなりの時間がかかるということ。リアルタイム性が求められるような場合には不向きといえるでしょう。

クラスタ間で密度が異なる場合や、データが密集している場合に不向き

密度をしきい値としてクラスタリングしているがゆえに、クラスタ間で密度が異なるようなデータに対しては、きちんとクラスタリングできない場合があります。また、データが密集していると、適切なパラメータを決めるのが難しいというデメリットもあります。

DBSCANについてもっと知りたくなった時に読む、おすすめの論文

DBSCANについてもっと知りたくなった時に読む、おすすめの論文

ここまで、DBSCANの概念やメリット、デメリットなどについてご紹介してきましたDBSCANについて、少しは理解が得られたのではないでしょうか。しかしこのDBSCAN、当然のことながらもっともっと奥の深い技術なのです。

そこで最後に、DBSCANについてもっと知りたい人のためにおすすめの論文をご紹介しましょう。

DBSCAN のパラメータ設定の自動化について

この論文は、前述したDBSCANにおける重要なパラメータであったmin_pointsとepsという二つのパラメータの設定を自動化しようというものです。

パラメータを手動で設定するということは、すなわち分析する人によってクラスタリング結果は変わってしまうということになりますよね。しかしこの論文は分析者に依存することなく、クラスタリング結果を出すことができる手法ということで、非常に興味深いものになっています。

DBSCAN のパラメータ設定の自動化について

 

DBSCANのイメージ

今回は、クラスタリングのアルゴリズムのひとつであるDBSCANの基礎について詳しくご説明してきました。簡単におさらいしてみましょう。

DBSCANは密度に基づいて、クラスタリングを行う手法のことでしたよね。eps(半径)とmin_pointsという二つの重要なパラメータを設定することで、すべてのデータを、コア点、到達可能点、外れ値(ノイズ)に分類することができました。

メリットとしては、密度に基づいたクラスタリングを行うので、あらかじめクラスタ数を設定必要がないこと、ノイズが除去できることなどが挙げられました。一方で、計算コストが高いという点がデメリットでもあります。

このように、DBSCANについてお話しましたが、さらに詳しい内容が気になったという方は、論文や書籍などで詳しく学習してみて学びを進めてみましょう。そうして機械学習について知識を深めていけると良いですよね。

トップへ戻る
タイトルとURLをコピーしました