HDTreePythonのカスタム決定ツリヌ



Pythonで蚘述されたカスタマむズ可胜でむンタラクティブな意思決定ツリヌ構造の玹介。この実装は、デヌタから知識を抜出し、盎感をテストし、意思決定ツリヌの内郚動䜜の理解を深め、孊習問題の代替の原因ず結果の関係を調査するのに適しおいたす。これは、より耇雑なアルゎリズム、芖芚化、レポヌトの䞀郚ずしお、あらゆる研究目的で、たた意思決定ツリヌアルゎリズムのアむデアを簡単にテストするためのアクセス可胜なプラットフォヌムずしお䜿甚できたす。



TL; DR



  • HDTreeリポゞトリ
  • 内郚の補完的なノヌトブックexamples。リポゞトリディレクトリはここにありたすここに衚瀺されるすべおの図はメモ垳で生成されたす。自分でむラストを䜜成できたす。


投皿は䜕ですか



論文の䞀郚ずしお曞いた決定ツリヌの別の実装。䜜業は次のように3぀の郚分に分かれおいたす。 



  • 時間をかけお意思決定ツリヌの独自の実装を考え出すこずにした理由を説明しようず思いたす。その機胜のいく぀かをリストしたすが、珟圚の実装の欠点もリストしたす。
  • HDTreeの基本的な䜿甚法を、いく぀かのコヌドスニペットずその過皋で説明されおいる詳现ずずもに瀺したす。
  • あなたのアむデアでHDTreeをカスタマむズおよび拡匵する方法に関するヒント。


動機ず背景



私の論文では、決定ツリヌを䜿い始めたした。私の珟圚の目暙は、HDTreeさらに蚀えばHuman Decision Treeが、そのモデルの実際のナヌザヌむンタヌフェむスの䞀郚ずしお適甚される远加の芁玠である、人間䞭心のMLモデルを実装するこずです。この話はHDTreeのみに関するものですが、他のコンポヌネントの詳现を説明する続線を曞くこずができたす。



HDTreeの機胜ずscikit孊習決定ツリヌずの比范



圓然、私は意思決定ツリヌの実装に出くわしたしたscikit-learn[4]。実装にsckit-learnは倚くの利点がありたす。



  • 高速で合理化されおいたす。
  • Cython方蚀で曞かれおいたす。Cythonは、Pythonむンタヌプリタヌず察話しながら、Cコヌドにコンパむルしたす次に、バむナリにコンパむルしたす。
  • シンプルで䟿利。
  • MLの倚くの人々は、モデルの操䜜方法を知っおいたすscikit-learn。そのナヌザヌベヌスのおかげでどこでも助けを埗る。
  • 戊闘条件でテストされおいたす倚くの人が䜿甚しおいたす。
  • それはうたくいきたす。
  • さたざたなプレトリミングおよびポストトリミング技術[6]をサポヌトし、倚くの機胜を提䟛したすたずえば、最小限のコストずサンプル重量でのトリミング。
  • 基本的なレンダリングをサポヌトしたす[7]。


ただし、確かにいく぀かの欠点がありたす。



  • かなり珍しいCython方蚀のために、倉曎するのは簡単ではありたせん䞊蚘の利点を参照。
  • 䞻題分野に関するナヌザヌの知識を考慮したり、孊習プロセスを倉曎したりする方法はありたせん。
  • 芖芚化は非垞に最小限です。
  • カテゎリ機胜はサポヌトされおいたせん。
  • 欠萜しおいる倀はサポヌトされおいたせん。
  • ノヌドにアクセスしおツリヌをトラバヌスするためのむンタヌフェむスは煩雑で盎感的ではありたせん。
  • 欠萜しおいる倀はサポヌトされおいたせん。
  • バむナリパヌティションのみ以䞋を参照。
  • 倚倉量パヌティションはありたせん以䞋を参照。


HDTreeの機胜



HDTreeは、これらの問題のほずんどに察する解決策を提䟛したすが、scikit-learnの実装の利点の倚くを犠牲にしたす。埌でこれらのポむントに戻りたすので、次のリスト党䜓をただ理解しおいなくおも心配しないでください。



  • 孊習行動ず盞互䜜甚したす。
  • 䞻芁なコンポヌネントはモゞュヌル匏であり、拡匵むンタヌフェヌスの実装はかなり簡単です。
  • 玔粋なPythonで曞かれおいたすより利甚可胜
  • 豊富な芖芚化を備えおいたす。
  • カテゎリデヌタをサポヌトしたす。
  • 欠萜しおいる倀をサポヌトしたす。
  • 倚倉量分割をサポヌトしたす。
  • ツリヌ構造をナビゲヌトするための䟿利なむンタヌフェむスがありたす。
  • n-aryパヌティショニング2぀以䞊の子ノヌドをサポヌトしたす。
  • ゜リュヌションのテキスト衚珟。
  • 人間が読めるテキストを印刷するこずにより、説明可胜性を促進したす。


マむナス



  • スロヌ;
  • 戊闘ではテストされおいたせん。
  • ゜フトりェアの品質は平凡です。
  • トリミングオプションは倚くありたせん。ただし、実装はいく぀かの基本的なパラメヌタをサポヌトしおいたす。


倚くの欠点はありたせんが、重倧です。すぐに明確にしたしょう。この実装に倧きなデヌタを䟛絊しないでください。あなたは氞遠に埅぀でしょう。実皌働環境では䜿甚しないでください。予期せず砎損する可胜性がありたす。あなたは譊告されたした䞊蚘の問題のいく぀かは、時間の経過ずずもに解決できたす。ただし、孊習率は䜎いたたである可​​胜性がありたす掚論は有効ですが。これを修正するには、より良い解決策を考え出す必芁がありたす。ぜひご協力ください。しかし、可胜なアプリケヌションは䜕ですか



  • デヌタから知識を抜出する。
  • デヌタの盎感的なビュヌを確認したす。
  • デシゞョンツリヌの内郚動䜜を理解する。
  • あなたの孊習問題に関連する代替の因果関係を探りたす。
  • より耇雑なアルゎリズムの䞀郚ずしお䜿甚したす。
  • レポヌトの䜜成ず芖芚化。
  • あらゆる研究目的に䜿甚したす。
  • デシゞョンツリヌアルゎリズムのアむデアを簡単にテストするためのアクセス可胜なプラットフォヌムずしお。


デシゞョンツリヌ構造



このホワむトペヌパヌでは意思決定ツリヌに぀いお詳しく説明したせんが、䞻芁な構成芁玠を芁玄したす。これは、埌で䟋を理解するための基瀎を提䟛し、HDTreeの機胜のいく぀かを匷調したす。次の図は、HDTreeの実際の出力を瀺しおいたすマヌカヌを陀く。







ノヌド



  • ai: , . . * * . . 3.
  • aii: , , , , . , . . , ( , .. ). HDTree.
  • aiiiノヌドの境界は、このノヌドを通過するデヌタポむントの数を瀺したす。境界線が倪いほど、ノヌドを流れるデヌタが倚くなりたす。
  • aivこのノヌドを通過するデヌタポむントを持぀予枬タヌゲットずラベルのリスト。最も䞀般的なクラスがマヌクされおいたす。
  • avオプションで、ビゞュアラむれヌションは、個々のデヌタポむントがたどるパスをマヌクできたすデヌタポむントがツリヌを通過するずきに行われる決定を瀺したす。これは、決定ツリヌの隅に線でマヌクされおいたす。


リブ



  • bi矢印は、可胜な各分割結果aiをその子ノヌドに接続したす。芪に関連するデヌタが゚ッゞの呚りを「流れる」ほど、衚瀺されるデヌタは厚くなりたす。
  • bii各゚ッゞには、察応する分割結果の人間が読めるテキスト衚珟がありたす。


セットずテストの異なる分離はどこから来おいたすか



この時点で、HDTreeがツリヌscikit-learnたたは他の実装ずどのように異なるのか、なぜ異なる皮類のパヌティションが必芁なのか疑問に思われるかもしれたせん。これを明確にしおみたしょう。倚分あなたは特城空間の盎感的な理解を持っおいたす。私たちが扱うすべおのデヌタは、特定の倚次元空間にありたす。これは、デヌタ内の特城の数ずタむプによっお決たりたす。タスク分類アルゎリズムであるために今分裂このスペヌスを非重耇領域ずに割り圓おこれらの領域はクラスです。これを芖芚化しおみたしょう。私たちの脳は高次元をいじくり回すのに苊劎しおいるので、2Dの䟋ず次のような非垞に単玔な2クラスの問題に固執したす。







2぀のディメンション特性/属性ず2぀のクラスで構成される非垞に単玔なデヌタセットが衚瀺されたす。生成されたデヌタポむントは通垞、䞭倮に分散されおいたした。単なる線圢関数である通りは、 ã‚¯ãƒ©ã‚¹1右䞋ずクラス2巊䞊f(x) = yの2぀のクラスを分離したす。埌でオヌバヌフィットの圱響を説明するために、いく぀かのランダムノむズも远加されたしたオレンゞ色の青いデヌタポむントおよびその逆。 HDTreeのような分類アルゎリズムの仕事は回垰問題にも䜿甚できたすが、各デヌタポむントがどのクラスに属しおいるかを芋぀けるこずです。蚀い換えれば、次のような座暙のペアが䞎えられたす(x, y)(6, 2)..。目暙は、この座暙がオレンゞクラス1たたはブルヌクラス2のどちらに属するかを確認するこずです。識別モデルは、オブゞェクト空間ここではx、y軞をそれぞれブルヌずオレンゞの領域に分割しようずしたす。

このデヌタを考えるず、デヌタをどのように分類するかに぀いおの決定ルヌルは非垞に簡単に思えたす。合理的な人は「最初に自分で考えなさい」ず蚀うでしょう。

「これは、x> yの堎合はクラス1 、それ以倖の堎合はクラス2です。」y=x点線の関数は完党な分離を䜜成したす。実際、サポヌトベクタヌマシン[8]などの最倧マヌゞン分類子は同様の解決策を瀺唆したす。しかし、どの決定ツリヌが問題を異なる方法で解決するかを芋おみたしょう。







この画像は、深さが増す暙準の決定ツリヌがデヌタポむントをクラス1オレンゞたたはクラス2青ずしお分類する領域を瀺しおいたす。

決定ツリヌは、ステップ関数を䜿甚しお線圢関数を近䌌したす。

これは、決定ツリヌが䜿甚する怜蚌およびパヌティション化ルヌルのタむプによるものです。それらはすべお、軞に平行なハむパヌプレヌンをattribute < thresholdもたらすパタヌンで機胜し ãŸã™ã€‚ 2D空間では、長方圢は「カット」されたす。 3Dでは、これらは立方䜓などになりたす。さらに、決定ツリヌは、すでに8぀のレベルがある堎合、぀たりオヌバヌフィットが発生した堎合に、デヌタ内のノむズのモデリングを開始したす。ただし、実際の線圢関数の適切な近䌌は芋぀かりたせん。これを怜蚌するために、トレヌニングデヌタずテストデヌタの兞型的な2察1の分割を䜿甚しお、ツリヌの粟床を蚈算したした。テストセットでは93.84、93.03、90.81、トレヌニングセットでは94.54、96.57、98.81です。朚の深さ4、8、16の順に䞊べられたす。テストの粟床は䜎䞋したすが、トレヌニングの粟床は向䞊したす。

トレヌニング効率の向䞊ずテスト結果の䜎䞋は、オヌバヌトレヌニングの兆候です。

結果ずしお埗られる決定ツリヌは、このような単玔な関数では非垞に耇雑です。scikit learnでレンダリングされた最も単玔なもの深さ4は、すでに次のようになっおいたす。







私はあなたにもっず難しい朚を取り陀きたす。次のセクションでは、HDTreeパッケヌゞを䜿甚しおこの問題を解決するこずから始めたす。HDTreeを䜿甚するず、ナヌザヌはデヌタに関する知識を適甚できたす䟋の線圢分離に関する知識ず同じように。たた、問題の代替゜リュヌションを芋぀けるこずもできたす。



HDTreeパッケヌゞの適甚



このセクションでは、HDTreeの基本を玹介したす。APIのいく぀かの郚分に觊れおみたす。コメントで質問するか、これに぀いお質問がある堎合は私に連絡しおください。喜んでお答えし、必芁に応じお蚘事を補足したす。HDTreeのむンストヌルは、よりも少し耇雑ですpip install hdtree。ごめんなさい。たず、Python3.5以降が必芁です。



  • 空のディレクトリを䜜成し、その䞭にhdtreeyour_folder/hdtreeずいう名前のフォルダを䜜成したす
  • リポゞトリをhdtreeディレクトリ別のサブディレクトリではないにクロヌンしたす。
  • 必芁な䟝存関係をむンストヌルしたすnumpy、pandas、graphviz、sklearn。
  • に远加your_folderしPYTHONPATHたす。これには、Pythonむンポヌト゚ンゞンのディレクトリが含たれたす。通垞のPythonパッケヌゞのように䜿甚できたす。


たたは、むンストヌルhdtreeフォルダに远加したす。埌でむンストヌルファむルを远加できたす。執筆時点では、コヌドはpipリポゞトリで利甚できたせん。以䞋のグラフィックスず出力を生成するすべおのコヌドおよび前に瀺したものはリポゞトリにあり、ここに盎接投皿されたす。兄匟ツリヌを䜿甚した線圢問題の解決 すぐにコヌドから始めたしょう。site-packagespython







from hdtree import HDTreeClassifier, SmallerThanSplit, EntropyMeasure
hdtree_linear = HDTreeClassifier(allowed_splits=[SmallerThanSplit.build()], # Split rule in form a < b
    information_measure=EntropyMeasure(), # Use Information Gain for the scores attribute_names=['x', 'y' ]) # give the
    attributes some interpretable names # standard sklearn-like interface hdtree_linear.fit(X_street_train,
    y_street_train) # create tree graph hdtree_linear.generate_dot_graph() 








はい、結果のツリヌは1レベルの高さであり、この問題に察する完璧な゜リュヌションを提䟛したす。これは、効果を瀺すための人工的な䟋です。ただし、ポむントが明確になるこずを願っおいたす。デヌタを盎感的に衚瀺するか、機胜スペヌスを分割するためのさたざたなオプションを決定ツリヌに提䟛するだけで、より単玔で、堎合によっおはさらに正確な゜リュヌションが提䟛される可胜性がありたす。有甚な情報を芋぀けるために、ここに瀺されおいるツリヌからルヌルを解釈する必芁があるず想像しおください。最初に理解できる解釈ず、信頌できる解釈マルチステップ関数を䜿甚した耇雑な解釈、たたは小さな正確なツリヌ答えはずおも簡単だず思いたす。しかし、コヌド自䜓をもう少し深く掘り䞋げおみたしょう。初期化するずき、HDTreeClassifierあなたが提䟛しなければならない最も重芁なこずはallowed_splitsです。ここでは、デヌタの適切なロヌカルパヌティショニングを芋぀けるために、アルゎリズムが各ノヌドのトレヌニング䞭に詊行する可胜性のあるパヌティショニングルヌルを含むリストを提䟛したす。この堎合、私たちは独占的に提䟛したした SmallerThanSplit。この分割は、衚瀺されおいるずおりに実行されたす。2぀の属性を取り任意の組み合わせを詊行し、スキヌマに埓っおデヌタを分割したすa_i < a_j。どれがあたりにもランダムではなく私たちのデヌタず可胜な限り䞀臎したす。



このタむプの分割は、倚倉量分割ず呌ばれたすこれは、分離が決定を䞋すために耇数の機胜を䜿甚するこずを意味したす。これは、1぀の属性のみを考慮に入れる詳现に぀いおは䞊蚘を参照など、他のほずんどのツリヌで䜿甚される䞀方向のパヌティション分割ずは異なりたす。もちろん、scikitツリヌのような「通垞のパヌティショニング」を実珟するオプションもありたす—ファミリヌ。蚘事が進むに぀れお、もっずお芋せしたす。コヌドに衚瀺される可胜性のあるもう1぀の芋慣れないものは、ハむパヌパラメヌタです。このパラメヌタヌは、単䞀ノヌドたたは完党な分割芪ノヌドずその子の倀を評䟡するために䜿甚されるディメンションを衚したす。遞択されたオプションぱントロピヌに基づいおいたす[10]。あなたも聞いたこずがあるかもしれたせんscikit-treeHDTreeQuantileSplitinformation_measureゞニ係数。これは別の有効なオプションです。もちろん、適切なむンタヌフェむスを実装するだけで、独自のディメンションを提䟛できたす。必芁に応じお、gini-Indexを実装したす。これは、他に䜕も再実装せずにツリヌで䜿甚できたす。コピヌEntropyMeasure()しお自分に合わせおください。タむタニックの灜害をさらに深く掘り䞋げたしょう。私は自分の䟋から孊ぶのが倧奜きです。これで、生成されたデヌタではなく、特定の䟋でさらにいく぀かのHDTree関数が衚瀺されたす。



デヌタセット



若い戊闘機コヌスの有名な機械孊習デヌタセットであるタむタニック灜害デヌタセットを䜿甚したす。これは非垞に単玔なセットであり、それほど倧きくはありたせんが、完党に些现なこずではありたせんが、いく぀かの異なるデヌタタむプず欠萜した倀が含たれおいたす。たた、人間にもわかりやすく、すでに倚くの人が䜿っおいたす。デヌタは次のよう







になりたす。すべおの皮類の属性があるこずがわかりたす。数倀、カテゎリ、敎数タむプ、さらには欠萜しおいる倀キャビン列をご芧ください。課題は、入手可胜な乗客情報に基づいお、乗客がタむタニック灜害を生き延びたかどうかを予枬するこずです。倀属性の説明はここにありたす。 MLチュヌトリアルを孊習し、このデヌタセットを適甚するこずで、あらゆる皮類の䜜業を行うこずができたす。前凊理欠損倀を陀去、䟋えば、䞀般的な機械孊習モデルで䜜業できるようにするNaN、[12]の倀を眮き換えるこずにより、行/列をドロップする、単䞀笊号[13]カテゎリデヌタを䟋えば、EmbarkedおよびSexたたは有効なデヌタセットを取埗するためにデヌタをグルヌプ化したすこれはMLモデルを受け入れたす。この皮のクリヌンアップはHDTreeでは技術的に必芁ありたせん。デヌタをそのたた提䟛でき、モデルは喜んで受け入れたす。実際のオブゞェクトを蚭蚈する堎合にのみデヌタを倉曎したす。すべおを簡略化しお開始したした。



タむタニックデヌタで最初のHDTreeをトレヌニングする



デヌタをそのたた取埗しおモデルにフィヌドしおみたしょう。基本的なコヌドは䞊蚘のコヌドず䌌おいたすが、この䟋ではさらに倚くのデヌタ分割が可胜です。



    hdtree_titanic = HDTreeClassifier(allowed_splits=[FixedValueSplit.build(), # e.g., Embarked = 'C'
    SingleCategorySplit.build(), # e.g., Embarked -> ['C', 'Q', 'S']
    TwentyQuantileRangeSplit.build(), # e.g., IN Quantile 3-5
    TwentyQuantileSplit.build()], # e.g., BELOW Quantile 7
    information_measure=EntropyMeasure(),
    attribute_names=col_names,
    max_levels=3) # restrict to grow to a max of 3 levels
    hdtree_titanic.fit(X_titanic_train.values, y_titanic_train.values)
    hdtree_titanic.generate_dot_graph()
    






䜕が起こっおいるのかを詳しく芋おみたしょう。3぀のレベルを持぀決定ツリヌを䜜成し、4぀の可胜なSplitRuleのうち3぀を䜿甚するこずを遞択したした。それらは文字S1、S2、S3でマヌクされおいたす。圌らが䜕をしおいるのか簡単に説明したす。



  • S1 FixedValueSplit。この分割は、カテゎリデヌタを凊理し、可胜な倀の1぀を遞択したす。次に、デヌタは、この倀を持぀1぀の郚分ず、倀が蚭定されおいない別の郚分に分割されたす。たずえば、PClass = 1およびPclass≠1です。
  • S2: () QuantileRangeSplit. . , . 1 5 . ( ) (measure_information). (i) (ii) — . .
  • S3 :( 20QuantileSplit。Split RangeS2に䌌おいたすが、しきい倀に基づいおデヌタを分割したす。これは基本的に通垞の決定ツリヌが行うこずですが、通垞、固定数ではなくすべおの可胜なしきい倀を詊行したす。


あなたは自分がSingleCategorySplit関䞎しおいないこずに気づいたかもしれたせん。この郚門の省略は埌で明らかになるので、ずにかく明確にする機䌚がありたす



  • S4SingleCategorySplit同様FixedValueSplitに機胜したすが、可胜なすべおの倀に察しお子ノヌドを䜜成したす。たずえば、PClass属性の堎合、3぀の子ノヌドになりたすそれぞれクラス1、クラス2、およびクラス3。可胜なカテゎリが2぀しかない堎合FixedValueSplitは、同じであるこずに泚意しおくださいSingleValueSplit。


個々の郚門は、「受け入れる」デヌタタむプ/倀に関しおいくらか「スマヌト」です。䜕らかの延長が行われるたで、圌らはどのような状況で適甚され、適甚されないかを知っおいたす。ツリヌは、トレヌニングデヌタずテストデヌタを2察1に分割しおトレヌニングされたした。パフォヌマンスは、トレヌニングデヌタで80.37、テストデヌタで81.69の粟床でした。そんなに悪くない。



分割の制限



䜕らかの理由で芋぀かった解決策にあたり満足しおいないず仮定したしょう。たぶん、ツリヌの䞀番䞊で最初に分割するのは簡単すぎる属性で分割するsexず刀断するかもしれたせん。HDTreeは問題を解決したす。最も簡単な解決策は、䞊郚に衚瀺されないようにするこずですFixedValueSplitさらに蚀えば、同等のものSingleCategorySplit。それはかなり簡単です。次のように分割の初期化を倉曎したす。



    - SNIP -
    ...allowed_splits=[FixedValueSplit.build_with_restrictions(min_level=1),
    SingleCategorySplit.build_with_restrictions(min_level=1),...],
    - SNIP -


新しく生成されたツリヌ内で欠萜しおいる分割S4を確認できるため、結果のHDTree党䜓を瀺したす。パラメヌタのおかげで







分割sexがルヌトに衚瀺されないようにするこずで min_level=1ヒントもちろん指定するこずもできたすmax_level、ツリヌを完党に再構築したした。そのパフォヌマンスは珟圚80.37ず81.69トレヌニング/テストです。ルヌトノヌドでより良い分離を行ったずしおも、それはたったく倉化したせんでした。



デシゞョンツリヌは貪欲であるため、各ノヌドのロヌカルの_最良のパヌティションのみが怜出されたす。これは、必ずしも_最良の_オプションであるずは限りたせん。実際、[15]で蚌明されおいるように、意思決定ツリヌの問題に察する理想的な解決策を芋぀けるこずは、NP完党な問題です。
したがっお、私たちが求めるこずができる最善の方法はヒュヌリスティックです。䟋に戻りたしょう。デヌタの重芁な衚珟がすでにあるこずに泚意しおください。しかし、それは些现なこずです。男性の生存の可胜性は䜎いず蚀えたすがPClass、チェルブヌルEmbarked=Cから飛び立぀1幎生たたは2幎生であるず、生存の可胜性が高たる可胜性があるず結論付けるこずができたす。たたはPClass 3、33歳未満の男性の堎合 ã€ãƒãƒ£ãƒ³ã‚¹ã‚‚増えたすか芚えおおいおください最初に女性ず子䟛たち。芖芚化を解釈しお、これらの結論を自分で匕き出すこずをお勧めしたす。これらの結論は、ツリヌの制限のためにのみ可胜でした。他の制限を適甚するこずによっお他に䜕が明らかになるこずができるか誰が知っおいたすかそれを詊しおみおください



この皮の最埌の䟋ずしお、パヌティショニングを特定の属性に制限する方法を瀺したいず思いたす。これは、䞍芁な盞関関係や匷制的な代替案でのツリヌ孊習を防ぐだけでなく、怜玢スペヌスを狭めるためにも適甚できたす。このアプロヌチにより、特に倚倉量パヌティショニングを䜿甚する堎合に、実行時間を倧幅に短瞮できたす。前の䟋に戻るず、属性をチェックするノヌドが芋぀かる堎合がありたすPassengerId。少なくずも生存に関する情報に貢献するべきではないので、モデル化したくないかもしれたせん。乗客IDの確認は、再トレヌニングの兆候である可胜性がありたす。パラメヌタで状況を倉えおみたしょうblacklist_attribute_indices。



    - SNIP -
    ...allowed_splits=[TwentyQuantileRangeSplit.build_with_restrictions(blacklist_attribute_indices=['PassengerId']),
    FixedValueSplit.build_with_restrictions(blacklist_attribute_indices=['Name Length']),
    ...],
    - SNIP -
    






なぜname lengthそれがたったく珟れるのかずあなたは尋ねるかもしれたせん。長い名前ダブルネヌムたたは[高貎な]タむトルは豊かな過去を瀺し、生存の可胜性を高める可胜性があるこずに泚意しおください。

远加のヒント同じものをい぀でもSplitRule2回远加できたす ã€‚特定のHDTreeレベルの属性のみをブラックリストに登録する堎合はSplitRule、レベル制限を远加しないでください。


デヌタポむントの予枬



すでにお気づきかもしれたせんが、scikit-learn共通むンタヌフェヌスを予枬に䜿甚できたす。これpredict()、predict_proba()同様に score()。しかし、さらに先に進むこずができたす。あるexplain_decision()゜リュヌションのテキスト衚珟を衚瀺したす䞀぀は。



print(hdtree_titanic_3.explain_decision(X_titanic_train[42]))


これは、ツリヌぞの最埌の倉曎であるず芋なされたす。コヌドはこれを出力したす



Query:
Query: 
 {'PassengerId': 273, 'Pclass': 2, 'Sex': 'female', 'Age': 41.0, 'SibSp': 0, 'Parch': 1, 'Fare': 19.5, 'Cabin': nan, 'Embarked': 'S', 'Name Length': 41}

Predicted sample as "Survived" because of: 
Explanation 1:
Step 1: Sex doesn't match value male
Step 2: Pclass doesn't match value 3
Step 3: Fare is OUTSIDE range [134.61, ..., 152.31[(19.50 is below range)
Step 4: Leaf. Vote for {'Survived'}
    


これは、欠萜しおいるデヌタに察しおも機胜したす。属性2Sexのむンデックスをmissing (Noneに蚭定したしょう



    passenger_42 = X_titanic_train[42].copy()
    passenger_42[2] = None
    print(hdtree_titanic_3.explain_decision(passenger_42))
    


Query: 
 {'PassengerId': 273, 'Pclass': 2, 'Sex': None, 'Age': 41.0, 'SibSp': 0, 'Parch': 1, 'Fare': 19.5, 'Cabin': nan, 'Embarked': 'S', 'Name Length': 41}

Predicted sample as "Death" because of: 
Explanation 1:
Step 1: Sex has no value available
Step 2: Age is OUTSIDE range [28.00, ..., 31.00[(41.00 is above range)
Step 3: Age is OUTSIDE range [18.00, ..., 25.00[(41.00 is above range)
Step 4: Leaf. Vote for {'Death'}
---------------------------------
Explanation 2:
Step 1: Sex has no value available
Step 2: Pclass doesn't match value 3
Step 3: Fare is OUTSIDE range [134.61, ..., 152.31[(19.50 is below range)
Step 4: Leaf. Vote for {'Survived'}
---------------------------------
    


これにより、すべおの決定パスが出力されたす䞀郚のノヌドでは決定を行うこずができないため、耇数ありたす。最終結果は、すべおの葉の䞭で最も䞀般的なクラスになりたす。



...その他の䟿利なもの



先に進んで、ツリヌビュヌをテキストずしお取埗できたす。



    Level 0, ROOT: Node having 596 samples and 2 children with split rule "Split on Sex equals male" (Split Score:
    0.251)
    -Level 1, Child #1: Node having 390 samples and 2 children with split rule "Age is within range [28.00, ..., 31.00["
    (Split Score: 0.342)
    --Level 2, Child #1: Node having 117 samples and 2 children with split rule "Name Length is within range [18.80,
    ..., 20.00[" (Split Score: 0.543)
    ---Level 3, Child #1: Node having 14 samples and no children with
    - SNIP -
    


たたは、すべおのクリヌンノヌドにアクセスしたすスコアが高い



    [str(node) for node in hdtree_titanic_3.get_clean_nodes(min_score=0.5)]
    


    ['Node having 117 samples and 2 children with split rule "Name Length is within range [18.80, ..., 20.00[" (Split
    Score: 0.543)',
    'Node having 14 samples and no children with split rule "no split rule" (Node Score: 1)',
    'Node having 15 samples and no children with split rule "no split rule" (Node Score: 0.647)',
    'Node having 107 samples and 2 children with split rule "Fare is within range [134.61, ..., 152.31[" (Split Score:
    0.822)',
    'Node having 102 samples and no children with split rule "no split rule" (Node Score: 0.861)']
    


HDTree拡匵



あなたがシステムに远加したいず思うかもしれない最も重芁なものはあなた自身のものSplitRuleです。分離ルヌルは、分離したいこずを実際に実行できたす...実装SplitRuleを通じお実装しAbstractSplitRuleたす。デヌタの取り蟌みやパフォヌマンスの評䟡などを自分で凊理する必芁があるため、これは少し泚意が必芁です。これらの理由により、分割タむプに応じお実装に远加できるミックスむンがパッケヌゞに含たれおいたす。ミックスむンはあなたのために難しい郚分のほずんどを行いたす。



曞誌




画像


オンラむンのSkillFactoryコヌスを受講しお、泚目を集める職業をれロから取埗する方法、たたはスキルず絊䞎をレベルアップする方法の詳现を確認しおください。





E







All Articles