適切なバランスを取る:機械学習モデルにおける過学習と過小適合の理解

適切なバランス:機械学習モデルの過学習と過小適合の理解

この記事では、機械学習とディープラーニングの観点から、オーバーフィッティングとアンダーフィッティングの基本的な概念を説明します。

写真:Ag PICによるUnsplash

アンダーフィッティングとオーバーフィッティングを問題として見る

機械学習の問題に取り組むすべての人は、自分のモデルが可能な限り最適に動作することを望んでいます。しかし、モデルが望むように最適に動作しない場合もあります。理想的な精度よりも悪い精度や優れた精度を持つ場合があります。機械学習では、これらのいずれも問題とされます。

いくつかの人々は、理想的な精度よりも低い精度を持つことが問題とされるのは分かるかもしれませんが、なぜ上記の理想的な精度も問題として考えているのでしょうか?

時には、モデルが無意味なもの、つまり不要な特徴量やデータのノイズの関係を見つけようとすることがあります。このような余分な精度は、モデルに追加されます。以下の例でこれを理解しましょう。

例えば、人の給与を予測するモデルを訓練しているとします。この問題に対して、私たちのデータには以下の4つの特徴量があります。それは、人の名前、教育、経験、スキルセットです。私たちの常識に基づいて、人の名前は給与に影響を与える要因ではないことを知っています。しかし、この事実にもかかわらず、人の名前をデータの特徴量の1つとして使用すると、モデルは名前と給与の関係を見つけようとするかもしれません。そして、このような関係がモデルに余分な精度を加える可能性があります。これにより、理想的な精度よりも高い精度が生じ、このような場合、モデルは誤って訓練されます。

基本的な用語

話を進める前に、アンダーフィッティングとオーバーフィッティングを理解するために必要な2つの異なる種類のエラーを理解しましょう。

  1. バイアスエラー:バイアスエラーは、訓練データと訓練されたモデルを使用して見つけるエラーです。つまり、ここでは、モデルの訓練に使用される同じデータを使用してエラーを見つけています。エラーは平均二乗誤差、平均絶対誤差など、任意の種類のエラーである可能性があります。
  2. 分散エラー:分散エラーは、テストデータと訓練されたモデルを使用して見つけるエラーです。ここでも、エラーは任意の種類のエラーである可能性があります。分散を見つけるために任意の種類のエラーを使用できるにも関わらず、バイアスと分散の値を比較するためにバイアスの見つけ方と同じエラーを使用します。

訓練されたモデルの理想的な状態は、低いバイアスと低い分散を持つことです。

一般生活におけるオーバーフィッティングとアンダーフィッティングとは何か?

例えば、外国を訪れてタクシー運転手に騙されたとします。その国のすべてのタクシー運転手が欲張りだと言いたくなるかもしれません。これを過度一般化と言います。

訓練された機械学習とディープラーニングモデルでも、過度一般化が起こることがあります。機械学習とディープラーニングの場合、過度一般化はモデルのオーバーフィッティングとして知られています。

同様に、過度に一般化されないことをアンダーゼネラリゼーションとして、モデルのアンダーフィッティングと呼びます。

機械学習の観点からオーバーフィッティングとは何ですか?

モデルが低いバイアスと高い分散を持つ場合、モデルはオーバーフィッティングに苦しんでいると言います。

オーバーフィッティングは、モデルが訓練データの量とノイズの多さに対して複雑すぎる場合に起こります。

オーバーフィッティングの問題への解決策

  1. 次のいずれかの方法でモデルを単純化する:

パラメータの少ない機械学習モデルを選択する

機械学習モデルの訓練に使用される特徴量または列を減らす

モデルを制約する(正則化手法の使用)

2. より多くの訓練データを収集する。

3. データのノイズを減らす。ノイズはデータのエラーや外れ値の存在などです。

4. アーリーストッピングを使用する

アンダーフィッティングとは何ですか?

アンダーフィッティングは、機械学習モデルが独立変数と従属変数の関係を捉えることができない状態です。つまり、アンダーフィッティングの場合、モデルは高いバイアスと高い分散を示します。これにはいくつかの理由が考えられます。

アンダーフィッティングの問題に対する可能な解決策

  1. 独立変数と従属変数の関係を捉えることができる複雑なモデルを使用します。
  2. モデルの制約を緩和します。つまり、正則化を減らします。
  3. より多くのトレーニングデータを取得しようとします。
  4. モデルのトレーニングの期間を延長しようとします。これは、モデルをより多くのエポックでトレーニングすることによって行うことができます。
  5. ノイズを減らすためにデータをクリーニングしようとします。

いくつかのプロットを使用してオーバーフィッティングとアンダーフィッティングの外観を見てみましょう

赤ワインの品質データセットを使用して、アンダーフィッティングとオーバーフィッティングの概念を理解しましょう。

アンダーフィッティング:

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snssns.set_style('darkgrid')from sklearn.model_selection import train_test_splitimport tensorflow.keras.layers as tflfrom tensorflow.keras.models import Model## データの読み込みwine = pd.read_csv('wine.csv')## 独立変数と従属変数にデータを分割X = wine.drop('quality',axis=1)y = wine['quality']## データをトレーニングセットとテストセットに分割X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)## モデルの作成input = tfl.Input(shape=X.shape[1:])hidden1 = tfl.Dense(6,activation='relu')(input)output = tfl.Dense(10, activation='softmax')(hidden1)model = Model(inputs=[input], outputs=[output])## モデルのコンパイルmodel.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])## トレーニングセットとテストセットを使用してモデルをトレーニングhistory = model.fit(X_train, y_train, epochs=150, validation_data=(X_test, y_test))## トレーニングセットとテストセットの正答率を可視化plt.plot(history.history['accuracy'],color='red',label='トレーニングセットの正答率')plt.plot(history.history['val_accuracy'],color='blue',label='テストセットの正答率')plt.legend()plt.show()

上記のプロットを観察してください。トレーニングデータとテストデータの正答率が55%未満であることがわかります。つまり、この場合、モデルはアンダーフィッティングの問題に苦しんでいます。これはモデルの単純さによるものです。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snssns.set_style('darkgrid')from sklearn.model_selection import train_test_splitimport tensorflow.keras.layers as tflfrom tensorflow.keras.models import Model## データの読み込みwine = pd.read_csv('wine.csv')## 独立変数と従属変数にデータを分割X = wine.drop('quality',axis=1)y = wine['quality']## データをトレーニングセットとテストセットに分割X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)## モデルの作成input = tfl.Input(shape=X.shape[1:])hidden1 = tfl.Dense(100,activation='relu')(input)hidden2 = tfl.Dense(100, activation='relu')(hidden1)hidden3 = tfl.Dense(100, activation='relu')(hidden2)hidden4 = tfl.Dense(100, activation='relu')(hidden3)output = tfl.Dense(10, activation='softmax')(hidden4)model = Model(inputs=[input], outputs=[output])## モデルのコンパイルmodel.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])## トレーニングセットとテストセットを使用してモデルをトレーニングhistory = model.fit(X_train, y_train, epochs=150, validation_data=(X_test, y_test))## トレーニングセットとテストセットの正答率を可視化plt.plot(history.history['accuracy'],color='red',label='トレーニングセットの正答率')plt.plot(history.history['val_accuracy'],color='blue',label='テストセットの正答率')plt.legend()plt.show()
オーバーフィッティング

上記のプロットを観察すると、左側に向かうにつれて(つまり、エポックが増加するにつれて)、2つのグラフ間の間隔が増加していることが分かります。つまり、トレーニングが実行されるエポックを増やすと、トレーニング精度は増加し、テスト精度は増加しません。このような状況はオーバーフィッティングと考えられます。このようなモデルは、テストデータや新しいデータにおいてもうまく一般化できません。

モデルをトレーニングする際には、トレーニングデータとテストデータの両方で十分な精度を提供するようにする必要があります。このモデルはアンダーフィッティングとオーバーフィッティングの中間に位置するものとなります。

この記事がお気に召しましたら、ご意見をお聞かせください。建設的なフィードバックは大変ありがたいです。

LinkedInで私とつながってください。

メールは[email protected]までお願いします。

素晴らしい一日をお過ごしください!

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

「ビジュアルAIがカナダ最大かつ最も賑やかな空港で飛躍する」

カナダのオンタリオ州にあるトロントピアソン国際空港は、年間約5000万人の旅客にサービスを提供する国内最大かつ最も混雑し...

機械学習

PyTorchモデルのパフォーマンス分析と最適化—Part2

これは、GPU上で実行されるPyTorchモデルの分析と最適化に関する一連の投稿の第二部です最初の投稿では、プロセスとその重要...

人工知能

「ディープマインドのアルファコードの力を解き放つ:コードライティングの革命」

導入 プログラミングの常に進化し続ける世界では、先を行くことが成功への鍵です。DeepMindのAlphaCodeは、革新的なAIパワー...

AI研究

このAI論文は、MITが化学研究のために深層学習モデルのスケーリングを探究しています

MITの研究者は、化学のための生成的事前トレーニングモデル(ChemGPT)とグラフニューラルネットワークフォースフィールド(G...

機械学習

「FastEmbedをご紹介:高速かつ軽量なテキスト埋め込み生成のためのPythonライブラリ」

言葉やフレーズは、埋め込みを使用して高次元空間で効果的に表現することができます。これは、自然言語処理(NLP)の分野で重...

データサイエンス

「DINO — コンピュータビジョンのための基盤モデル」

「コンピュータビジョンにとっては、エキサイティングな10年です自然言語の分野での大成功がビジョンの領域にも移されており...