1.ツリーを認識します
ツリー内のWikipediaのエントリ、次の概念:
決定木の訓練統計、データマイニングや機械学習の使用決定木クラスの標準試料を予測するための予測モデルとして。このツリーとしても知られている分類ツリーまたは回帰ツリー。これらのツリーの構造は、クラスの標準と内部ノード所与のリーフノードは、属性を表します。
データマイニング決定木でのトレーニングは、一般的に用いられている方法です。目標は、ターゲットサンプルを予測するモデルを作成することです。
我々はすでに、機械学習の両方の分類と回帰の基本的な概念を導入しました。この2つの問題を解決するための重要なアルゴリズムです木の分類と回帰木。
だから、決定木は何ですか?
デシジョンツリー(決定木)(バイナリまたは非バイナリツリーであってもよい)ツリー構造です。ことを各非リーフノードが機能属性のテストを表し、各ブランチは、カテゴリを格納するために出力の範囲、及び各リーフノードの特性を表します。
決定木を用いた意思決定プロセスは、ルートノード、特性属性項目に対応して分類されるべきテスト、それはリーフノードに到達するまでその値は、出力ブランチに応じて選択され、リーフノードはカテゴリ判定結果として記憶されます。
結論として、決定木モデルは、次のセクションの中核であります:
- ノードと有向辺組成
- ノードは、内部ノードとリーフノードの両方のタイプがあります
- 内部ノードは機能を表し、リーフノードは、クラスを表します
(上記をとるhttps://zhuanlan.zhihu.com/p/26703300)
換言すれば、我々は徐々に所望の分類または回帰の結果を得るために、リーフノードまでダウントラバース状況に応じて、決定木を介してルート・ノードから開始します。
このプロセスは、理解しやすい学習アルゴリズムを他のマシンに比べて人間の思考に沿ったもので、考慮すべき1つのシリアル因子によるものです人間の意思決定プロセスを、シミュレートし、したがって、原則。
2.意思決定ツリーの利点と欠点
データ構造とアルゴリズムの任意の種類については、我々はすべての長所と短所場所を明確にするので、適切な機会を選択する必要があります。
2.1ディシジョン・ツリーの利点
- 簡単に理解し、説明することは、決定木の重要性を理解するのは簡単です。
- 最後に、第1節では、我々はこの説明を与えてきました
- 最小限のデータ準備では、他の技術は、多くの場合、データの正規化を必要としています。
- 異なるメトリックデータは、必ず指定の基準に判断ツリーの異なるノードで、それは互いの間で均一な大きさを必要としない、比較することが必要です。
- データの処理は、処理すべき数値カテゴリデータであってもよいです。他の技術は、多くの場合、一つだけのデータ型を扱います。のみ処理の種類、例えば、アソシエーションルールタイプのみ数値データを扱うことができるニューラルネットワーク。
- 標準的な大小関係の各ノードで決定することができるインデックス値は、それが属するカテゴリを決定することができます。あなたは、意思決定ツリーに共存させることができます。
- ホワイトボックスモデルの出力を使用して容易に構造モデルによって説明しました。ニューラルネットワークは、結果の出力を解釈することは困難である、ブラックボックスモデルです。
- 決定のすべてのステップが観察されているように、各分類/回帰の結果が徐々に下方に、特定の決定木が得られています。
パフォーマンスモデルは、テストセットによって検証することができます。モデルの安定性を考慮することができます。
ロバスト制御、ノイズプロセスへの良好な堅牢性。
それは良いハンドル大規模なデータとすることができます。
2.2決定木を欠点
最適な決定木を訓練することであるNP完全問題。したがって、このような訓練などヒューリスティック検索アルゴリズム、使用して意思決定ツリーの実際のアプリケーション貪欲アルゴリズムは局所最適を実現しています。このアルゴリズムは、最高意思決定ツリーを取得する方法はありません。
複雑な決定木の過度の作成は、トレーニングセット外のデータのない優れた予測因子につながります。これは呼ばれるオーバーフィット。メカニズムをプルーニングすることは、この問題を回避することができます。
いくつかの質問には、決定木は十分なXOR問題として、解決することはできません。この問題を解決するための時間は、決定木が大きくなりすぎます。フィールドは、この問題を解決するために、問題のみを変更したり、使用することができ、他の学習アルゴリズムは、より多くの時間がかかる(のようなリレーショナル学習や帰納論理プログラミング)。
データは、これらのカテゴリ属性に、情報は、ゲイン、いくつかのバイアスが存在します。
3.決定木構造
決定木を構築することは、通常は3つのステップがあります。
- 機能の選択
- ディシジョン・ツリー
- ツリーの剪定
決定木学習アルゴリズムは、再帰は通常、最適な特性を選択し、トレーニングデータは、各サブデータセットのための最高の分類方法があるように、この機能に従って分割されます。このプロセスは、特徴空間の区分に対応するだけでなく、決定木の構築に対応しています。
このプロセスは、特徴空間の区分に対応するだけでなく、決定木の構築に対応しています。
- スタートは:ルート・ノードの構築、すべてのトレーニングデータのルートノード、トレーニングデータセットの特徴に応じた最適な機能を選択するためには、サブセット、最高の現在の条件で分類した各部分集合に分割されています。
- これらのサブセットは、基本的に正しい分類することができていた場合、リーフノードに対応するリーフノードに割り当てられ、それらのサブセットを構築します。
- サブセットが分割され続け、最高の新機能のこれらのサブセットの選択、正しく分類することができないがある場合は、その再帰的にすべてのトレーニングデータは、基本的な権利をサブセットするまで、対応するノードを構築分類、またはもし適切な機能がなくなるまで。
- 各サブセットは、このように決定木を生成し、明確なクラスを持っているリーフノードに割り当てられています。
4. CARTアルゴリズム
CARTアルゴリズム:分類および回帰ツリー。名前が示すように、CARTアルゴリズムはまた、回帰木(回帰ツリー)、モデルツリー(モデルツリー)、プロセス内のわずかに異なる2つの成果を作成するために使用することができ、分類ツリー(分類ツリー)を作成するには、両方を使用することができます。分類の問題を解決することができるだけでなく、回帰の問題を解決することができます。決定木を得、寸法の半分に基づいて、特定のしきい値のD Vは二分木です。
分類のための4.1 CARTツリー
算法从根节点开始,用训练集递归建立CART分类树。
INPUT : 训练集D,基尼系数的阈值,样本个数阈值。
OUTPUT: 决策树T。
1. 对于当前节点的数据集为D,如果样本个数小于阈值或没有特征,则返回决策子树,当前节点停止递归。
2. 计算样本集D的基尼系数,如果基尼系数小于阈值,则返回决策树子树,当前节点停止递归。
3. 计算当前节点现有的各个特征的各个特征值对数据集D的基尼系数。
4. 在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2。
5. 对左右的子节点递归的调用1-4步,生成决策树。
回帰CARTツリーの4.2
データは、多くの機能とグローバルモデルを構築するためのアイデアの複雑さとの関係の特性を持っている場合は、あまりにも困難となり、またビット不器用。そして、実際の生活の中で、多くの問題は、データに合わせて任意のグローバル線形モデルを使用することは不可能である、非線形です。一つの可能なアプローチは、容易に、データモデルの多くの部分に切断し、次いで、線形回帰技術を使用してモデル化されたデータを設定することです。初期セグメンテーションは、線形モデルをフィットすることは困難である場合は、セグメンテーションを続けています。このようセグメンテーション、ツリー構造で、回帰のために非常に便利です。
目標は、ツリーがターゲット変数の値を予測するために使用された連続データ回帰木は、どのくらいです。
サンプルの出力値が連続的である、それは回帰木であり、CART回帰木とCART分類ツリーを確立するサンプルは、分類木である離散的な出力値は、ある場合にサンプルの出力は、点を除いて類似しています。出力分類ツリーは、サンプルの範疇で、出力回帰木は実数です。
ツリーは仕方が確立された後に予測を行うために、CART分類ツリーのリーフノードは、現在のノードとして最も可能性の高いカテゴリに予測カテゴリを使用しました。回帰木の出力は、出力を予測する平均値または中央値の葉ノードを使用して、カテゴリではありません。
5. sklearn決定木
次のようにコードを呼び出します:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
boston = datasets.load_boston()
X = boston.data
y = boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
from sklearn.tree import DecisionTreeRegressor
dt_reg = DecisionTreeRegressor()
dt_reg.fit(X_train, y_train)
dt_reg.score(X_test, y_test)