先日、AIベンダーに話を聞く機会があり、
「このシステムはなにを使っているんですか?」
と聞いたら、
「if文を組み合わせたランダムフォレストです」
とのことだった。
いまや、AIといえば、
ディープラーニングのこと。
それを使っていないのだ。
で、家に戻って、機械学習の必読本と言われる
『Pythonではじめる機械学習』を開いたら、
「アンサンブル学習のバギングをベースに、少しずつ異なる決定木をたくさん集めたもの」
という説明があり、頭を抱えた。
なに言ってるか全然わからん。
「回帰でも分類でも、現在最も広く使われている機械学習手法である」
との説明が、さらに追い打ちをかけてくる。
う〜む。6カ月間、AIスクールに通って、自分はなにを勉強してきたんだ!
しかし、落ち込んでばかりいられない。
久しぶりにGoogle Colabを立ち上げ、
決定木とランダムフォレストを実装してみた。
(スクールテキストを参考にしています)
データは、
scikit-learnのToy datasetsのひとつ、
load_iris()を使う。
まずは、決定木を図示してみる。
「決定木ではYes/Noで答えられる質問で構成された階層的な木構造を学習する」(同書)
ただ、これだけだと、当然訓練データに過学習してしまう(というか100%の精度だ)。
なので、この決定木をたくさん集め、
その答えを平均することで(=アンサンブル学習)、
これを解決しようというのが、ランダムフォレストなのだ。
2つのパラメータ、
n_estimators(決定木の数。今回は3つ)と
max_features(個々の決定木の乱数性を決定する特徴量の個数。デフォルト値を使用)
の調整で、モデルの良し悪しが決まるのだが、
それほどチューニングしなくていいのも人気が高い理由のひとつだそうだ。
でも、どういう風に使えば、
さっきのシステムが作れるんだろう?
その答えは、
自分で見つけたい。