読者です 読者をやめる 読者になる 読者になる

drilldripper’s blog

機械学習とソフトウェア開発を頑張ってます

SVMとランダムフォレストのどちらの手法を使えばよいか?

機械学習

分類や回帰の問題を扱う場合、選択する手法としてサポートベクターマシン(SVM)とランダムフォレストが候補に上がってくると思います。

しかし、どちらの手法を使うべきなのでしょうか?どのような問題に対しても、一方の手法を使い続ければ良いのでしょうか?それとも問題によって使い分ける必要があるのでしょうか?

手法の手軽さ

Python機械学習プログラミングの著者であるSebastian Raschka氏は次のように述べています。

I would say that random forests are probably THE “worry-free” approach - if such a thing exists in ML: There are no real hyperparameters to tune (maybe except for the number of trees; typically, the more trees we have the better). On the contrary, there are a lot of knobs to be turned in SVMs: Choosing the “right” kernel, regularization penalties, the slack variable

- When Does Deep Learning Work Better Than SVMs or Random Forests?

意訳 :

ランダムフォレストは安心して使える機械学習のアプローチです。ハイパーパラメータ調整も必要ありません(木の数の指定は除きます)。対してSVMは"正しい"カーネル正則化ペナルティ、スラック変数などの調整が必要になります。

- ディープラーニングはどんなときにSVMやランダムフォレストより勝るか?

ランダムフォレストは調整する変数がSVMに比べて少ないため、とりあえず試してみるという使い方ができます。

また記事中では言及されていませんが、ランダムフォレストは事前に学習データの正規化や標準化を行う必要のない手法です。これも手軽さの一因となっていると思います。

手軽さという面ではランダムフォレストに軍配があがると思います。

多クラス分類

データを複数のクラスに分類したい場合は、どちらの手法を選ぶのが良いでしょうか?

これもSebastian Raschka氏が書いています。

there are multi-class SVMs, the typical implementation for mult-class classification is One-vs.-All; thus, we have to train an SVM for each class – in contrast, decision trees or random forests, which can handle multiple classes out of the box.

- When Does Deep Learning Work Better Than SVMs or Random Forests?

意訳:

マルチクラスSVMの典型的な実装は、一対他分類法です。したがってSVMは各クラスごとにトレーニングを行う必要があります。逆に決定木やランダムフォレストは手法をそのままマルチクラス分類に使うことができます。

- ディープラーニングはどんなときにSVMやランダムフォレストより勝るか?

SVMの一対他分類法とは、ある1つのクラスとその他のすべてのクラスでSVMを構築する方法で、これに対応する一対一分類法は2つのクラスを選び、それを分類するSVMを構築する方法です。以下の記事の説明がわかりやすいと思います。

SVMを使いこなす!チェックポイント8つ

Sebastian氏は典型的な実装法として一対他分類法が使われるとありますが、代表的なSVMライブラリであるlibsvmには一対一分類法が実装されています。

どちらの手法を用いるかによって計算量と分類精度が変わってきます。 一方ランダムフォレストは2クラス分類とマルチクラス分類を行うとき、何か特別な処理をする必要はありません。

学習データ数

用意した学習データの数によって手法を選択することもあると思います。現在QuoraのVPエンジニアリングで元機械学習研究者のXavier Amatriain氏は以下のように述べています。

Unfortunately, the major downside of SVMs is that they can be painfully inefficient to train. So, I would not recommend them for any problem where you have many training examples. I would actually go even further and say that I would not recommend SVMs for most “industry scale” applications. Anything beyond a toy/lab problem might be better approached with a different algorithm.

What are the advantages of different classification algorithms?

意訳:

SVMの欠点は学習が非常に非効率なことです。なのでデータのサンプル数が多い場合、どのような問題でもおすすめできません。もっと言えば工業規模(industry scale)で使うことは推奨できません。研究室レベルや単純化された問題では他のアルゴリズムよりうまく動作します。

分類アルゴリズムのそれぞれの利点はなんですか?

サンプルデータ数が十分に用意できる場合は、SVMではなくランダムフォレストを使うほうが良いと言えそうです。実際、Kinectの身体部位測定の判定にランダムフォレストベースのものが使われているようです。

www.microsoft.com

まとめ

これらの調査から、次のような方針が立てられると思います。

  • ランダムフォレストかSVMか迷ったらとりあえずランダムフォレストを使ってみる
    • ハイパーパラメータ調整が少なくて手軽
    • データ数が多くても効率的に学習できる
  • データ数が少ないときは、SVMを使うことを検討する

しかしながら、以上の方針は絶対ではありません。no free lunch定理が示しているとおり、すべてを上回る手法は存在しないからです。

no free lunch定理 - 機械学習の「朱鷺の杜Wiki」

身も蓋もないですが、以上の方針を頭に入れつつデータの特性を考えながら手法を選択することが一番大切になります。

参考