Pythonでランダムフォレストを扱う方法を現役エンジニアが解説【初心者向け】

初心者向けにPythonでランダムフォレストを扱う方法について現役エンジニアが解説しています。ランダムフォレストは、確率を複数の説明変数の組み合わせで算出する機械学習手法です。pythonのライブラリであるscikit-learnを使うと簡単にランダムフォレストを行うことができます。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事が4,000以上あります。現役エンジニアの方はこちらをご覧ください。

Pythonでランダムフォレストを扱う方法について解説します。

そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPython講座の内容をもとに紹介しています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Pythonでランダムフォレストを扱う方法について詳しく説明していくね!

大石ゆかり

お願いします!

この記事では、ランダムフォレストと呼ばれる教師あり機械学習手法について解説していきます。機械学習に便利なライブラリであるscikit-learnを使って実際にコードを表示するのでより深く理解できるでしょう。

 

ランダムフォレストとは?

ランダムフォレストというのは、決定木をたくさん使った機械学習手法の一つです。

そのため、ランダムフォレストを理解する場合、決定木についての理解を深めましょう。

決定木は、簡単に言えば、Yes、Noでデータを分けていくことで予測を行う手法です。

例を見てみましょう。

機械学習のランダムフォレストで使用する決定木のイメージ画像

図に示したのは、「海水浴に行くべきか?」という問題です。

この図では、「気温は25℃以上か?」という質問から始まります。

Noの場合は気温が低すぎるので、「海水浴に行かない」という答えを出し、Yesの場合は次の「波は低いか?」という質問に移ります。

このように順々に質問に答えていくことで、最終的に「海水浴に行くべきか?」という問題に対する答えを出すのが決定木です。

 

ランダムフォレストはこの決定木を複数用意して多数決で答えを出す機械学習のアルゴリズムのことです。

複数の決定木を使って答えを下すことから、ランダムフォレストはアンサンブル学習という手法の一つでもあります。

アンサンブル学習は、「三人寄れば文殊の知恵」ということわざのように、一人の人間が判断を下すよりも複数人の多数決で判断を下したほうが良いという考え方に基づいたアルゴリズムです。

これ以上の詳細な説明は省きます。ランダムフォレストは、複数の学習機を使って最終的な判断を下すものであるということがポイントなので覚えておくと良いでしょう。

 

ランダムフォレストの使い方

Scikit-learnと呼ばれるPythonのライブラリを使うことでランダムフォレストを簡単に使用することが可能です。

では、scikit-learnをインストールしてください。

Windowsの場合はコマンドプロンプトで、Macの場合はターミナルを開き、anacondaを使っている人は、

conda install scikit-learn

そうでない人は、

pip install scikit-learn

をコマンドプロンプトで実行することでscikit-learnをインストールし使用してみましょう。

あとは、学習に使いたいデータを用意することでランダムフォレストを使うことができます。

[PR] Pythonで挫折しない学習方法を動画で公開中

ランダムフォレストによるクラス分類に挑戦してみよう

ここでは、実際にランダムフォレストを使って分類問題にチャレンジしてみてください。

コードの実行はJupyter ノートブックを使って行いましょう。

まずは、ランダムフォレストとpandas、データセット分割のための関数をインポートします。

from sklearn.ensemble import RandomForestClassifier
import pandas as pd
from sklearn.model_selection import train_test_split

学習に使うデータセットは、ワインのデータです。

df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv',sep=";",encoding="utf-8")

ダウンロードできたか確認してみましょう。

df.head()

データフレーム型の変数のhead()メソッドを実行すると最初の5行が表示されます。

qualityがワインの等級で、これを予測するのが今回の目標です。

ランダムフォレストのクラス分類に使用するサンプルデータの画像

次に、データセットを学習に使う特徴量と予測するラベルに分けて、訓練用とテスト用に7:3の割合で分割します。

train_x = df.drop(['quality'], axis=1)
train_y = df['quality']
(train_x, test_x ,train_y, test_y) = train_test_split(train_x, train_y, test_size = 0.3)

そして、ランダムフォレストを実行しましょう。

clfはclassifierの略です。

clf = RandomForestClassifier(max_depth=30, n_estimators=30, random_state=42)
clf.fit(train_x, train_y)#訓練用データで学習

学習モデルのfit()メソッドを使用し、学習することができます。

これで学習はできたので、モデルの性能を検証してみましょう。

テスト用データのワインの等級を予測し、答えと比較することで正解率を計算します。

y_pred = clf.predict(test_x)#テスト用データの予測
accuracy = accuracy_score(test_y, y_pred)
print('Accuracy: {}'.format(accuracy))

これを実行すると、

Accuracy: 0.6659863945578232

のように、正解率が表示されます。

66%程度なので、もう少し工夫が必要なことがわかるでしょう。

実際の機械学習では、データに処理を施したり、学習モデルのパラメータを調節することで精度を上げていきます。

 

この記事ではランダムフォレストについて解説し、実際にクラス分類問題に適用しました。

ランダムフォレストは比較的使いやすいアルゴリズムであるため、他の問題にも使用してみてください。

監修してくれたメンター

小倉翔悟(おぐらしょうご)

AIプログラミングを使って開発を行う大学3年生。

プログラミング歴は約3年でPythonは割と得意。好きな物理理論は一般相対性理論で動物も好き。

 

大石ゆかり

Pythonでランダムフォレストを扱う方法がよくわかって良かったです!

田島悠介

ゆかりちゃん、これからも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間でPythonを使った人工知能(AI)や機械学習の基礎を習得できるオンラインブートキャンプPython講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。