ホームページ バックエンド開発 Python チュートリアル Python 機械学習デシジョン ツリーの詳細な紹介

Python 機械学習デシジョン ツリーの詳細な紹介

Mar 19, 2017 pm 02:20 PM

デシジョン ツリー (DT) は、分類と回帰に使用される教師なし学習方法です。

利点: 計算の複雑さは高くなく、出力結果は理解しやすく、中間値の欠落の影響を受けず、無関係な特徴データを処理できます
欠点: 過剰一致の問題が発生する可能性があります
適用可能なデータ型: 数値および標準ソースコードのダウンロードを入力 https://www.manning.com/books/machine-learning-in-action

デモを実行する

キーアルゴリズム

if so return class tag;

else

関数createBranchを分割する最適な特徴を見つけて、戻り結果をブランチノードに追加します
returnブランチノード

対応するコード def createTree(dataSet,labels):
class
List

= [dataSetの例[-1]]はdataset[-1]ではありません {datasetの最後の要素}であり、このときdataset 各要素の最後から2番目の要素

if classList.

count

(classList[0 ]) == len(classList): 返された分類リストのカウント型が同じ場合は、この型を返します。子ノードが分類できるかどうか、分類できる場合は 1 つのタイプを返します。そうでない場合は、
再帰下方分類 dataSet にそれ以上の特徴がありません。要素が 1 つしかない場合は、 return MajorCnt(classList) bestFeat = BESTFEATURETOSPLIT(DATASET)最適な機能インデックスBestFeatLabel = labels [bestfeat]を選択し、このラベルフリッパーまたはサーフェスを取得しますmytree = {bestfeatlabel:{}}たとえば、datasetにある
uniquevals = set set (featValues) set uniqueVALS の for 値の種類に応じて分類されます: Sublabels = label [:] #copy all oflabels, so time do台無しに既存のラベル mytree [Value] [Value] = CreateTree ( splitdataset (dataset , bestFeat, value),subLabels) return myTree
データセットを分割する前後の情報の変化を情報ゲインと呼びます。データセットを分割する最大の原理は、順序付けされていないデータをより順序付けすることです。 これは、パイカットの原則として理解されます:




単位エントロピーを使用して、情報の複雑さと量を説明します。 ケーキの密度に対応して、同じ密度の垂直にカットされたケーキであれば、

各部分の重量 g = 合計 G * 大圏におけるその割合! 同様に、除算後の情報エントロピーが同じである場合、データの各小さな部分の小さい h = pro * 合計 H、および合計 h[i] = H となります。

ただし、必要なのはその逆です。必要なのは、同じ情報エントロピーではなく、不均一な情報です。たとえば、上の緑のものは草の餡、黄色のものはリンゴの餡、青のものは紫色のサツマイモの餡である可能性があり、それぞれ密度が異なります。 !

正しく分割する必要があります!それを整理して、さまざまな詰め物を近似する線を見つけます。 ここでの小さな h は最小化され、最終的には面積が変化しない状態で合計 H が最小値に近づきます。これが最適化問題の解を求めます。


デバッグプロセス
calcShannonEnt : [[1, 'no'], [1, 'no']] = 0 log(1,2) * 0.4 = 0 なぜ 0 なのか, pro は 1
log(prob,2) log(1,2) = 0;2^0=1 でなければならないため、prob : [[1, 'yes'], [1, 'yes'], [0, 'no']] = 0.91 >> * 0.6 = 0.55
dataSet の featVec の 25 行: 頻度のカウントfor prop
chooseBestFeatureToSplit()
0.9709505944546686 = calcShannonEnt(dataSet) : [[1, 1, 'はい'], [1, 1, 'はい'], [1, 0, 'いいえ' ], [0, 1, 'no'], [0, 1, 'no']]

#データセットの各サブ項目が同じカテゴリに属しているかどうかを検出します: 値がすべて a である場合、結果はすべて y または n になります。したがって、パラメーターは 2 つだけ入力されます
0.5509775004326937 = += prob * calcShannonEnt(subDataSet) サブセットを分離した後、確率 * シャノン ドロップ、取得された合計、元の全体的なシャノンのドロップ率

# 数据越接近,香浓熵值越少,越接近0 ,越不同,越多分逻辑,香浓熵就越大
# 只计算 其dataSet的featVec[-1] 结果标签
def calcShannonEnt(dataSet):
ログイン後にコピー


0.4199730940219749 infoGain = BaseEntropy - newEntropy

概要:

最初はコードが理解できず、何をするのか理解できませんでした。分類、私たちの目標は、大量のデータを分類し、ラベルでラベルを付けることです。
k-nearby assign([0, 0], group,labels, 3) と同様に、新しいデータ [0,0] がグループに分類され、k=3 近傍アルゴリズムに従ってデータにラベルが付けられることを意味します。 グループがラベルに対応!

後で見ました

Python 機械学習デシジョン ツリーの詳細な紹介

そして、データdataSetがディメンションの値を意味し、最後のものが魚であるかどうか、結果ラベルであることを理解しました


それで、私たちは次のようにする必要があります各次元を切り出します + 結果のラベルは比較と分類のために 2 次元配列に変換されます。テストでは、最初の n 次元の値をベクトルに入力し、出力は「はい」か「いいえ」になります。一見するとめまいがするように見えますが、コードを見るだけで簡単に理解できるので、考えを整理する必要があります。
ターゲットと初期データを理解すると、classList が結果ラベルであることがわかります。 、分類対象のデータセットに対応する対応する結果ラベルです
、ラベルは開始データセットの次元に対応する特徴名です。特徴の名前です。strname
bestFeatLabel は、最適な分類特徴の次元名です。 N
featValues は最初の次元または 2 番目の次元であり、bestFeatLabel の次元の下にある値の配列です。新しい分類比較を行うために使用されるのは、このディメンションの下のグループです。
uniqueVals は set を使用して同じカテゴリに属する​​かどうかを判断します。
例: dataSet = [[1, 1, 'yes'],[0, 1, 'yes'],[1, 0, 'no'] ,[1, 0 , 'no'],[0, 0, 'no']]
Labels = ['no surfaceing','flippers',]
createTree like this:{'flippers': {0: 'no ', 1: 'yes'}} は、表面化しない次元を直接省略します




最後に、ディシジョン ツリーについて段落で説明します:

ディシジョン ツリーの本質は、効率を高速化することです。 「最大最適」を使用して最初のネガティブ ラベルを分割すると、ポジティブ ラベルが引き続き分割されます。負の場合は、リーフ ノードの答えを直接返します。対応する他の次元は引き続き審査されません。

理論的には、デシジョン ツリー アルゴリズムを使用しなくても、すべてのデータを盲目的に使い尽くすことができます。つまり、毎回データのすべての次元を調べることができます。そして最後のラベルの答えがあります!次元数 * データ数!複雑さのために! これが記憶と一致する答えです!最適なエキスパートシステム! 起こらない状況を予測する能力が低い!でもデータ量は多くて速度も速いし、インテリジェントな感じもします! それは過去の経験の繰り返しだからです! でも、死んでしまったのでしょうか?いいえ、死んではいません!疲労は尽きませんが、デシジョン ツリーはダイナミックです。 教育的です!ツリーを変えよう!少なくとも、動的になるように構築されています。データが不完全な場合は、データも不完全になる可能性があります。判断が解決できる場合は 1 つの判断を使用し、解決できない場合は別の判断が必要です。寸法が大きくなりました!

以上がPython 機械学習デシジョン ツリーの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

正規表現とは何ですか? 正規表現とは何ですか? Mar 20, 2025 pm 06:25 PM

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

See all articles