Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの決定木を使った分類器の構築方法を徹底解説

決定木とは

決定木(Decision Tree)は、ランダムフォレストアルゴリズムの基本的な構成要素であり、機械学習において最も人気のあるアルゴリズムの一つです。主に分類問題に使用され、その仕組みが直感的に理解しやすいことから広く活用されています。

決定木が出力する判断結果は、「なぜその予測が行われたのか」を説明する材料になります。つまり、処理の入出力がユーザーにとって明確であるという点が大きな魅力です。また、決定木はバギング(bagging)、ランダムフォレスト、勾配ブースティングといったアンサンブル学習手法の基盤でもあります。

決定木は「CART(Classification And Regression Trees:分類と回帰の木)」とも呼ばれ、データ構造とアルゴリズムで学ぶ二分木として視覚化することができます。

決定木の仕組み

木の中のすべてのノードは1つの入力変数を表し、葉ノード(終端ノードとも呼ばれます)には出力変数が含まれます。この葉ノードが予測を行う際に使用されます。

決定木を作成する際の基本的な考え方は、与えられたデータ空間を複数のセクションに分割することです。すべての値を評価し、さまざまな分割パターンを試すことで、コストを最小限に抑えつつ最良の予測値を得られるようにします。これらの値は貪欲法(greedy法)によって選択されます。

ノードの分割は、木の最大深度に達するまで続けられます。決定木を使用する目的は、特定の特徴量の値に基づいて入力データセットをより小さなデータセットへと分割し、最終的にすべてのターゲット変数が単一のカテゴリに属するようにすることです。この分割は、各ステップで最大の情報利得(Information Gain)が得られるように行われます。

ジニ係数(Gini)による分割の評価

すべての決定木はルート(根)から始まり、ここで最初の分割が行われます。ノードを適切に定義するためには、効率的な評価基準が必要です。

そこで登場するのが「ジニ値」です。ジニは不平等性を測るための最も一般的な指標の一つとされています。ここでの不平等性とは、ノード内の各サブセットがどのターゲットクラス(出力)に属しうるかを指します。

したがって、ジニ値は分割のたびに計算されます。このジニ値(不平等性の値)に基づいて、情報利得が定義されます。

DecisionTreeClassifierの使い方

scikit-learnのDecisionTreeClassifierは、多クラス分類を実行するために使用されます。構文は以下の通りです。

class sklearn.tree.DecisionTreeClassifier(*, criterion='gini',…)

実装例

from sklearn import tree
from sklearn.model_selection import train_test_split
my_data = [[16,19],[17,32],[13,3],[14,5],[141,28],[13,34],[186,2],[126,25],[176,28],
[131,32],[166,6],[128,32],[79,110],[12,38],[19,91],[71,136],[116,25],[17,200], [15,25], [14,32],[13,35]]
target_vals =['Man','Woman','Man','Woman',
'Woman','Man','Woman','Woman',
'Woman','Woman','Woman','Man','Man',
'Man','Woman', 'Woman', 'Woman',
'Woman','Man','Woman','Woman']
data_feature_names = ['Feature_1','Feature_2']
X_train, X_test, y_train, y_test = train_test_split(my_data, target_vals, test_size = 0.2, random_state = 1)
clf = tree.DecisionTreeClassifier()
print("The decision tree classifier is being called")
DTclf = clf.fit(my_data,target_vals)
prediction = DTclf.predict([[135,29]])
print("The predicted value is ")
print(prediction)

出力結果

The decision tree classifier is being called
The predicted value is
['Woman']

コードの解説

  • 必要なパッケージを環境にインポートします。
  • このコードは、特徴量の値に基づいてターゲット値を分類するために使用されます。
  • 特徴ベクトルとターゲット値を定義します。
  • 「train_test_split」関数を使用して、データを訓練用とテスト用に分割します。
  • DecisionTreeClassifierを呼び出し、データをモデルに適合させます。
  • 「predict」関数を使用して、特徴量に対する予測値を算出します。
  • 結果がコンソールに出力されます。
  1. PythonのBokehで正弦波を生成・可視化する方法を解説

    Bokehは、Pythonでデータ可視化を行うためのオープンソースライブラリです。HTMLとJavaScriptを使ってグラフを描画する仕組みを持っており、Webベースのダッシュボードを構築する際に特に力を発揮します。 データの可視化は分析において重要なステップです。数値を一つひとつ確認したり複雑な計算を実行したりしなくても、データ全体の傾向や特徴を直感的に把握できるようになるためです。 BokehはNumPyやPandasをはじめとする他のPythonパッケージとも容易に連携できます。インタラクティブなグラフやダッシュボードの作成に活用でき、定量的な洞察を読者や聴衆へ効果的に伝える助けとな

  2. PythonのMatplotlibでヒストグラムを作成する方法をわかりやすく解説

    Matplotlibは、データ可視化のために広く使われている人気のPythonライブラリです。データの可視化は非常に重要なステップです。数値を一つずつ確認したり複雑な計算を行ったりしなくても、データ全体の傾向や特徴を直感的に把握できるようになるからです。また、定量的な洞察を効果的に伝える手段としても優れています。MatplotlibとはMatplotlibは、データをもとに2次元のプロット(グラフ)を作成するためのライブラリです。オブジェクト指向のAPIを備えており、作成したグラフをPythonアプリケーションに組み込むことも簡単に行えます。IPythonシェル、Jupyter Noteboo