必要なディシジョン・ツリー - あなたは情報ゲインが何であるかを知るための助けに一つの記事

まず、決定木は何ですか

決定木は、教師付き学習アルゴリズムの一つであり、基本的な分類と回帰であり、また、分類ツリーに分け回帰木と決定木、分類ツリーは、この資料に記載されています。あなたが知っているか、またはデータ構造を学んだ場合は、「木」という概念の肯定は、木を学習し、マスタリングに基づいて、不慣れではない決定木が何であるかを理解するために、小さな例を以下により容易になります。

左側の矢印は、別のモジュールによって決定された分岐を示し、またはそれが終端に達し、ある決定木のフローチャートは、矩形が決意モジュールを表す図に示す以下、楕円を終了するプログラムを締結した動作を示す、終端モジュールを表しますモジュール。
ここに画像を挿入説明
このフローチャートは、「オンライン不人気なことを言って前に、主に配偶者仮定のシステムであり、おばさん、私は懸命に仕事をしたくない、それは根拠を決定するために努力を続けたい場合は、ハードワークを継続したくない場合は、ツリーは、あなたが見つけることを選択することができ、見て、」 「豊かな女性『;逆に、あなたが一緒に苦労するのガールフレンドを探している、ここであなた優しい、選択した』などの場合、女の子の性格を判断するため、再び基礎優しい女の子冷たい高い文字のように、その後、「選択」、クール少女。 "

決定木は、全体として見ることができるIF-THEN「......、決意条件場合」、すなわち、規則、および以下の3点に注意してください。

  1. パスのルートノードへの各子ノードは、ルールを構成することができます。
  2. 各経路上の中間ノードがルールべき前記条件を解析し、リーフノードラベルは結論を支配すべきです。
  3. パスの一例である機能上の特徴と一致するカバレッジのインスタンスが1つだけあり、各インスタンスです。

    第二に、決定木プロセス

  4. データ収集:データソースなど、クローラは、実施の形態を開示しました。
  5. データ準備:ツリー構築アルゴリズムのみ公称タイプのデータに適用され、数値データは離散でなければなりません。
  6. データ分析:あなたは、任意の方法を使用することができ、ツリー構造の完了後、あなたが期待に沿ったグラフィックかどうかをチェックする必要があります。
  7. トレーニングアルゴリズム:データ構造がツリーを構築しました。
  8. テストアルゴリズム:正答率を計算するためにツリーモデル。
  9. 使用アルゴリズム:このステップでは、いずれにも適用することができる優れたデータの内部意味を理解するためのアルゴリズム、決定木の可視化を教師あり学習。

決定木のデータを構築することは適切なものでなければならない、少ない特性データセットは、決定木の精度が低くなる可能性があります。あまりにも多くのデータ特徴場合は、機能を選択すると、決定木の精度には影響しません。木を剪定決定木を生成し、特徴選択:理想的な決定木の構築は、以下の3つのステップに分けることができます。

第三に、特徴選択

主な分類機能はトレーニングデータを選択する機能を有するデータセットを分割することにより、特徴的な特徴空間、すなわち、特徴選択を決定します。その目的は、決定木の効率を向上させる分類結果の結果とほとんど差と機能のランダムな組み合わせは、この機能は、一般的に決定木の精度にフィーチャー除去効果のこの種を言えば、何の分類機能しない場合にすることです少し。

以下は、海洋生物に関するデータのテーブルではありません(生き残る表面化していない場合)、データの2つの特徴が全く浮上している、足ひれ(水かき足がある場合)、クラスラベルの魚(魚のためかどうか)。

ノー浮上 フリッパー
それはあります それはあります それはあります
それはあります それはあります それはあります
それはあります ノー ノー
ノー それはあります ノー
ノー それはあります ノー

その後、データセット、最初にどの機能選択が答えはきっと最高の分類機能でなければなりません?財産を分割するために基準となる高速化細分化データになりますとき、あなただけのパーティショニング機能を選択することができますどのように多くのデータセットの特徴をどんなにその機能が、問題はそれの最高を分類する能力を備えているかを決定する方法、ありますか?情報利得 - その後、我々は新しい概念を導入しなければなりません。

情報利得それは何ですか?ゲイン情報の前に分割するデータセット後の情報の変更、ゲイン情報を計算する方法を知って、私たちはデータセットを分割した各特性値のための情報利得を計算することができ、最高のゲイン特性情報は最良の選択です。

3.1エントロピー(シャノンエントロピー)

情報利得を計算する前に、あなたは、それが何であるか、「エントロピー」を「エントロピー」という概念を知っている必要があり、そこに行く必要はありません、我々はエントロピーは情報理論における情報、統計と確率の期待値として定義されている知っている必要があり、エントロピーはランダムです簡単な言葉で不確実性の変数の尺度は、混乱のレベルはどのようにこのシステムです。

データセットのN個のサンプルがあると仮定し、その後、情報シンボルXiのi型サンプルXiが、定義することができる:
ここに画像を挿入説明
P(XI)は、選択された分類の確率であることを特徴とします。すべてのデータセットは、iの値の種類を変えることによって得ることができます。

:エントロピーを計算するために、我々は、以下の式によって得られたすべての情報(数学的期待値)は、値を含む可能性のあるすべてのカテゴリの期待値、計算する必要があり
ここに画像を挿入説明
、より高いエントロピー、大きなデータの混合のより高度であり、変数の不確実性を、。

3.2は、エントロピーを計算します

あなたは、データセットを作成する前に、カスタムの簡素化に関するデータ、のために「はい」のための1と0と「いいえ。」
次のようにエントロピーコードを計算することです。

#创建数据集
def createDataSet():
    DataSet =  [[1, 1, 'yes'],
                [1, 1, 'yes'],
                [1, 0, 'no'],
                [0, 1, 'no'],
                [0, 1, 'no']]
    #矩阵转化Dataframe
    DataSet = pd.DataFrame(DataSet,columns=['no surfacing','flippers','fish'])
    return DataSet
#计算信息熵
def calculatent(DataSet):
    #统计类标签的分类
    fish_type = DataSet['fish'].value_counts()
    '''
    no     3
    yes    2
    '''
    #获取样本个数
    m = DataSet.shape[0]
    #每个分类的概率,即p(Xi)
    p = fish_type/m
    #计算熵值
    ent = (-p*np.log2(p)).sum()
    return ent
    '''
    0.9709505944546686
    '''

そして最後に、エントロピーを返さ0.9709505944546686

データは、最後のクラスは、「魚」、2つのタイプがあります。ラベル3/5を占めているラベルの総数の元2/5「魚、ではありません」。
したがって、エントロピーの公式を適用するために必要とされるコードのその部分のコア:
ここに画像を挿入説明
エントロピーを得た後は、データセットは、情報ゲインの開始部で算出された最大の情報ゲインの方法に応じて分割することができます。

3.3インフォメーション・ゲイン

計算されたエントロピーの後、どのような情報は、それを得る計算するには?情報利得を計算するエントロピー子ノードとすべてのエントロピーを減算することによって親ノードであり、合計するとき、異なるタイプの割合ので、加重平均それらを達成するために必要です。

「でNOサーフェス例えば」この列は、5つのサンプルを、「1」「3 0」ので、両者を有し、二つの重み付けの一3/5他の2/5。

ここで「のための1」三つのサンプル、サンプルラベルの「でイエス」2、「いいえ」、同じ理由で、それぞれなので、確率的分類2/3と1/3を持っている「0」2サンプルは、サンプルラベルの魚は「あるNO」、その確率は1つの分類です。

この行の情報ゲインは、以下のように計算される
ここに画像を挿入説明
二つの特徴の情報利得の計算結果を次のように
ここに画像を挿入説明
各オブジェクトのゲイン特性情報を計算するたびに分類選択する現在の最適な特性を、そう容易にするために、比較プロセスが存在することになります最大利得情報、及び特徴の指標を返し、最適な切断機能を設定するためにこのデータを使用することができます。

ここでは2つの機能、最適な機能を選択する機能は、他の関数は、データセットを分割するように構成され、特定のコードは次のようにされています。

#最优特征函数
def ChooseBF(DataSet):
    #获取基础信息熵
    all_ent = calculatent(DataSet)
    BestGain = 0 #初始化一个信息增益
    col = -1 #初始化一个最优特征索引
    for i in range(DataSet.shape[1]-1): #遍历所有特征
        #获取第i列的分类
        index_ = DataSet.iloc[:,i].value_counts().index
        child_ent = 0 #初始化某列的信息熵
        for j in index_:
            #将第i列按照类别分类
            child_DataSet = DataSet[DataSet.iloc[:,i]==j]
            #计算某一类别的信息熵
            ent = calculatent(child_DataSet)
            #将所有类别信息熵加权求和
            child_ent += (child_DataSet.shape[0]/DataSet.shape[0])*ent
        print("第%s列的熵为%s"%(i,child_ent))
        TheGain = all_ent-child_ent #获取信息增益
        print("第%s列的信息增益为%s"%(i,TheGain))
        #得出最优特征索引
        if(TheGain>BestGain):
            BestGain = TheGain
            col = i
    print("最优特征索引为:%s"%col)
    return col

この関数は二回計算情報エントロピーと呼ばれるcalculatent、即ち式の上方基本情報エントロピーを得るために一度、ENT(「合計」)と別のもの、すなわち、式の上に、エントロピー機能異なるカテゴリを計算することである。」(ENTある)、ENT( 'いいえ')
スクリーンコード次のように実行されます。
ここに画像を挿入説明
最適な機能返さ指数が0「で、NOサーフェス」この行、コードは問題ではないように上記手書きの2つのゲイン情報の結果と一致して、計算されます。

次に、以下のようにデータセットの最適な特性を使用して、分割されています。

#切分数据集函数
def splitSet(DataSet,col,value):
    #找到最优特征索引标签
    index = (DataSet.iloc[:,col]).name
    #切分数据集,并把当前最优特征删去
    resetdata = DataSet[DataSet.iloc[:,col]==value].drop(index,axis = 1)
    return resetdata

この関数は三つの引数、データセットのセグメンテーションのための、すなわち必要性、インデックスの最適な特性を取り、分類が保持されるように備えて、一部の人々は理解していない可能性値の効果を、操作した結果は理解して比較します。

    '''
    col = 0,value = 1
    flippers fish 
0         1  yes
1         1  yes
2         0   no
    col = 0,value = 0
    flippers fish
3         1   no
4         1   no
    '''

上記の二つのデータフレーム、セグメンテーションの結果は、データセット= 1の値は、保存三つのサンプルは、「である場合、関数によって返されるNOサーフェスとき値= 0、1の値ことを特徴と」 2つのサンプルは、「ある保持NOサーフェシング、価値の比較の役割を理解するのは簡単ですので、」0の特徴値。

要約を終了

したがって、エントロピー情報ゲインの算出方法は、実質的に完成され導入された、データは、データの特性を比較した場合、数回に分類されるデータセットにある大きな、最初の分割の後、データセットを得、本明細書取ら小さなフィーチャの数を設定しますノード上の決定木の枝内の次のノードに渡さ、我々は再びデータを分割するため、再帰的な処理データ・セットの原理を採用する必要がありますすることができます。

我々は、すべての後に、大きな利点は、データが段階的に分割する方法のより良い理解を可視化することにより、決定木ということで、再帰を可視化する方法を構築決定木へと、ツリーの下に説明します。

番号[パブリック]背景キャンディ猫は、参考のためにソースコードを取得するために読み取り用のおかげで、「情報利得」を返信します。

おすすめ

転載: blog.51cto.com/14746554/2479200