ID3 アルゴリズムは、1986 年に Ross Quinlan によって提案された、デシジョン ツリーを生成するための古典的なアルゴリズムです。各フィーチャの情報ゲインを計算することにより、最適なフィーチャを分割ノードとして選択します。 ID3 アルゴリズムは機械学習やデータ マイニングの分野で広く使用されており、特に分類タスクで重要な役割を果たしています。これを使用すると、モデルの精度と解釈可能性が向上すると同時に、複数の特徴とカテゴリを持つ複雑なデータ セットを処理できるようになります。
デシジョン ツリーは、分類または回帰に使用されるツリー構造です。ノードとエッジで構成され、ノードは特徴または属性を表し、エッジは可能な値または決定を表します。ルート ノードは最も重要な特徴を表し、リーフ ノードは最終的な分類結果を表します。決定木は特徴量を段階的に判定して分類結果を決定し、各判定は木の枝に沿って進みます。この構造はシンプルかつ直感的で、理解と説明が簡単です。デシジョン ツリー アルゴリズムの鍵は、分類精度を最大化するために最適な特徴とデシジョン ポイントを選択することです。
ID3 アルゴリズムの基本的な考え方は、最適な特徴を選択することによって、各ノードでデータ セットをより小さなサブセットに分割することです。次に、終了条件に達するまで、同じ処理が各サブセットに再帰的に適用されます。分類問題では、通常、すべてのインスタンスが同じクラスに属するか、分割するフィーチャがもうないことが終了条件となります。回帰問題では、通常、終了条件が特定のエラーまたは深さの制限に達することになります。このトップダウンの再帰的セグメンテーション手法により、ID3 アルゴリズムはデシジョン ツリーを構築する際に特徴情報を最大限に活用できるようになり、効率的な分類と回帰タスクを実現できます。
#ID3 アルゴリズムによるデシジョン ツリー生成プロセス 1. 最適な機能の選択 計算 各フィーチャの情報ゲイン。最も高い情報ゲインを持つフィーチャが分割ノードとして選択されます。情報利得とは、特定の特徴、つまりエントロピーの変化に従ってデータセットを分割した後、分類結果の純度がどの程度改善されるかを指します。 情報利得の計算式は次のとおりです。 IG(D,F)=H(D)-\sum_{v\ in Values( F)}\frac{|D_v|}{|D|}H(D_v) ここで、IG(D,F) はデータ内の特徴 F の情報を表しますセット D ゲイン; H(D) はデータセット D のエントロピーを表します; D_v は特徴 F 上の値 v を持つサブセットを表します; Values(F) は特徴 F の値セットを表します。 2. データ セットをサブセットに分割します 選択した最良の特徴を分割ノードとして使用して、データ セット D をいくつかのサブセット D_1 に分割します。 、D_2、…、D_k、各サブセットは特徴 F の値に対応します。 3. サブツリーを再帰的に生成する サブセット D_i ごとに、サブツリーを再帰的に生成します。サブセット D_i 内のすべてのインスタンスが同じカテゴリに属している場合、または分割する特徴がもうない場合、このカテゴリを分類結果としてリーフ ノードが生成されます。 4. デシジョン ツリーの構築 分割ノードとサブツリーを接続してデシジョン ツリーを形成します。 ID3 アルゴリズムの Python 実装コードimport math class DecisionTree: def __init__(self): self.tree = {} def fit(self, X, y): self.tree = self._build_tree(X, y) def predict(self, X): y_pred = [] for i in range(len(X)): node = self.tree while isinstance(node, dict): feature = list(node.keys())[0] value = X[i][feature] node = node[feature][value] y_pred.append(node) return y_pred def _entropy(self, y): n = len(y) counts = {} for value in y: counts[value] = counts.get(value, 0) + 1 entropy = 0 for count in counts.values(): p = count / n entropy -= p * math.log2(p) return entropy def _information_gain(self, X, y, feature): n = len(y) values = set([x[feature] for x in X]) entropy = 0 for value in values: subset_x = [x forx in X if x[feature] == value] subset_y = [y[i] for i in range(len(y)) if X[i][feature] == value] entropy += len(subset_y) / n * self._entropy(subset_y) information_gain = self._entropy(y) - entropy return information_gain def _majority_vote(self, y): counts = {} for value in y: counts[value] = counts.get(value, 0) + 1 majority = max(counts, key=counts.get) return majority def _build_tree(self, X, y): if len(set(y)) == 1: return y[0] if len(X[0]) == 0: return self._majority_vote(y) best_feature = max(range(len(X[0])), key=lambda i: self._information_gain(X, y, i)) tree = {best_feature: {}} values = set([x[best_feature] for x in X]) for value in values: subset_x = [x for x in X if x[best_feature] == value] subset_y = [y[i] for i in range(len(y)) if X[i][best_feature] == value] subtree = self._build_tree(subset_x, subset_y) tree[best_feature][value] = subtree return tree
以上が決定木の生成プロセスはid3アルゴリズムに関連していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。