Pythonで決定木を使ったリグレッサー(回帰モデル)を実装する方法
決定木(ディシジョンツリー)は、ランダムフォレストアルゴリズムの基本的な構成要素となる仕組みです。機械学習において最も広く使われているアルゴリズムの一つであり、主に分類問題に活用されています。決定木による判断結果は「なぜその予測が行われたのか」を説明できる点が大きな特徴で、処理の入出力がユーザーにとって明確になります。また、決定木はCART(Classification And Regression Trees:分類回帰木)とも呼ばれ、データ構造やアルゴリズムで学ぶ二分木として視覚的に表現できます。
木の中の各ノードは単一の入力変数を表し、葉ノード(終端ノードとも呼ばれます)には出力変数が格納されます。この葉ノードが予測を行う際の拠点となります。決定木を構築する際の基本的な考え方は、与えられたデータ空間を複数の領域に分割していくことです。すべての値を評価し、コストを最小限に抑えながら最良の予測値を得られるよう、さまざまな分割パターンが試行されます。これらの値は貪欲法(グリーディ法)によって選択されます。
ノードの分割は、木が最大深度に達するまで繰り返されます。決定木の狙いは、特定の特徴量の値に基づいて入力データセットをより小さなデータセットへと分割し、すべての目的変数が単一のカテゴリに収まるまで処理を進めることにあります。この分割は、各ステップで最大の情報利得(情報ゲイン)が得られるよう設計されています。
すべての決定木はルートノードから始まり、最初の分割はこの場所で行われます。ノードを適切に定義するためには、効率的な手法を考案する必要があります。
そこで登場するのがジニ係数です。ジニは不平等性を測定するための最も一般的な指標の一つとされており、ここでの不平等性とは、ノード内の各サブセットがどのターゲットクラス(出力)に属しうるかを指します。
scikit-learnでDecisionTreeRegressorを使用する際の基本構文は以下の通りです。
class sklearn.tree.DecisionTreeRegressor (*, criterion='squared_error', ...)
※ 古いバージョンのscikit-learnではデフォルトの基準が「mse」(平均二乗誤差)でしたが、バージョン1.0以降では「squared_error」に変更されている点に注意してください。
実装例
それでは、DecisionTreeRegressorの具体的な使い方を見ていきましょう。
from sklearn import tree
my_data = [[1, 1], [5, 5], [2, 3], [7, 11]]
target_vals = [0.1, 1.5, 0.75, 1.73]
clf = tree.DecisionTreeRegressor()
print("The decision tree regressor has been called")
DTreg = clf.fit(my_data, target_vals)
print("Data has been fit")
pred_val = DTreg.predict([[4, 7]])
print("The predicted data is ")
print(pred_val)出力結果
The decision tree regressor has been called Data has been fit The predicted data is [1.5]
コードの解説
- まず、必要なパッケージ(sklearnのtreeモジュール)を環境にインポートします。
- 特徴ベクトル(my_data)とターゲット値(target_vals)を定義します。
DecisionTreeRegressorのインスタンスを生成し、fitメソッドでデータをモデルに適合させます。predict関数を使って、新しい特徴量に対する予測値を算出します。- 最後に、予測結果がコンソールに出力されます。
この例では、入力値 [4, 7] に対して予測値 [1.5] が返されています。決定木リグレッサーは学習データの分割構造に基づいて予測を行うため、少量のデータでも直感的かつ高速に動作するのが魅力です。
-
PythonのBokehで正弦波を生成・可視化する方法を解説
Bokehは、Pythonでデータ可視化を行うためのオープンソースライブラリです。HTMLとJavaScriptを使ってグラフを描画する仕組みを持っており、Webベースのダッシュボードを構築する際に特に力を発揮します。 データの可視化は分析において重要なステップです。数値を一つひとつ確認したり複雑な計算を実行したりしなくても、データ全体の傾向や特徴を直感的に把握できるようになるためです。 BokehはNumPyやPandasをはじめとする他のPythonパッケージとも容易に連携できます。インタラクティブなグラフやダッシュボードの作成に活用でき、定量的な洞察を読者や聴衆へ効果的に伝える助けとな
-
PythonのMatplotlibでヒストグラムを作成する方法をわかりやすく解説
Matplotlibは、データ可視化のために広く使われている人気のPythonライブラリです。データの可視化は非常に重要なステップです。数値を一つずつ確認したり複雑な計算を行ったりしなくても、データ全体の傾向や特徴を直感的に把握できるようになるからです。また、定量的な洞察を効果的に伝える手段としても優れています。MatplotlibとはMatplotlibは、データをもとに2次元のプロット(グラフ)を作成するためのライブラリです。オブジェクト指向のAPIを備えており、作成したグラフをPythonアプリケーションに組み込むことも簡単に行えます。IPythonシェル、Jupyter Noteboo