Main Content

分類学習器アプリを使用した決定木の学習

この例では、分類学習器を使用してさまざまな分類木を作成および比較する方法と、新しいデータについて予測を行うために学習済みのモデルをワークスペースにエクスポートする方法を示します。

データに対する応答を予測するように分類木を学習させることができます。応答を予測するには、ツリーのルート (開始) ノードから葉ノードの方向に意思決定を行います。葉ノードには応答が含まれます。

Statistics and Machine Learning Toolbox™ のツリーは二分木です。予測の各段階では、1 つの予測子 (変数) について値のチェックが行われます。たとえば、次の図は単純な分類木を示しています。

Decision tree with two branches

このツリーでは、2 つの予測子 x1x2 に基づいて分類を予測します。予測は最上位のノードから始まります。各決定では、予測子の値をチェックして、どの分岐に進むかを決定します。分岐が葉ノードに達すると、データは 0 または 1 のタイプに分類されます。

  1. MATLAB® で、fisheriris データ セットを読み込みます。このデータ セットの変数から、分類に使用する測定予測子 (特徴) のテーブルを作成します

    fishertable = readtable("fisheriris.csv");
  2. [アプリ] タブの [機械学習および深層学習] グループで [分類学習器] をクリックします。

  3. [学習] タブの [ファイル] セクションで、[新規セッション]、[ワークスペースから] をクリックします。

    Learn tab

  4. [ワークスペースからの新規セッション] ダイアログ ボックスで、[データ セット変数] のリストから table fishertable を選択します (必要な場合)。

    データ型に基づいて応答および予測子変数が選択されていることを確認します。花弁とがく片の長さおよび幅は予測子、種は分類対象の応答です。この例では、選択を変更しないでください。

    New Session from Workspace dialog box

  5. 既定の検証方式をそのまま使用して続行するため、[セッションの開始] をクリックします。既定の検証オプションは、過適合を防止する交差検証です。

    データの散布図が作成されます。

    Scatter plot of the Fisher iris data

  6. 散布図を使用して、どの変数が応答の予測に有用であるかを調べます。種と測定値の分布を可視化するため、プロットの右の [予測子] にある [X] および [Y] のリストで別の変数を選択します。種の色が最も明確に分離されるのはどの変数であるかを調べます。

    4 つの予測子すべてに関して setosa 種 (青い点) が他の 2 つの種から容易に分離されることを確認します。versicolor 種と virginica 種はどの予測子の測定値でも接近しており、特にがく片の長さと幅をプロットした場合は重なります。setosa は、他の 2 つの種よりも予測が容易です。

  7. 複雑な木、中程度の木、粗い木を同時に学習させます。複雑な木のモデルは [モデル] ペインに既に含まれています。中程度の木と粗い木のモデルをドラフト モデルのリストに追加します。[学習] タブの [モデル] セクションで矢印をクリックしてギャラリーを開きます。[決定木] グループで [中程度の木] をクリックします。[モデル] ペインにドラフトの中程度の木が作成されます。モデル ギャラリーを再度開き、[決定木] グループで [粗い木] をクリックします。[モデル] ペインにドラフトの粗い木が作成されます。

    [学習] セクションで、[すべてを学習] をクリックして [すべてを学習] を選択します。3 つの木のモデルの学習が行われます。

    メモ

    • Parallel Computing Toolbox™ がある場合は、[並列の使用] ボタンが既定でオンになります。[すべてを学習] をクリックして [すべてを学習] または [選択を学習] を選択すると、ワーカーの並列プールが開きます。この間、ソフトウェアの対話的な操作はできません。プールが開いた後、モデルの学習を並列で実行しながらアプリの操作を続けることができます。

    • Parallel Computing Toolbox がない場合は、[すべてを学習] メニューの [バックグラウンド学習を使用] チェック ボックスが既定でオンになります。オプションを選択してモデルに学習させると、バックグラウンド プールが開きます。プールが開いた後、モデルの学習をバックグラウンドで実行しながらアプリの操作を続けることができます。

    Validation confusion matrix for a coarse tree regression model. Blue values indicate correct classifications, and red values indicate incorrect classifications.

    メモ

    検証により、結果に無作為性が導入されます。実際のモデルの検証結果は、この例に示されている結果と異なる場合があります。

    [モデル] ペインに、各モデルの正しく予測された応答の割合を示す検証精度のスコアがあります。最も高い [精度 (検証)] の 1 つ以上の値が四角で囲まれて強調表示されます。

  8. モデルをクリックして結果を表示します。これは、[概要] タブに表示されます。このタブを開くには、モデルを右クリックして [概要] を選択します。

  9. 各モデルの散布図を確認します。[学習] タブの [プロットと結果] セクションで矢印をクリックしてギャラリーを開き、[検証結果] グループの [散布] をクリックします。X は、誤分類された点を示しています。

    3 つのいずれのモデルでも、青い点 (setosa 種) はすべて正しく分類されていますが、他の 2 つの種は一部が誤分類されています。[プロット][データ][モデル予測] を切り替えます。正しくない点 (X) の色を確認します。または、モデル予測をプロットするときに、正しくない点のみを表示するため、[正] チェック ボックスをクリアします。

  10. モデルを改善できるか試すため、モデルの学習時に異なる特徴量を含めます。予測力が低い特徴量を削除するとモデルを改善できるかどうか調べます。

    [学習] タブの [オプション] セクションで [特徴選択] をクリックします。

    [既定の特徴選択] タブで、さまざまな特徴ランク付けアルゴリズムを選択して最も重要な特徴を特定できます。アプリで特徴ランク付けアルゴリズムを選択すると、特徴の重要度スコアに応じて並べ替えられたプロットが表示されます。スコアが高いほど (Inf も含む)、特徴の重要度が高いことを示します。ランク付けされた特徴とそのスコアの表が表示されます。

    この例では、[Chi2][ReliefF][ANOVA]、および [Kruskal Wallis] のすべての特徴ランク付けアルゴリズムで、花弁の測定値が最も重要な特徴として特定されています。[特徴のランク付けアルゴリズム][Chi2] をクリックします。

    Default Feature Selection tab with Chi2 as the selected feature ranking algorithm

    [特徴選択] で、検証メトリクスのバイアスを回避するために、最も高ランクの特徴を選択する既定のオプションを使用します。4 つの特徴のうちの 2 つをモデルの学習で保持するように指定します。[保存して適用] をクリックします。特徴選択の変更が [モデル] ギャラリーを使用して作成される新しいモデルに適用されます。

  11. 数を絞った特徴のセットを使用して新しい木のモデルに学習させます。[学習] タブの [モデル] セクションで矢印をクリックしてギャラリーを開きます。[決定木] グループで [すべての木] をクリックします。[学習] セクションで、[すべてを学習] をクリックして [すべてを学習] または [選択を学習] を選択します。

    2 つの測定値のみを使用して学習させたモデルは、すべての予測子が含まれているモデルと同程度に機能します。すべての測定値を使用した場合でも 2 つの測定値のみを使用した場合でも、モデルによる予測に変わりはありません。データの収集が高価または困難な場合、一部の予測子がなくても十分に機能するモデルが好ましい可能性があります。

  12. [モデル] ペインの最後のモデルに注目します。これは [粗い木] モデルで、4 つの予測子のうち 2 つだけを学習に使用しています。除外した予測子の数が表示されます。どの予測子が含まれているかをチェックするには、[モデル] ペインでモデルをクリックし、モデルの [概要] タブの展開された [特徴選択] セクションでチェック ボックスに注目します。

    メモ

    交差検証方式を使用する場合は、[最も高ランクの特徴を選択] オプションを使用して特徴選択を行うように選択すると、学習分割ごとに、モデルの学習前にアプリが特徴選択を行います。異なる分割では、最高ランクの特徴として異なる予測子を選択できます。[既定の特徴選択] タブの表には、学習データと検証データで学習させた完全なモデルで使用される予測子のリストが表示されます。

  13. 別の測定値のサブセットを使用して新しい木のモデルに学習させます。[学習] タブの [オプション] セクションで [特徴選択] をクリックします。[既定の特徴選択] タブで、[特徴のランク付けアルゴリズム][MRMR] をクリックします。[特徴選択] で、4 つの特徴のうちの 3 つをモデルの学習で保持するように指定します。[保存して適用] をクリックします。

    [学習] タブの [モデル] セクションで矢印をクリックしてギャラリーを開きます。[決定木] グループで [すべての木] をクリックします。[学習] セクションで、[すべてを学習] をクリックして [すべてを学習] または [選択を学習] を選択します。

    4 つの予測子のうちの 3 つだけを使用して学習させたモデルは、他の学習済みモデルほど効果的に機能しません。

  14. 各クラスの性能を調べて、同程度の精度の中から最適なモデルを選択します。たとえば、4 つの予測子のうちの 2 つを含む粗い木を選択します。各クラスにおける予測子の精度を調べます。[学習] タブの [プロットと結果] セクションで矢印をクリックしてギャラリーを開き、[検証結果] グループの [混同行列 (検証)] をクリックします。このプロットを使用すると、現在選択している分類器が各クラスでどのように機能したかを理解できます。真のクラスと予測したクラスの結果が含まれている行列が表示されます。

    分類器が十分には機能しなかった領域を探すには、数値が大きく赤で表示されている対角線外のセルを確認します。このような赤いセルでは、真のクラスと予測したクラスが一致していません。データ点は誤分類されています。

    Confusion matrix plot

    この図で、中央の行の 3 番目のセルを確認します。このセルの真のクラスは versicolor ですが、点が virginica に誤分類されています。このモデルでは 2 つが誤分類されたことがセルに示されています (結果は異なる場合があります)。観測値の数ではなく比率を表示するには、[プロット] のコントロールで [真陽性率] を選択します。

    この情報は、目標に最適なモデルを選択するために役立てることができます。このクラスの偽陽性が分類問題にとって非常に重要な場合は、このクラスを最適に予測するモデルを選択します。このクラスの偽陽性があまり重要ではなく、予測子が少ないモデルの方が他のクラスで良好に機能する場合は、全体的な精度の優先度を多少低くするために一部の予測子を除外したモデルを選択し、将来のデータ収集を容易にします。

  15. [モデル] ペインに含まれている各モデルについて混同行列を比較します。各モデルにどの予測子が含まれているかを調べるには、モデルの [概要] タブの [特徴選択] セクションを確認します。

    この例では、4 つの予測子のうちの 2 つを含む粗い木は、すべての予測子を含む粗い木と同程度に機能します。つまり、両方のモデルの検証精度が同じで、混同行列も同じになります。

  16. 追加または除外する特徴量をさらに調べるには、平行座標プロットを使用します。[学習] タブの [プロットと結果] セクションで矢印をクリックしてギャラリーを開き、[検証結果] グループの [平行座標] をクリックします。クラスを最適に分離する特徴は花弁の長さと花弁の幅であることがわかります。

    Parallel coordinates plot

  17. モデルのハイパーパラメーターの設定を調べるには、[モデル] ペインでモデルを選択し、モデルの [概要] タブの [モデルのハイパーパラメーター] セクションを展開します。粗い木のモデルと中程度の木のモデルを比較し、モデルのハイパーパラメーターの違いに注目します。具体的には、[最大分割数] の設定について、粗い木では 4、中程度の木では 20 になっています。この設定は木の深さを制御します。

    粗い木のモデルをさらに改善できるか試すために、[最大分割数] の設定を変更します。まず、[モデル] ペインでモデルをクリックします。モデルを右クリックして [複製] を選択します。[概要] タブで [最大分割数] の値を変更します。次に、[学習] タブの [学習] セクションで、[すべてを学習] をクリックして [選択を学習] を選択します。

  18. [モデル] ペインで最適な学習済みモデルをクリックします。このモデルをワークスペースにエクスポートするには、[学習] タブで [エクスポート] をクリックして [モデルのエクスポート] をクリックし、[モデルのエクスポート] を選択します。[分類モデルのエクスポート] ダイアログ ボックスで [OK] をクリックすると、既定の変数名 trainedModel がそのまま使用されます。

    結果に関する情報はコマンド ウィンドウに出力されます。

  19. 決定木モデルを可視化するには、次のように入力します。

    view(trainedModel.ClassificationTree,"Mode","graph")

    Classification tree

  20. エクスポートした分類器を使用して、新しいデータに対して予測を行うことができます。たとえば、ワークスペースにある fishertable のデータについて予測を行うには、次のように入力します。

    [yfit,scores] = trainedModel.predictFcn(fishertable)
    出力の yfit には、データ点ごとのクラスの予測が含まれています。出力の scores には、学習済みモデルから返されたクラス スコアが格納されます。scores は n 行 k 列の配列です。ここで、n はデータ点の数、k は学習済みモデルのクラスの数です。

  21. 新しいデータを使用して同じ分類器を学習させる処理を自動化したり、プログラムで分類器を学習させる方法について調べるには、このアプリでコードを生成します。最適な学習済みモデルのコードを生成するには、[学習] タブの [エクスポート] セクションで [関数の生成] をクリックします。

    コードがモデルから生成され、ファイルが MATLAB のエディターに表示されます。詳細については、新しいデータでモデルに学習をさせる MATLAB コードの生成を参照してください。

この例では、フィッシャーによる 1936 個のアヤメのデータを使用します。このアヤメのデータには、3 種の標本について花弁の長さ、花弁の幅、がく片の長さ、がく片の幅という花の測定値が含まれています。予測子の測定値に基づいて種を予測するように分類器を学習させます。

このワークフローを使用すると、分類学習器で学習させることができる他のタイプの分類器を評価および比較できます。

選択したデータ セットに対して使用できる事前設定済みの最適化不可能な分類器モデルをすべて試すには、次のようにします。

  1. [学習] タブの [モデル] セクションで矢印をクリックして分類モデルのギャラリーを開きます。

  2. [開始] グループで [すべて] をクリックします。

    Option selected for training all available classifier types

  3. [学習] セクションで、[すべてを学習] をクリックして [すべてを学習] を選択します。

他の分類器のタイプについては、分類学習器アプリにおける分類モデルの学習を参照してください。

関連するトピック