Big-data-analytics-decision-trees

提供:Dev Guides
移動先:案内検索

ビッグデータ分析-デシジョンツリー

デシジョンツリーは、分類や回帰などの教師あり学習問題に使用されるアルゴリズムです。 デシジョンツリーまたは分類ツリーは、各内部(非リーフ)ノードに入力フィーチャのラベルが付けられたツリーです。 フィーチャでラベル付けされたノードからのアークは、フィーチャの可能な値のそれぞれでラベル付けされます。 ツリーの各リーフには、クラスまたはクラス全体の確率分布のラベルが付けられます。

属性値テストに基づいてソースセットをサブセットに分割することにより、ツリーを「学習」できます。 このプロセスは、*再帰的なパーティショニング*と呼ばれる再帰的な方法で、各派生サブセットで繰り返されます。 ノードのサブセットのターゲット変数の値がすべて同じ場合、または分割によって予測に値が追加されなくなると、再帰が完了します。 決定木のトップダウン誘導のこのプロセスは、貪欲なアルゴリズムの例であり、決定木を学習するための最も一般的な戦略です。

データマイニングで使用される決定木は、2つの主なタイプのものです-

  • 分類ツリー-応答が名目上の変数である場合、たとえば電子メールがスパムであるかどうか。
  • 回帰ツリー-予測された結果を実数とみなせる場合(例: 労働者の給与)。

決定木は簡単な方法であり、そのためいくつかの問題があります。 この問題の1つは、決定木が生成する結果モデルの分散が大きいことです。 この問題を軽減するために、決定木のアンサンブル法が開発されました。 現在広く使用されているアンサンブルメソッドの2つのグループがあります-

  • 決定ツリーのバギング-これらのツリーを使用して、トレーニングデータを置換で繰り返しリサンプリングし、コンセンサス予測のためにツリーを投票することにより、複数の決定ツリーを構築します。 このアルゴリズムは、ランダムフォレストと呼ばれています。
  • 決定木をブースト-勾配ブーストは弱学習器を組み合わせます。この場合、意思決定ツリーを反復的な方法で単一の強力な学習者にします。 弱いツリーをデータに適合させ、前のモデルのエラーを修正するために、弱学習器を繰り返し適合させます。
# Install the party package
# install.packages('party')
library(party)
library(ggplot2)

head(diamonds)
# We will predict the cut of diamonds using the features available in the
diamonds dataset.
ct = ctree(cut ~ ., data = diamonds)

# plot(ct, main="Conditional Inference Tree")
# Example output
# Response:  cut
# Inputs:  carat, color, clarity, depth, table, price, x, y, z

# Number of observations:  53940
#
# 1) table <= 57; criterion = 1, statistic = 10131.878
#   2) depth <= 63; criterion = 1, statistic = 8377.279
#     3) table <= 56.4; criterion = 1, statistic = 226.423
#       4) z <= 2.64; criterion = 1, statistic = 70.393
#         5) clarity <= VS1; criterion = 0.989, statistic = 10.48
#           6) color <= E; criterion = 0.997, statistic = 12.829
#             7)*  weights = 82
#           6) color > E

#Table of prediction errors
table(predict(ct), diamonds$cut)
#            Fair  Good Very Good Premium Ideal
# Fair       1388   171        17       0    14
# Good        102  2912       499      26    27
# Very Good    54   998      3334     249   355
# Premium      44   711      5054   11915  1167
# Ideal        22   114      3178    1601 19988
# Estimated class probabilities
probs = predict(ct, newdata = diamonds, type = "prob")
probs = do.call(rbind, probs)
head(probs)