このビデオでは、プレゼンターが scikit-learn のユーティリティを使用してトレーニング データ セットを準備するプロセスを詳しく説明し、前のビデオで説明した推定 API と密接に関連する変換 API を紹介します。エスティメーター API は主に分類器や回帰分析モデルなどの教師あり学習モデルに使用され、トランスフォーマー API はデータ変換用に設計されています。
このビデオでは、機械学習におけるデータ変換と処理のためのさまざまな手法について説明します。標準化などの単純な手順では、個別のライブラリや高度な技術に依存せずに手動で変換を実行できることが認められています。ただし、特徴の選択、特徴の次元削減、特徴の抽出などのより複雑な変換の場合、Transformer API などのツールを使用すると、利便性と効率が向上します。
次に、発表者はカテゴリデータの処理に焦点を当てます。彼らは、3 つの特徴列と 1 つのラベル列で構成されるおもちゃのデータセットを導入し、カテゴリ変数が序数と名義の 2 つのタイプに分類できることを強調しています。順序変数には特定の順序または階層がありますが、名義変数にはありません。例として、「サイズ」列が順序変数として強調表示されており、M、L、XXL などの T シャツのサイズが明確な順序を示しています。順序変数を処理するために、ビデオではマッピング辞書を使用して値を数値表現に変換することを推奨しています。
After talking about scikit-learn estimators (like classifiers), this video now introduced the concept of Transformers in scikit-learn. No, we are not talking...
パイプラインは、トランスフォーマー API を備えた推定器と考えてください。推定器と同様に、パイプラインにはトレーニング セットで使用できる適合メソッドがあります。内部的には、パイプラインは複数のフィットおよび変換ステップを経て、最終的に最終的なフィット ステップに到達します。パイプラインで定義する内容に応じて、データ スケーリング (標準化や最小-最大スケーリングなど)、次元削減、学習アルゴリズムのトレーニング、テスト セットで使用できる予測モデルの返しなど、さまざまなタスクを実行できます。 。
テスト セットで予測メソッドを呼び出すと、推定 API と同様に、パイプラインは内部で変換ステップを使用して、トレーニング セットで実行されたのと同じスケーリングを適用します。これにより、データ処理の一貫性が確保されます。最後に、パイプラインは適合モデルを使用して予測を行います (分類子の場合はクラス ラベルを返すなど)。
パイプラインの簡単なコード例でこれを説明してみましょう。ここでは、神聖な学習の sklearn.pipeline サブモジュールの make_pipeline 関数を使用してパイプラインを作成しています。これはパイプラインを作成する便利な方法です。この例では、標準スケーラーと K 最近傍分類器で構成される基本的なパイプラインを構築しています。前のビデオで説明したように、標準スケーラーは、平均と単位分散をゼロにすることでデータを標準化します。標準スケーラーと K 最近傍分類器をパイプラインのコンポーネントとして初期化します。
パイプラインが作成されたら、fit メソッドを使用してトレーニング データに基づいてパイプラインをトレーニングできます。次に、predict メソッドを使用して、テスト セットに対して予測を行うことができます。 Fit を呼び出すと、パイプラインはまず標準スケーラーを適用して、トレーニング データから平均と標準偏差を学習します。次に、この情報を使用してデータをスケーリングし、次のステップである K 最近傍分類器に渡します。分類器は標準化されたトレーニング セットを受け取り、その学習アルゴリズムを実行します。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
# Load the iris dataset
iris = load_iris()
X = iris.data
y = iris.target
# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2 , random_state= 42 )
# Create a pipeline
pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier())
# Define the parameter grid for grid search
param_grid = { 'kneighborsclassifier__n_neighbors' : [ 3 , 5 , 7 ],
'kneighborsclassifier__weights' : [ 'uniform' , 'distance' ]}
# Create a GridSearchCV object
grid_search = GridSearchCV(pipeline, param_grid, cv= 5 )
# Fit the models and perform grid search
grid_search.fit(X_train, y_train)
# Print the best parameters and best score
print( "Best Parameters: " , grid_search.best_params_)
print( "Best Score: " , grid_search.best_score_)
# Evaluate the best model on the test set
best_model = grid_search.best_estimator_
accuracy = best_model.score(X_test, y_test)
print( "Test Accuracy: " , accuracy)
I aleady mentioned that scikit-learn is a well-designed Python library, right?! In this video, I will show you another reason why that's true. Scikit-learn i...
Decision trees are one of the fundamental methods for machine learning on tabular data. Decision trees are the main algorithm behind popular methods such as ...
To help understand how we can implement decision trees neatly, it's worthwhile taking this little detour and learn about recursive algorithms.-------This vid...
Most often, we use CART decision trees in practice. However, there are more than just one type of decision tree out there as we will see in this video.------...
情報獲得方程式を考えてみましょう。親ノードの不純物関数があり、親ノードのデータセット D を表します。特徴値に基づいてこのデータセットを分割すると、異なる子ノードが生成されます。この概念は、カテゴリ特徴量と連続特徴量の両方に適用されます。連続特徴の場合は、しきい値に基づいてビンを作成することで分割できます。
This video explains why we use entropy (or Gini) instead of the misclassification error as impurity metric in the information gain equation of CART decision ...
情報獲得方程式を考えてみましょう。親ノードの不純物関数があり、親ノードのデータセット D を表します。特徴値に基づいてこのデータセットを分割すると、異なる子ノードが生成されます。この概念は、カテゴリ特徴量と連続特徴量の両方に適用されます。連続特徴の場合は、しきい値に基づいてビンを作成することで分割できます。
This video explains why we use entropy (or Gini) instead of the misclassification error as impurity metric in the information gain equation of CART decision ...
情報獲得の方程式を要約してみましょう。 D で示される親ノードから開始し、特徴値に基づいてこのデータセットを分割し、さまざまな子ノードを作成します。不純物関数は親ノードと子ノードの両方に使用され、データセットのサイズを考慮しながら不純物の値を合計します。親ノードにエントロピーを選択すると、子ノードにもエントロピーが使用されます。同じ原理がジニ不純物にも当てはまります。
This video covers some issues with decision trees (like overfitting) and discusses some improvements such as the gain ratio, pre-pruning, and post-pruning.--...
This last video of lecture 6 shows a quick demo of how to train and visualize a decision tree with scikit-learn.-------This video is part of my Introduction ...
5.5 Scikit-learn Transformer API (L05: Scikit-Learn による機械学習)
5.5 Scikit-learn Transformer API (L05: Scikit-Learn による機械学習)
このビデオでは、プレゼンターが scikit-learn のユーティリティを使用してトレーニング データ セットを準備するプロセスを詳しく説明し、前のビデオで説明した推定 API と密接に関連する変換 API を紹介します。エスティメーター API は主に分類器や回帰分析モデルなどの教師あり学習モデルに使用され、トランスフォーマー API はデータ変換用に設計されています。
発表者は、ランダム サブサンプリングに関連する問題に取り組むことから始めます。これには、データ セットを 2 つのサブセット (通常はトレーニング セットとテスト セット) に分割することが含まれます。彼らは、データセットをランダムに分割するとクラスラベルの分布が変化し、トレーニングセットとテストセットの両方でクラスが誤って表現される可能性があると説明しています。この課題を克服するために、発表者は層別分割を使用することを提案しています。これにより、クラスの分布または割合がサブセット内で確実に維持されます。彼らは、scikit-learn の model_selection サブモジュールの train_test_split 関数を使用して層別分割を実現する方法を示します。
次に、発表者は、最小-最大スケーリングと標準化という 2 つの手法に特に焦点を当てて、データ正規化の概念を詳しく掘り下げます。最小-最大スケーリングには、すべての値が 0 から 1 の範囲内に収まるように特徴をスケーリングすることが含まれます。発表者は、最小-最大スケーリングの式を提供します。これには、特徴列の各値を最小特徴値で減算して除算することが含まれます。それは最大特徴値と最小特徴値の差によって決まります。
対照的に、標準化には、平均が 0、標準偏差が 1 になるように特徴を変換することが含まれます。発表者は、特徴列の各値を特徴の平均で減算し、特徴の標準偏差で割る標準化の公式を説明します。彼らは、標準化は機械学習でより一般的に使用されており、特定の最適化アルゴリズムに特に役立つと述べています。
min-max スケーリングと標準化の実際の応用を説明するために、発表者はおもちゃの特徴列を使用した例を示します。彼らは、特徴が中心にあり、ほぼ単位分散がある限り、サンプル標準偏差を使用するか母集団標準偏差を使用するかの選択は、機械学習の結果に大きな影響を与えないことを強調しています。さらに、検証セットとテスト セットは目に見えないデータを表すため、トレーニング セットから計算されたパラメーター (平均と標準偏差) を使用して検証セットとテスト セットをスケールすることの重要性を強調しています。
このビデオでは、機械学習におけるデータ変換と処理のためのさまざまな手法について説明します。標準化などの単純な手順では、個別のライブラリや高度な技術に依存せずに手動で変換を実行できることが認められています。ただし、特徴の選択、特徴の次元削減、特徴の抽出などのより複雑な変換の場合、Transformer API などのツールを使用すると、利便性と効率が向上します。
次に、発表者はカテゴリデータの処理に焦点を当てます。彼らは、3 つの特徴列と 1 つのラベル列で構成されるおもちゃのデータセットを導入し、カテゴリ変数が序数と名義の 2 つのタイプに分類できることを強調しています。順序変数には特定の順序または階層がありますが、名義変数にはありません。例として、「サイズ」列が順序変数として強調表示されており、M、L、XXL などの T シャツのサイズが明確な順序を示しています。順序変数を処理するために、ビデオではマッピング辞書を使用して値を数値表現に変換することを推奨しています。
一方、ビデオでは名目上のカテゴリ データの例としてクラス ラベルが示されています。クラス ラベル間には固有の順序がないため、発表者は、ラベル エンコーダを使用して各ラベルに一意の整数値を割り当てることを提案します。ラベル エンコーダはクラス ラベル列に適合してマッピング ディクショナリを作成し、それを使用して文字列ラベルを整数ラベルに変換します。
「色」などの名目的な特徴列の場合、順序が暗示されていないため、ラベル エンコーダを利用すると誤解を招く情報が混入する可能性があります。このような場合、ビデオでは適切な代替手段としてワンホット エンコーディングを紹介しています。この手法では、公称特徴列の個別の値ごとに新しい特徴列を作成し、特定の値の有無を示すために 0 と 1 を割り当てます。結果として得られる特徴列の 1 つを削除すると、重要な情報を失うことなく冗長性を排除できることが述べられています。
このビデオでは、欠落データについて簡単に触れ、それを処理するための基本的なアプローチをいくつか提案しています。 1 つの戦略には、欠損値がランダムに発生し、体系的な問題を示していない場合に、欠損値を含む行または列を削除することが含まれます。これは、pandas ライブラリの Dropna() メソッドを使用して実現できます。もう 1 つのアプローチは、SimpleImputer トランスフォーマーなどのツールを使用して、平均や中央値などの統計的尺度でギャップを埋めることによって欠損データを補完することです。ただし、ビデオでは、意図しないバイアスが生じる可能性があるため、代入については慎重に検討する必要があると警告しています。
さらに、ビデオでは、問題を教師あり学習タスクとして扱うことで欠損値を予測できる可能性についても言及しています。このシナリオでは、欠落している特徴列をターゲット変数とみなすことができ、欠落データのない行を回帰モデルに適合させるためのトレーニング データとして利用できます。
このビデオでは、トレーニング データ セットの準備の重要性、層化分割の適用、最小-最大スケーリングと標準化を使用したデータの正規化など、データ変換技術の包括的な概要を提供します。さらに、カテゴリ データの処理、順序変数と名義変数の区別について説明し、マッピング ディクショナリ、ラベル エンコーダ、ワンホット エンコーディングなどの手法を紹介します。さらに、ビデオでは欠損データについて簡単に説明し、欠損値の削除や代入などのアプローチの概要を説明するとともに、教師あり学習による欠損値の予測の可能性についても言及しています。
5.6 Scikit-Learn パイプライン (L05: Scikit-Learn を使用した機械学習)
5.6 Scikit-Learn パイプライン (L05: Scikit-Learn を使用した機械学習)
さて、皆さん、いよいよ講義 5 の最後の部分に到達しました。私の意見では、これが最も興味深い部分である神聖な学習パイプラインです。これらのパイプラインは、データ処理と予測のステップをシームレスに組み合わせることができる非常に便利なオブジェクトまたはクラスです。概要を説明するために、パイプラインがどのように機能するかを示すフローチャートを示します。ただし、詳細についてはまだ詳しく説明しません。
パイプラインは、トランスフォーマー API を備えた推定器と考えてください。推定器と同様に、パイプラインにはトレーニング セットで使用できる適合メソッドがあります。内部的には、パイプラインは複数のフィットおよび変換ステップを経て、最終的に最終的なフィット ステップに到達します。パイプラインで定義する内容に応じて、データ スケーリング (標準化や最小-最大スケーリングなど)、次元削減、学習アルゴリズムのトレーニング、テスト セットで使用できる予測モデルの返しなど、さまざまなタスクを実行できます。 。
テスト セットで予測メソッドを呼び出すと、推定 API と同様に、パイプラインは内部で変換ステップを使用して、トレーニング セットで実行されたのと同じスケーリングを適用します。これにより、データ処理の一貫性が確保されます。最後に、パイプラインは適合モデルを使用して予測を行います (分類子の場合はクラス ラベルを返すなど)。
パイプラインの簡単なコード例でこれを説明してみましょう。ここでは、神聖な学習の sklearn.pipeline サブモジュールの make_pipeline 関数を使用してパイプラインを作成しています。これはパイプラインを作成する便利な方法です。この例では、標準スケーラーと K 最近傍分類器で構成される基本的なパイプラインを構築しています。前のビデオで説明したように、標準スケーラーは、平均と単位分散をゼロにすることでデータを標準化します。標準スケーラーと K 最近傍分類器をパイプラインのコンポーネントとして初期化します。
パイプラインが作成されたら、fit メソッドを使用してトレーニング データに基づいてパイプラインをトレーニングできます。次に、predict メソッドを使用して、テスト セットに対して予測を行うことができます。 Fit を呼び出すと、パイプラインはまず標準スケーラーを適用して、トレーニング データから平均と標準偏差を学習します。次に、この情報を使用してデータをスケーリングし、次のステップである K 最近傍分類器に渡します。分類器は標準化されたトレーニング セットを受け取り、その学習アルゴリズムを実行します。
予測中に、フィット ステップが必要ないことを除いて、同じプロセスが発生します。パイプラインは、トレーニング中に学習した統計を再利用してテスト データをスケールし、学習した分類子を適用して予測を行います。
要約すると、パイプラインを使用すると、トランスフォーマーやエスティメーターなどの複数のオブジェクトをチェーンして、一貫したワークフローを作成できます。これは、機械学習タスクにおけるデータ処理と予測のステップを処理するための便利で効率的な方法を提供します。
次に、モデル選択に単純なホールドアウト法を適用して、実際のパイプラインを見てみましょう。モデルの選択には、最適なモデルを選択するためのハイパーパラメーターの調整が含まれます。ホールドアウト法では、データをトレーニング セットとテスト セットに分割します。トレーニング セット内で、学習用のサブセットと検証用の別のサブセットにさらに分割し、さまざまなハイパーパラメーター設定でさまざまなモデルを評価します。
scikit-learnではグリッドサーチと呼ばれる手法を用いてホールドアウト法やハイパーパラメータチューニングを行うことができます。グリッド検索には、評価するハイパーパラメータの組み合わせを定義するパラメータ グリッドの作成が含まれます。たとえば、k 最近傍の場合、近傍の数 (k) と距離メトリック (p) に異なる値を考慮することができます。グリッド検索は、可能なすべての組み合わせを反復し、トレーニング セットでモデルをフィッティングし、検証セットでモデルを評価します。
グリッド検索は通常、K 分割相互検証とともに使用されますが、この例ではホールドアウト法に焦点を当てます。パイプラインを使用してホールドアウト法とグリッド検索を適用するには、scikit-learn の GridSearchCV クラスを利用できます。このクラスを使用すると、パラメーター グリッドとパイプラインを定義でき、モデルのフィッティングと評価のプロセスを処理できます。
以下は、パイプラインで GridSearchCV を使用する方法を示すコード スニペットの例です。
次に、評価したいさまざまなハイパーパラメータの組み合わせを指定するパラメータ グリッド param_grid を定義します。この場合、K 最近傍分類器の近傍数 (n_neighbors) と重み関数 (weights) を変更します。グリッド内のパラメーター名には、パイプライン コンポーネントの名前とその後に二重アンダースコア (__) が続く接頭辞が付けられることに注意してください。
GridSearchCV オブジェクトを作成し、パイプライン、パラメーター グリッド、および必要な数の相互検証フォールド (cv) を渡します。 GridSearchCV クラスは、トレーニング データにパイプラインを適合させ、検証セットでモデルを評価することにより、グリッド検索を自動的に実行します。
グリッド検索が完了したら、GridSearchCV オブジェクトの best_params_ 属性と best_score_ 属性を使用して、最良のパラメーターと最良のスコアにアクセスできます。これらの値を出力して、どのハイパーパラメータの組み合わせが最高のパフォーマンスをもたらしたかを確認します。
最後に、GridSearchCV オブジェクトの best_estimator_ 属性からアクセスし、スコア メソッドを使用して精度を計算することで、テスト セット上の最適なモデルを評価します。
この例では、パイプラインとグリッド検索を活用して、さまざまなハイパーパラメーター設定を効率的に調査し、ホールドアウト法を使用して最適なモデルを選択する方法を示します。パイプライン内でデータ処理ステップとモデル トレーニングを組み合わせることで、機械学習ワークフローを合理化し、さまざまなコンポーネントやハイパーパラメーターを簡単に実験できます。
6.1 デシジョン ツリーの概要 (L06: デシジョン ツリー)
6.1 デシジョン ツリーの概要 (L06: デシジョン ツリー)
最後に、新しいトピックであるデシジョン ツリーについて説明します。デシジョン ツリー アルゴリズムは、分類器と回帰モデルの反復的なトップダウン構築方法と考えることができます。ビデオを扱いやすく、長すぎないようにするために、講義を 7 つの部分に分割しました。
最初のパートでは、デシジョン ツリーとその概念的表現の概要を説明し、中心となる用語を紹介します。次に、決定木のコンテキストで再帰的アルゴリズムについて説明し、再帰的アルゴリズムとは何かについて簡単に説明します。この理解は、デシジョン ツリーの実行時の複雑さ (Big O) を分析するのに役立ちます。
次に、さまざまなタイプのデシジョン ツリーを見ていきます。現在、2 番目の学習者は、Leo Breiman によって開発された CART (分類および回帰ツリー) 決定木アルゴリズムを実装しています。ただし、ID3 や C4.5 などの他のアルゴリズムもあり、それぞれに独自の長所と短所があります。これらのさまざまな方法に触れ、ID3 デシジョン ツリーを実装するなどの宿題を課すこともあります。
講義では、デシジョン ツリーに使用されるさまざまな分割基準についても説明します。現在、2 番目の学習者は CART を使用します。これは通常、Gini 不純物に基づいています。ただし、さまざまな分割基準を組み合わせて一致させることができます。これらの分割基準は、デシジョン ツリーを分割するのに適した特徴を決定するために使用される関数または尺度を指します。ジニ不純物とエントロピーの基準について説明し、木の成長と分割の品質を評価する際に誤分類エラーよりもこれらの基準が優先される理由について説明します。
これらの詳細を説明したら、計算実行時間と分類精度の点でデシジョン ツリーをより効率的にできる改善点を詳しく掘り下げていきます。また、過剰適合の課題に対処し、それを軽減する手法を検討します。
最後に、人気のある機械学習ライブラリである scikit-learn でのデシジョン ツリーの操作を示すコード例を示します。この実践的な例は、デシジョン ツリーとその実装についての理解を深めるのに役立ちます。
ここで、デシジョン ツリーの基本概念を見ていきましょう。厳密には機械学習の問題ではありませんが、デシジョン ツリーは意思決定を伴う日常生活のシナリオに関連しています。たとえば、特定の瞬間に何をすべきかの決定について考えることができます。しなければならない仕事がある場合、私たちは家に留まって仕事を終えることを選ぶかもしれません。逆に、保留中の仕事がない場合は、天気の見通しに応じて、外に出ることを検討できます。
たとえば、晴れていて寒すぎない場合は、ビーチに行くことを選ぶかもしれません。ただし、曇りの場合は、代わりにランニングに行くことを選択するかもしれません。雨や雪が降った場合は、友達に空き状況を尋ねることができます。友達が忙しい場合は、家の中にいて本を読むなどの活動をすることにするかもしれません。一方、友達が暇であれば、映画館に行ったり、オンラインでビデオ ゲームをしたり、オンライン チャットをしたりするなどの選択肢を検討できます。
この基本的なアウトラインは決定木を表しており、各ノードは質問または決定に対応し、分岐はさまざまな選択肢につながります。ルート ノードはツリー内の最初の質問または決定を表し、リーフ ノードは最終出力です。内部ノードは、ツリーの流れを導く中間的な決定です。
さらに、決定ツリー内のノードはバイナリ ノードまたはマルチカテゴリ ノードに分類できます。バイナリ ノードは 2 つのオプションのみを提供しますが、マルチカテゴリ ノードは 3 つ以上のオプションをサポートします。ただし、前述したように、マルチカテゴリ分割はバイナリ分割に変換できます。
デシジョン ツリーは、プログラミングにおける if-else ステートメントと同様に、ルールのセットとして解釈することもできます。実際、デシジョン ツリーはルール セットに変換できますが、逆変換が常に可能であるとは限りません。デシジョン ツリーのこの特性により、デシジョン ツリーは解釈可能性と説明可能性が高くなります。これは、法律や医療の分野など、解釈可能性と説明可能性が重要な分野では非常に重要です。
デシジョン ツリーを構築するには、入力と対応する出力の例を含むデータセットが必要です。各例は、一連の特徴 (属性または予測子とも呼ばれる) とターゲット変数 (予測する出力) で構成されます。デシジョン ツリー アルゴリズムは、特徴とその関係を分析して、データを分割して予測を行うための最適な方法を決定します。
デシジョン ツリーを構築するプロセスには、各ノードでデータを分割するための最適な特徴を選択することが含まれます。目標は、分類精度の観点から最も多くの情報を得る、または最適な分割を提供する特徴を見つけることです。このプロセスは通常、ルート ノードから開始してリーフ ノードまで継続して再帰的に実行されます。
各ステップで、アルゴリズムはジニ不純物やエントロピーなどのさまざまな分割基準を評価します。ジニ不純度は、セットからランダムに選択された要素が誤って分類される確率を測定し、エントロピーは、セットからランダムに選択された要素のクラス ラベルを識別するために必要な情報の平均量を測定します。これらの基準は、分割後に得られるサブセットの純度を判断するのに役立ちます。
分割する特徴が選択されると、データは可能な特徴値に基づいてサブセットに分割されます。このプロセスは、停止基準が満たされるまで、サブセットごとに再帰的に繰り返されます。停止基準は、ツリーの深さが最大に達すること、リーフ ノードのサンプル数が最小に達すること、またはリーフ ノードで一定レベルの純度に達することなどです。
トレーニングされたデシジョン ツリーを使用して新しいインスタンスのターゲット変数を予測するには、ルート ノードから開始し、インスタンスの特徴値に基づいて適切な分岐をたどってツリーを下方向にたどります。最終的に、予測された出力を提供するリーフ ノードに到達します。
決定木にはいくつかの利点があります。これらは理解しやすく、解釈しやすいため、意思決定プロセスを視覚化して説明するための一般的な選択肢となっています。これらは数値特徴とカテゴリ特徴の両方を処理でき、分類タスクと回帰タスクの両方に使用できます。デシジョン ツリーは、分割プロセス中に欠損値や外れ値を効果的に処理できるため、欠損値や外れ値に対しても堅牢です。
ただし、デシジョン ツリーにはいくつかの制限もあります。トレーニング データを簡単に過剰適合させる可能性があり、その結果、まだ見たことのない例への一般化が不十分になります。これは、枝刈り手法を使用するか、ランダム フォレストや勾配ブースティングなどのアンサンブル手法を採用することで軽減できます。デシジョン ツリーはトレーニング データの小さな変化にも敏感であり、同様のデータセットに対して異なる分割が生成される可能性があります。さらに、デシジョン ツリーは、特徴間の複雑な関係を把握するのに苦労する場合があります。
結論として、デシジョン ツリーは、分類および回帰タスクに使用できる強力で解釈可能なモデルです。データをノードと分岐からなるツリー構造として表すことにより、明確な意思決定のフレームワークを提供します。分割基準と停止基準の選択は、過学習を処理する手法とともに、正確で堅牢なデシジョン ツリーを構築する上で重要な役割を果たします。
6.2 再帰的アルゴリズムと Big-O (L06: デシジョン ツリー)
6.2 再帰的アルゴリズムと Big-O (L06: デシジョン ツリー)
このビデオでは、分割統治の概念と密接に関係する再帰的アルゴリズムを中心に議論します。分割統治には、問題を小さなサブ問題に分割し、それらを個別に解決し、解決策を組み合わせることが含まれます。デシジョン ツリーのトレーニングと予測、およびさまざまな分割統治アルゴリズムは、この概念に関連付けられています。再帰は分割統治アルゴリズムを実装するために使用される一般的な手法ですが、これが唯一のアプローチではありません。
再帰の概念を理解するために、Python で実装された再帰アルゴリズムの例を見てみましょう。議論のために、関数の詳細を掘り下げる前にその目的を分析してもらうために、関数の実際の名前を意図的に隠しています。この関数が何をするのか少し考えてみることをお勧めします。ビデオを一時停止したり、Jupyter ノートブックで実験して動作を理解したりできます。
時間をかけて分析したのであれば、一緒にその機能を調べてみましょう。この特定の関数は Python リストで動作します。たとえば、[1, 2, 3] のようなリストを考えてみましょう。この関数の目的は、配列またはリストの長さを決定することです。それがどのように機能するかを調べてみましょう。この関数は、ここでは「X」として示されている入力を受け取り、2 つの条件をチェックします。まず、リストが空かどうかを確認します。そうである場合、空のリストの長さはゼロであるため、関数は 0 を返し、これが停止条件として機能します。それ以外の場合、リストが空でない場合、関数は 1 を返し、より小さい入力で自分自身を呼び出します。
これが抽象的だと思われる場合は、段階的に説明してみましょう。 [1, 2, 3] などの完全なリストから始めるとします。最初に、関数はリストが空かどうかをチェックしますが、空ではありません。その結果、「else」ステートメントに進み、1 を返し、より小さい入力で自分自身を再帰的に呼び出します。この場合、元のリストから最初の要素を削除するため、入力は [2, 3] になります。このプロセスを繰り返します。関数は再び 1 を返し、新しい入力 [3] で自分自身を呼び出し、最終的には空のリストで自分自身を呼び出します。
空のリストに到達すると、関数はもう一度「if」条件をチェックし、これが true になります。その結果、0 が返されます。式全体を評価すると、値 3 が得られます。したがって、この関数は再帰を使用して配列の長さを計算します。この関数は、関数自体の定義内でそれ自体を呼び出します。再帰はコンピュータ サイエンス理論における概念的に洗練された解決策ですが、実装において常に最も実用的なアプローチであるとは限らないことに注意してください。 Python では、再帰には自己呼び出しの数に制限があり、リストが大きすぎるとスタック オーバーフロー エラーが発生する可能性があります。
次に、再帰を使用する別の例を見てみましょう。ここでは、クイックソート アルゴリズムを使用して、リストまたは配列を並べ替える分割統治問題に取り組みます。前の関数と同様に、クイックソートは実装手段として再帰を使用します。このアルゴリズムでは停止条件が採用されており、配列に含まれる要素が 2 つ未満の場合、関数は配列をそのまま返します。それ以外の場合、アルゴリズムはコードの主要セクションを実行します。
クイックソートはどのように機能しますか?まず、ピボット (通常は配列の最初の要素) を選択します。次に、2 つの新しいリストを作成します。1 つはピボットより小さい要素を保持するリストで、もう 1 つはピボットより大きい要素を保持するリストです。ピボットを除いて配列を反復処理し、ピボットとの比較に基づいて各要素を小さいリストまたは大きいリストに分配します。次に、ピボットを中心要素として使用して、小さいリストと大きいリストの両方に対してクイックソートを再帰的に呼び出します。最終的には、
再帰呼び出しは、リストの要素が 2 つ未満の場合に停止条件に達します。その時点で、関数は単に並べ替えられたリストを返します。
プロセスを理解するために例を見てみましょう。ソートされていないリスト [7、2、5、1、9、3] があるとします。クイックソート アルゴリズムは次のように処理されます。
リストを再帰的に小さなサブリストに分割して並べ替えることにより、クイックソート アルゴリズムはリスト全体を効率的に並べ替えます。
結論として、再帰的アルゴリズムは分割統治アプローチにおいて重要な役割を果たします。彼らは問題をより小さなサブ問題に分割し、それらを個別に解決し、最終的には解決策を組み合わせて元の問題を解決します。再帰関数は、独自の定義内で自分自身を呼び出し、停止条件に達するまで小さな入力に対して繰り返し動作します。ただし、無限再帰を回避し、アルゴリズムが確実に解に収束するように終了条件を考慮することが重要です。
6.3 決定木の種類 (L06: 決定木)
6.3 決定木の種類 (L06: 決定木)
前回のビデオでは、デシジョン ツリーと再帰アルゴリズムの紹介に焦点を当てました。ここで、さまざまな種類のデシジョン ツリーを詳しく見てみましょう。特定の設計の選択を変更すると、デシジョン ツリー アルゴリズムの異なる実装がどのように生じるかを検討します。
まず、前のビデオで説明した、疑似コードでの一般的なデシジョン ツリー アルゴリズムを要約しましょう。私たちは、クラス ラベルが 1 と 0 だけであるバイナリ分類問題を扱いました。私たちのツリーは、バイナリ分割を伴うバイナリ構造に従いました。これは、各ノードがちょうど 2 つの子ノードに分割されたことを意味します。さらに、特徴値が 0 または 1 の可能性があるバイナリ特徴のみを考慮しました。
ただし、scikit-learn のデシジョン ツリー視覚化を使用して以前に示したように、連続特徴を利用してバイナリ分割に変換することもできます。たとえば、特徴を選択し、それを xj と呼び、「t」で示されるしきい値を使用してそれを 2 つの部分に分割できます。この分割基準は、xj が t より小さい、または xj が t 以上であると定義でき、これは true または false として表すことができます。これにより、分割プロセス中に決定しきい値を調整できるため、連続特徴であってもバイナリ分割を実行できます。宿題の中でそのような分割に取り組む機会があります。
ここで、デシジョン ツリー アルゴリズムの実装に焦点を当てましょう。デシジョン ツリーの各ノードで、xj で示される単一の特徴を考慮します。ここで、「j」の範囲は 1 から m で、最大 m 個の特徴を表します。親ノードを 2 つの子ノード、たとえば子 0 と子 1 に分割する場合、分割にどのフィーチャを選択するかを決定する必要があります。連続特徴の場合は、xj が特定の値 't' 以上であるかどうかを比較する、決定しきい値も考慮する必要があります。適切な特徴としきい値を選択することが重要であり、分割の品質を評価するには適切さの尺度が必要です。
一般的なツリー成長アルゴリズムを要約すると、親ノードが分割されたときに最大の情報利得が得られる特徴を選択します。情報の獲得は、分割の良さを測る尺度です。情報ゲインが高くなるほど、分割と選択される特徴 (連続特徴の分割しきい値を含む) が適切になります。次のビデオでは、分割の良さを評価するために一般的に使用される 2 つの尺度、エントロピーとジニ不純物について説明します。
アルゴリズムは特定の停止条件に従います。子ノードが純粋な場合、つまりノード内のすべてのデータ ポイントが同じクラス ラベルを持つ場合は停止します。あるいは、情報利得がゼロ以下の場合は停止し、改善がないことを示します。純粋なノードに到達するか、進歩に失敗すると、ツリーのそれ以上の成長は停止します。
決定木を成長させた後、それを使用して予測を行うことができます。親ノードと葉ノードで構成される複数のレベルを持つツリーがあるとします。新しいデータ ポイントのクラス ラベルを予測するには、データ ポイントの特徴値に基づいてツリーを走査します。各ノードでは、リーフ ノードに到達するまで、フィーチャ条件に基づいて対応する分岐をたどります。リーフ ノードの場合、多数決のアプローチを使用してクラス ラベルを決定します。これは、そのリーフ ノード内で最も頻繁に出現するクラス ラベルを予測することを意味します。
デシジョン ツリーはバイナリ分類問題とマルチクラス分類問題の両方を処理できることに注意することが重要です。前のスライドで説明した擬似コードはバイナリ分類に焦点を当てていましたが、デシジョン ツリーは任意の数のクラス ラベルを処理できます。多数決のアプローチは、クラスの数に関係なく適用できます。
デシジョン ツリー アルゴリズムを開発するとき、さまざまな設計上の選択肢に遭遇します。重要な問題の 1 つは、ノードをどのように分割するかです。分割の基準を定義し、異なる分割を比較および評価する方法を決定する必要があります。分割の品質を評価するために一般的に使用される 2 つの尺度は、エントロピーとジニ不純度です。
エントロピーは、ノード内の不純物または無秩序の尺度です。これは、そのノード内のデータ ポイントのクラス ラベルに関連付けられた不確実性を定量化します。ノードのエントロピーは、次の式を使用して計算されます。
Entropy(node) = - sum(p(i) * log2(p(i)))、すべてのクラス i について
ここで、p(i) は、クラス i に属するノード内のデータ ポイントの割合を表します。エントロピー値の範囲は 0 ~ 1 で、0 は純粋なノード (すべてのデータ ポイントが同じクラスに属する) を示し、1 は最大の不純度 (すべてのクラスにわたるデータ ポイントの均等な分布) を示します。
分割の品質を評価するために、結果として得られる子ノードのエントロピー値の加重平均を計算します。これは情報獲得として知られています。情報利得は次のように計算されます。
情報ゲイン = エントロピー(親) - sum((|Sv| / |S|) * エントロピー(Sv))、すべての子ノード v
ここで、Entropy(parent) は親ノードのエントロピー |Sv| です。 |S| は子ノード v のデータ ポイントの数を表します。親ノード内のデータ ポイントの総数です。情報ゲインは、特定の機能に基づいてノードを分割することによって達成されるエントロピーの削減を測定します。
ジニ不純物は、スプリットの品質を評価するために使用されるもう 1 つの尺度です。これは、ノード内のクラス ラベルの分布に基づいてクラス ラベルを割り当てた場合に、ノード内でランダムに選択されたデータ ポイントが誤って分類される確率を定量化します。ノードのジニ不純度は、次の式を使用して計算されます。
Gini(node) = 1 - sum(p(i)^2)、すべてのクラス i について
ここで、p(i) は、クラス i に属するノード内のデータ ポイントの割合を表します。エントロピーと同様に、Gini 不純物の値の範囲は 0 ~ 1 で、0 は純粋なノードを示し、1 は最大の不純物を示します。
分割の品質を評価するために、結果として得られる子ノードのジニ不純物値の加重平均を計算します。これはジニ不純物指数として知られています。ジニ不純物指数は次のように計算されます。
Gini Index = sum((|Sv| / |S|) * Gini(Sv))、すべての子ノード v
ここで |Sv| |S| は子ノード v のデータ ポイントの数を表します。親ノード内のデータ ポイントの総数です。ジニ指数は、特定の機能に基づいてノードを分割することによって達成されるジニ不純物の削減を測定します。
エントロピーとジニ不純物の両方が決定木アルゴリズムで一般的に使用され、どちらを選択するかは特定の問題とデータの特性によって異なります。 scikit-learn では、デシジョン ツリー モデルを構築するときに、基準パラメーターを選択して「エントロピー」または「ジニ」のいずれかを指定できます。
次のビデオでは、これらの尺度をさらに詳しく掘り下げ、それらを使用してデシジョン ツリー アルゴリズムで最適な分割を決定する方法について説明します。
6.4 分割基準 (L06: デシジョン ツリー)
6.4 分割基準 (L06: デシジョン ツリー)
ビデオでは、講演者がデシジョン ツリーの複雑さを掘り下げ、このフレームワーク内で基準を分割する概念を紹介しています。分割基準は本質的に、親ノードをその子ノードに分割するのに最も適した特徴を決定するために使用される基準または尺度です。一般に、データセットには、x1、x2、x3、...、xm で示される複数の特徴が含まれます。ここで、j は 1 から m の範囲の値を表します。
講演者は、デシジョン ツリーの各ノードで、分割プロセスに利用する特徴に関して重要な決定を下す必要があることを強調しました。最適な機能を特定するために、利用可能な機能を比較および評価するための特定の基準または尺度が定義されます。目的は、より適切な分割をもたらす特徴を選択し、それによって決定木の予測精度を高めることです。
デシジョン ツリーの仕組みを説明するために、スピーカーは 3 つの特徴 (x1、x2、x3、およびクラス ラベル y を示す列) で構成されるおもちゃのデータセットを提示します。このデータセットのクラス ラベルはバイナリであり、1 または 0 の値を取ります。講演者は、たった 2 つの特徴を使用するだけで、この特定のデータセットに対して 100% のトレーニング精度を達成することが可能であると述べています。
講演者は聴衆に、100% のトレーニング精度をもたらす 3 つの特徴に基づいた 2 つのルールを見つけるよう促します。彼らは、ビデオを一時停止して解決策を熟考することを提案しています。続いて、スピーカーは解決策を明らかにし、x1 と x2 のみが関連性があり有用な特徴である一方、x3 は一見ランダムであり、精度に寄与しないと説明します。
次に、話者は x1 と x2 の値をグラフ上にプロットすることでデータセットを視覚的に表します。グラフ上の赤い点はクラス ラベル 1 に属するデータ ポイントを表し、青い四角はゼロとラベル付けされたデータ ポイントを表します。データ ポイントで観察されたパターンに基づいて、話者は分割を作成し、その結果決定木が形成されます。
最初の分割は、x1 が 5.5 より大きいことに基づいています。この分割により、データが 2 つの領域に分割され、1 つは青、もう 1 つは赤のラベルが付けられます。講演者は、この分割により一部のデータ ポイントが正しく分類される一方で、他のデータ ポイントが誤って分類されることにも注意しました。後続の分割は、x2 が 10.5 より大きいことに基づいています。これにより、分類プロセスがさらに洗練され、最終的には 100% のトレーニング精度を達成するデシジョン ツリーが得られます。
明瞭さを高めるために、スピーカーはデシジョン ツリーをより明確に視覚的に表現し、各ノードに関連付けられた情報を明確にします。各ノードは、分割を受けて子ノードが作成される親ノードをシンボル化します。各ノードについて、分割値 (特徴量としきい値で表される)、エントロピー (情報内容の尺度)、トレーニング例の数 (サンプル)、クラス ラベルの分布 (会場)、および多数派クラスが表示されます。
デシジョン ツリーは、親ノードが子ノードを生み出す階層構造で表されます。講演者は各ノードの重要性を強調し、デシジョン ツリーがこれらのノードを使用して入力特徴に基づいて予測を行うことを強調します。
最後に、講演者は、機能 2 のみを利用して 100% のトレーニング精度を達成する別のアプローチについて言及します。彼らは、この代替アプローチに基づくデシジョン ツリーを示し、特徴 2 を値 7.5 と 10 で分割して、データ ポイントを目的のクラスに正確に分離する方法を示しています。
連続的な特徴があり、しきい値が正しく設定されている理想的なシナリオでは、前述の概念が適用されます。変数「V」を使用する代わりに、閾値以下の連続特徴を表す変数 xj を使用します。 2 番目の子ノードは、しきい値を超える値をシンボル化します。この場合、連続的な特徴を持っている場合は、以前と同様の式を使用できますが、関数にしきい値を組み込む必要があります。値を比較して、しきい値以上かどうかを確認できます。
したがって、連続特徴と CART (分類回帰木) に似たバイナリ ツリーがある場合、複数の子ノードではなく 2 つの子ノードを合計するだけで済みます。 1 つの子ノードはしきい値より大きい値に対応し、もう 1 つの子ノードはしきい値以下の値を表します。しきい値に基づいて考えられる 2 つの結果に注目するため、この単純化は論理的です。それにもかかわらず、この説明は緻密に見えるかもしれないこと、そしてまだ欠けている重要な側面がエントロピーの概念であることを認識することが重要です。エントロピーの概念については、後続のスライドで説明します。
この文脈では、エントロピーは情報理論の領域でクロード シャノンによって導入されたシャノン エントロピーに関係します。それは生物物理学や熱力学で使用されるエントロピーとは異なります。シャノン エントロピーは、デシジョン ツリー内の子ノードの不純性や無秩序を定量化するための指標として機能します。これは、ベルヌーイ分布に似た 2 つの結果を持つ離散確率変数によって伝達される情報の量を定量化します。ベルヌーイ分布では、p で示される確率パラメータは、イベントが発生する可能性を表します。
シャノンは、情報を値 1/p をエンコードするのに必要なビット数として定義しました。簡単に言うと、イベントに関連する確実性または不確実性のレベルを測定します。必要なビット数は、1/p の 2 を底とする対数として計算できます。確率 p が増加すると、必要なビット数が減少し、確実性の度合いが高くなります。逆に、確率がゼロに近づくと、必要なビット数が増加し、不確実性のレベルが高くなることを意味します。
この概念を例示するために、いくつかの例を考えてみましょう。確率が 0.5 の場合、必要なビット数は 1 になります。確率が 0 の場合、必要なビット数は無限大となり、絶対的な確実性を意味します。逆に、確率が 1 の場合、必要なビット数は 0 となり、完全な不確実性を示します。したがって、項 -log2(p) の値の範囲はマイナス無限大から 0 までとなります。
シャノンのエントロピーは、考えられるすべてのイベントの平均情報として計算されます。これは、各イベントに関連付けられた情報の加重平均を表し、重みはイベントのそれぞれの確率になります。決定木の場合、エントロピーの概念を適用して、子ノードの不純性を評価できます。ノードがクラス ラベルのバランスのとれた分布を示す場合、そのノードはより高いエントロピーを有し、より大きな不純物を意味します。逆に、ノードが 1 つのクラスが優勢な偏った分布を示している場合、そのノードのエントロピーは低くなり、不純物が少ないことを示します。不純物が多いノードほど分類目的で提供される情報が少なくなるため、この概念は直感的に一致します。
エントロピーは、デシジョン ツリーの子ノード内の不純物または無秩序を測定する手段を提供します。これにより、クラス ラベルの分布に基づいてノードの純度を評価できます。エントロピーが高いノードはより多様な分布を示し、エントロピーが低いノードはより均一な分布を示します。子ノードのエントロピーを考慮することで、デシジョン ツリーを構築する際に、より多くの情報に基づいた意思決定を行うことができます。
6.5 ジニとエントロピーと誤分類誤差 (L06: デシジョン ツリー)
6.5 ジニとエントロピーと誤分類誤差 (L06: デシジョン ツリー)
前回のビデオでは、デシジョン ツリーを成長させるために使用できるさまざまな分割基準について説明しました。ここで、分割基準のうち 2 つ、つまりジニ不純物とエントロピーが 3 つ目の基準である誤分類誤差よりも好まれる理由を詳しく見てみましょう。
要約すると、エントロピー、スケーリングされたエントロピー (Gini 不純物との比較のために 0.5 でスケーリング)、および誤分類誤差という 3 つの不純物尺度があります。これらの不純物対策の形状は異なります。エントロピーは凹関数として表示されますが、誤分類誤差は 0.5 に直線的な傾きを持つ鋭いピークを持ちます。
疑問が生じます: なぜ決定木の成長に誤分類エラーの代わりにエントロピーとジニ不純物を使用するのでしょうか?この疑問はエントロピーだけでなくジニ不純物にも当てはまります。このビデオではエントロピーに焦点を当てますが、この概念はジニ不純物にも同様に当てはまります。
情報獲得方程式を考えてみましょう。親ノードの不純物関数があり、親ノードのデータセット D を表します。特徴値に基づいてこのデータセットを分割すると、異なる子ノードが生成されます。この概念は、カテゴリ特徴量と連続特徴量の両方に適用されます。連続特徴の場合は、しきい値に基づいてビンを作成することで分割できます。
不純物の尺度は親ノードと子ノードの両方に使用され、親ノードと現在の子ノードの元のデータセットのサイズを考慮しながらそれらを合計します。一般に、親に対して 1 つの不純物メジャーを選択すると、子ノードに対してもその不純物の一貫性が保たれます。
実際には、誤分類エラーには欠点があるため、このビデオで説明するように誤分類エラーの使用を避ける傾向があります。エントロピーと誤分類誤差がどのように計算されるかを簡単に振り返ってみましょう。エントロピーは、各クラスのラベルの割合とその割合の対数の積を合計することによって計算されます。一方、誤分類誤差は 0/1 損失に基づいており、誤って分類されたラベルの割合を測定します。
ここで、エントロピーと誤分類誤差に焦点を当てますが、重要な違いの 1 つはその形状です。エントロピーは凹面ですが、誤分類エラーは凹面ではありません。この違いは、決定木の成長において誤分類エラーよりもエントロピーが好まれる理由に影響します。
これを説明するために、単純なおもちゃのデータセットを考えてみましょう。親ノードには、クラス 1 の例が 40 個、クラス 0 の例が 80 個あります。特徴値に基づいてデータセットを分割すると、最終的には異なるクラス分布を持つ子ノードが生成されます。この分割により、親と比較してノードの純度が向上するかどうかを評価する必要があります。
親ノードと子ノードのエントロピーを計算すると、子ノード 2 のエントロピーが親ノードよりも低く、純度が向上していることがわかります。ただし、子ノード 1 は親ノードよりも悪いです。平均して、分割が有益かどうかを判断する必要があります。
分割の品質を測定するには、親ノードと子ノードのエントロピー値を考慮する情報ゲインを使用します。情報ゲインが正の場合、分割が良好であることを示します。この例では、情報ゲインは正であり、エントロピーに基づいて有利な分割が行われていることを示しています。
次に、誤分類エラーを使用して同じシナリオを調べてみましょう。親、子ノード 1、および子ノード 2 の誤差は、誤って分類されたラベルの割合に基づいて計算されます。これらの誤差値を情報利得の式に代入すると、情報利得がゼロであることがわかります。情報利得がゼロということは、分割にメリットがないことを意味します。したがって、これらのノードは存在しないため、他の機能を考慮する必要があります。
結論として、決定木を成長させる場合に誤分類エラーよりもエントロピーが好まれる主な理由は、エントロピーがデータの不確実性と無秩序をより効果的に捕捉するためです。エントロピーの凹型により、異なるクラス分布をより適切に区別できるようになり、不純物のより微妙な尺度が得られます。一方、誤分類誤差はより単純化された尺度であり、誤分類されたラベルの割合のみを考慮し、クラスの不確実性や分布は捕捉しません。
エントロピーの凹型により、小規模クラスと大規模クラスの両方の不均衡にペナルティを与えることができます。クラスの割合の変化に敏感で、より均等に分散されたクラスに高い重みを与えます。この特性により、クラス分布が不均衡なデータセットを扱う場合にエントロピーが特に役立ちます。
対照的に、誤分類誤差は線形の形状をしており、0.5 に鋭いピークがあります。すべての誤分類を同等に扱い、異なる程度の誤分類を区別しません。これにより、誤分類エラーはクラスの不均衡の影響を受けやすくなり、不均衡なデータセットを含むシナリオでは効果が低くなります。
さらに、エントロピーと誤分類誤差の形状の違いは、決定木の学習プロセスに影響を与えます。デシジョン ツリーは、情報の獲得を最大化するか不純物を減らす分割を見つけることを目的としています。エントロピーは不純物のよりきめ細かい測定値を提供するため、デシジョン ツリーがより多くの情報に基づいて正確な分割を行うことができます。
エントロピーを不純物の尺度として使用することにより、デシジョン ツリーは特徴とクラスの間の複雑な関係を捉えることができます。連続的特徴とカテゴリ的特徴の両方を処理でき、データ内の複雑なパターンを発見できます。
要約すると、エントロピーは、データの不確実性と無秩序をより効果的に捉えるため、デシジョン ツリーを成長させるには誤分類エラーよりも優先されます。その凹型の形状により、異なるクラス分布をより適切に区別できるようになり、不均衡なデータセットに対してより堅牢になります。エントロピーを使用することで、デシジョン ツリーはより多くの情報に基づいて分割を行い、機能とクラス間の複雑な関係を把握できます。
6.5 ジニとエントロピーと誤分類誤差 (L06: デシジョン ツリー)
6.5 ジニとエントロピーと誤分類誤差 (L06: デシジョン ツリー)
前回のビデオでは、デシジョン ツリーを成長させるために使用できるさまざまな分割基準について説明しました。ここで、分割基準のうち 2 つ、つまりジニ不純物とエントロピーが 3 つ目の基準である誤分類誤差よりも好まれる理由を詳しく見てみましょう。
要約すると、エントロピー、スケーリングされたエントロピー (Gini 不純物との比較のために 0.5 でスケーリング)、および誤分類誤差という 3 つの不純物尺度があります。これらの不純物対策の形状は異なります。エントロピーは凹関数として表示されますが、誤分類誤差は 0.5 に直線的な傾きを持つ鋭いピークを持ちます。
疑問が生じます: なぜ決定木の成長に誤分類エラーの代わりにエントロピーとジニ不純物を使用するのでしょうか?この疑問はエントロピーだけでなくジニ不純物にも当てはまります。このビデオではエントロピーに焦点を当てますが、この概念はジニ不純物にも同様に当てはまります。
情報獲得方程式を考えてみましょう。親ノードの不純物関数があり、親ノードのデータセット D を表します。特徴値に基づいてこのデータセットを分割すると、異なる子ノードが生成されます。この概念は、カテゴリ特徴量と連続特徴量の両方に適用されます。連続特徴の場合は、しきい値に基づいてビンを作成することで分割できます。
不純物の尺度は親ノードと子ノードの両方に使用され、親ノードと現在の子ノードの元のデータセットのサイズを考慮しながらそれらを合計します。一般に、親に対して 1 つの不純物メジャーを選択すると、子ノードに対してもその不純物の一貫性が保たれます。
実際には、誤分類エラーには欠点があるため、このビデオで説明するように誤分類エラーの使用を避ける傾向があります。エントロピーと誤分類誤差がどのように計算されるかを簡単に振り返ってみましょう。エントロピーは、各クラスのラベルの割合とその割合の対数の積を合計することによって計算されます。一方、誤分類誤差は 0/1 損失に基づいており、誤って分類されたラベルの割合を測定します。
ここで、エントロピーと誤分類誤差に焦点を当てますが、重要な違いの 1 つはその形状です。エントロピーは凹面ですが、誤分類エラーは凹面ではありません。この違いは、決定木の成長において誤分類エラーよりもエントロピーが好まれる理由に影響します。
これを説明するために、単純なおもちゃのデータセットを考えてみましょう。親ノードには、クラス 1 の例が 40 個、クラス 0 の例が 80 個あります。特徴値に基づいてデータセットを分割すると、最終的には異なるクラス分布を持つ子ノードが生成されます。この分割により、親と比較してノードの純度が向上するかどうかを評価する必要があります。
親ノードと子ノードのエントロピーを計算すると、子ノード 2 のエントロピーが親ノードよりも低く、純度が向上していることがわかります。ただし、子ノード 1 は親ノードよりも悪いです。平均して、分割が有益かどうかを判断する必要があります。
分割の品質を測定するには、親ノードと子ノードのエントロピー値を考慮する情報ゲインを使用します。情報ゲインが正の場合、分割が良好であることを示します。この例では、情報ゲインは正であり、エントロピーに基づいて有利な分割が行われていることを示しています。
次に、誤分類エラーを使用して同じシナリオを調べてみましょう。親、子ノード 1、および子ノード 2 の誤差は、誤って分類されたラベルの割合に基づいて計算されます。これらの誤差値を情報利得の式に代入すると、情報利得がゼロであることがわかります。情報利得がゼロということは、分割にメリットがないことを意味します。したがって、これらのノードは存在しないため、他の機能を考慮する必要があります。
結論として、決定木を成長させる場合に誤分類エラーよりもエントロピーが好まれる主な理由は、エントロピーがデータの不確実性と無秩序をより効果的に捕捉するためです。エントロピーの凹型により、異なるクラス分布をより適切に区別できるようになり、不純物のより微妙な尺度が得られます。一方、誤分類誤差はより単純化された尺度であり、誤分類されたラベルの割合のみを考慮し、クラスの不確実性や分布は捕捉しません。
エントロピーの凹型により、小規模クラスと大規模クラスの両方の不均衡にペナルティを与えることができます。クラスの割合の変化に敏感で、より均等に分散されたクラスに高い重みを与えます。この特性により、クラス分布が不均衡なデータセットを扱う場合にエントロピーが特に役立ちます。
対照的に、誤分類誤差は線形の形状をしており、0.5 に鋭いピークがあります。すべての誤分類を同等に扱い、異なる程度の誤分類を区別しません。これにより、誤分類エラーはクラスの不均衡の影響を受けやすくなり、不均衡なデータセットを含むシナリオでは効果が低くなります。
さらに、エントロピーと誤分類誤差の形状の違いは、決定木の学習プロセスに影響を与えます。デシジョン ツリーは、情報の獲得を最大化するか不純物を減らす分割を見つけることを目的としています。エントロピーは不純物のよりきめ細かい測定値を提供するため、デシジョン ツリーがより多くの情報に基づいて正確な分割を行うことができます。
エントロピーを不純物の尺度として使用することにより、デシジョン ツリーは特徴とクラスの間の複雑な関係を捉えることができます。連続的特徴とカテゴリ的特徴の両方を処理でき、データ内の複雑なパターンを発見できます。
要約すると、エントロピーは、データの不確実性と無秩序をより効果的に捉えるため、デシジョン ツリーを成長させるには誤分類エラーよりも優先されます。その凹型の形状により、異なるクラス分布をより適切に区別できるようになり、不均衡なデータセットに対してより堅牢になります。エントロピーを使用することで、デシジョン ツリーはより多くの情報に基づいて分割を行い、機能とクラス間の複雑な関係を把握できます。
6.6 改善と過学習への対処 (L06: デシジョン ツリー)
6.6 改善と過学習への対処 (L06: デシジョン ツリー)
前回のビデオでは、デシジョン ツリーを成長させるために使用できるさまざまな分割基準について説明しました。ここで、分割基準のうち 2 つ、つまりジニ不純物とエントロピーが 3 つ目の基準である誤分類誤差よりも好ましい理由を詳しく掘り下げていきます。
記憶を新たにするために、エントロピー、スケーリングされたエントロピー (ジニ不純物との比較用)、および誤分類誤差という 3 つの分割基準を思い出してみましょう。これらの不純物尺度の形状は次のように視覚化できます。エントロピーは凹関数であり、長い黒い線で表されます。スケーリングされたエントロピーも凹面であり、エントロピーに 0.5 を乗じることによって得られます。誤分類誤差は 0.5 で鋭いピークと直線的な傾きを示します。
ここで、疑問が生じます。デシジョン ツリーを成長させるときに、誤分類エラーの代わりにエントロピーとジニ不純物を使用することを好むのはなぜでしょうか。この質問はエントロピーとジニ不純物の両方に当てはまりますが、話を簡単にするために、この議論ではエントロピーに焦点を当てます。
情報獲得の方程式を要約してみましょう。 D で示される親ノードから開始し、特徴値に基づいてこのデータセットを分割し、さまざまな子ノードを作成します。不純物関数は親ノードと子ノードの両方に使用され、データセットのサイズを考慮しながら不純物の値を合計します。親ノードにエントロピーを選択すると、子ノードにもエントロピーが使用されます。同じ原理がジニ不純物にも当てはまります。
実際には、誤分類エラーには欠点があるため、使用しないことをお勧めします。これについては、このビデオで説明します。これをさらに理解するために、エントロピー、ジニ不純物、および誤分類誤差の式を簡単に確認してみましょう。
エントロピーは、クラス ラベルの比率を代入して合計することによって計算されます。これは対数を使用し、クラスを合計し、各クラスの割合にその割合の対数を掛けるという式で表されます。
一方、Gini 不純度は、クラス ラベルの比率を 2 乗して 1 から減算します。対数の使用を避け、1 からクラス ラベルの比率の二乗の合計を引いたものとして表されます。
誤分類エラーは、誤分類されたラベルの割合を測定する 0-1 損失に基づいています。たとえば、ラベル 001111 のノードがある場合、それは多数決クラスであるため、多数決では 0 が予測されます。ただし、分布を考慮すると、6 回中 4 回しか正解しないため、精度は 4/6、つまり 66.6% になります。誤差は 2/6、つまり 33.3% になります。
エントロピーと誤分類誤差を比較すると、エントロピーが凹面であるのに対し、誤分類誤差は 0.5 で鋭いピークと直線的な傾きを示すことが観察されます。この違いは、デシジョン ツリーを成長させる際に誤分類エラーよりもエントロピーが優先される理由を理解する上で重要です。
これを説明するために、クラス 1 の 40 個の例とクラス 0 の 80 個の例を含む親ノードを持つ単純なおもちゃのデータセットを考えてみましょう。分割するのに最適な特徴が x1 であると仮定すると、特徴値が 1 か 0 かに基づいてデータセットを分割します。 2 つの子ノード (子ノード 1 と子ノード 2) を取得します。クラス分布を分析すると、子ノード 2 は親よりも純粋である一方、子ノード 1 はより悪いことがわかります。
重要な問題は、この機能について分割する価値があるかどうかです。これを決定するために、エントロピーを使用して情報ゲインを計算します。親、子ノード 1、および子ノード 2 のエントロピー値を計算します。これらの値を比較すると、子ノード 2 の方が優れているのに対し、子ノード 1 は親よりも劣っていることがわかります。情報ゲインの式を適用すると、この分割の情報ゲインが正であることがわかり、分割によってデータセット全体の純度が向上することがわかります。
ここで、エントロピーの代わりに不純物の尺度として誤分類誤差を考えてみましょう。親、子ノード 1、および子ノード 2 の誤分類誤差を計算します。これらの値を比較すると、子ノード 2 の誤分類エラーは親よりも低く、子ノード 1 の誤分類エラーはより高いことがわかります。
ただし、誤分類誤差を使用して情報ゲインを計算すると、問題が発生します。情報ゲインの式には、親ノードの誤分類誤差から子ノードの重み付き誤分類誤差を減算することが含まれます。誤分類誤差は一次関数であるため、子ノードの誤分類誤差が親ノードの誤分類誤差よりも大きい場合、情報ゲインは負になる可能性があります。
この例では、子ノード 2 の誤分類誤差は親ノードよりも低いにもかかわらず、子ノード 1 の誤分類誤差は高く、その結果、負の情報利得が生じます。これは、誤分類エラーを不純物の尺度として使用すると、たとえ子ノードの 1 つの純度が向上したとしても、分割が妨げられることを意味します。
一方、不純物尺度としてエントロピーまたはジニ不純物を使用する場合、情報利得は常に非負になります。エントロピーとジニ不純物は両方とも凹関数です。これは、子ノードの不純物値が常に親ノードの不純物値以下であることを意味します。これにより、分割によって少なくとも 1 つの子ノードの純度が向上するたびに、情報の利得が確実にプラスになります。
エントロピーまたはジニ不純物を不純物尺度として使用することにより、デシジョン ツリーは情報ゲインに基づいて分割を行うことができ、これによりツリーを成長させ、予測力を向上させるための原則的なアプローチが提供されます。一方、誤分類エラーは、最適ではない分割や精度の低いデシジョン ツリーにつながる可能性があります。
要約すると、決定木アルゴリズムにおける誤分類エラーよりもエントロピーとジニ不純物が優先されるのは、それらの数学的特性に根ざしています。エントロピーとジニ不純物の凹型の性質により、子ノードの純度を向上させる分割の情報ゲインは確実にプラスになりますが、誤分類誤差の線形の性質により、マイナスの情報ゲインと次善の分割が発生する可能性があります。
6.7 Scikit-Learn でデシジョン ツリーを実装するコード例 (L06: デシジョン ツリー)
6.7 Scikit-Learn でデシジョン ツリーを実装するコード例 (L06: デシジョン ツリー)
講義 6 の締めくくりとして、特に決定木アルゴリズムに焦点を当てて、scikit-learn を使用したコード例を検討します。 Scikit-learn は、その速度、効率性、堅牢性により、実際の機械学習プロジェクトに推奨されます。このデモンストレーションでは scikit-learn を使用しますが、アルゴリズムの理解を深めるために、宿題としてデシジョン ツリーを最初から実装することになることに注意してください。
まず、ウォーターマーク パッケージなどの必要なパッケージをインポートしましょう。これは、使用されているソフトウェアのバージョンを追跡するのに役立ちます。これは、ソフトウェアのバージョンが古いためにコードの実行時に問題が発生した場合に役立ちます。次に、分類タスクによく使用される人気のあるデータセットであるアヤメ データセットを読み込みます。 iris のようなよく知られたデータセットを使用すると、データの説明ではなく、コードとその機能を理解することに重点を置くことができます。
データセットをトレーニング セットとテスト セットに分割し、データの 30% をテストに割り当てました。このノートブックではチューニングを実行しないことに注意してください。グリッド検索などの手法を使用してデシジョン ツリーのハイパーパラメータを調整することもできますが、ここではシンプルなままにし、調整をスキップします。したがって、トレーニング セットのみでデシジョン ツリーをトレーニングし、テスト セットでそのパフォーマンスを評価するため、別の検証セットは必要ありません。
決定領域のプロットに進み、決定木分類器を初期化し、ハイパーパラメーターを設定します。この場合、教育目的のために、情報獲得のエントロピー基準を選択し、最大深度を 2 に設定します。さらに、決定木をトレーニング データに適合させ、決定領域をプロットします。決定領域を視覚化することで、選択した特徴に基づいてデシジョン ツリーがデータをどのように分離するかを観察できます。
デシジョン ツリー分類器に設定できるさまざまなオプションとハイパーパラメーターを検討します。これらには、各ノードでの分割の実行方法を決定するスプリッターと、ノードとリーフ ノードの分割に必要な最小サンプルに関連するパラメーターが含まれます。不純物の尺度を選択したり、分割のランダム性を制御したりするためのオプションもあります。これらのハイパーパラメータは、特定の問題やデータセットに基づいて調整および調整できます。
次に、graphviz ライブラリを使用してデシジョン ツリーを視覚化します。デシジョン ツリーをドット ファイルとしてエクスポートし、ツリー構造をグラフとして表します。グラフ内のノード、エッジ、ラベルの外観をカスタマイズできます。 graphviz ライブラリを pydotplus ライブラリと組み合わせて使用すると、ドット ファイルを個別に保存せずに、デシジョン ツリーを直接プロットできます。このようにして、ノートブック自体内でデシジョン ツリーを視覚化できます。
デシジョン ツリー プロットを表示するには、ipython 表示モジュールを使用して生成された PNG ファイルを読み込みます。 ipython ディスプレイから画像クラスをインポートし、それを使用して PNG ファイルをロードします。これにより、Jupyter Notebook でデシジョン ツリー プロットを直接表示できるようになります。デシジョン ツリー プロットには、選択したフィーチャに基づいて、分割とデシジョン境界がそれぞれ垂直線と水平線として表示されます。
要約すると、このコード例は、scikit-learn を使用してデシジョン ツリー分類器を実装および視覚化する方法を示しています。デシジョン ツリー アルゴリズムは、分類タスクに解釈可能なモデルを提供し、さまざまなハイパーパラメータを使用して調整してパフォーマンスを向上させることができます。デシジョン ツリーを視覚化すると、アルゴリズムが入力特徴に基づいてどのように意思決定を行うかを理解するのに役立ちます。