機械学習の学習曲線とは何か知りたい。それをプロットする標準的な方法は何ですか?私のプロットのx軸とy軸はどうあるべきですか?
通常、予測精度/エラー対トレーニングセットサイズのプロットを参照します(つまり、モデルの性能ターゲットをトレーニングするために使用されるインスタンスの数が増えるにつれて、ターゲットを予測します)
通常、トレーニングとテスト/検証のパフォーマンスの両方が一緒にプロットされるため、 バイアス分散のトレードオフ を診断できます(つまり、トレーニングデータを追加するメリットがあるかどうかを判断し、正則化または数値を制御してモデルの複雑さを評価します)機能の)。
私はこの古い質問について簡単なメモを残して、学習曲線とROC曲線は同義ではないことを指摘したいと思います
この質問の他の回答に示されているように、学習曲線は、通常、縦軸のパフォーマンスの向上を示します(別のパラメーター(横軸)、トレーニングセットサイズ(機械学習の場合)、反復/時間(機械学習と生物学的学習の両方)など。 1つの顕著な点は、モデルの多くのパラメーターがプロット上の異なる点で変化していることです。ここでの他の回答は、学習曲線を説明するのに非常に役立ちました。
(1930年代に製造されたユニットの数量が2倍になると、個々のユニットを製造するのに必要な労働時間数が一定の割合で減少するという観察から始まった、工業生産における学習曲線の別の意味もあります。それは実際には関連性がありますが、完全性とウェブ検索の混乱を避けるために注意する価値があります。)
対照的に、受信者動作特性曲線、またはROC曲線は、学習を示す;それはパフォーマンスを示しています。 ROC曲線は、分類子の識別しきい値が変化するにつれて増加する真の陽性率(縦軸)と増加する偽陽性率(横軸)の間のトレードオフを示す分類子のパフォーマンスのグラフィカルな描写です。したがって、モデルに関連付けられている単一のパラメーター(決定/識別のしきい値)のみが、プロット上の異なるポイントで変化しています。このROC曲線( Wikipedia から)は、3つの異なる分類子のパフォーマンスを示しています。
ここに描かれている学習はありませんが、分類子の決定しきい値がより緩やかになったり厳密になったりするため、成功/エラーの2つの異なるクラスに関するパフォーマンスが得られます。曲線の下の領域を見ると、分類子がクラスを区別する能力の全体的な指標を確認できます。この曲線下面積のメトリックは、2つのクラスのメンバーの数に影響されないため、クラスメンバーシップのバランスが取れていない場合、実際のパフォーマンスを反映しない場合があります。 ROCカーブには多くの字幕があり、興味のある読者は以下をチェックするでしょう。
フォーセット、トム。 「ROCグラフ:研究者のための注記と実際的な考慮事項。」機械学習31(2004):1-38
Swets、John A.、Robyn M. Dawes、John Monahan。 「科学によるより良い決定。」サイエンティフィックアメリカン(2000):83
基本的に、機械学習曲線を使用すると、アルゴリズムが学習を開始するポイントを見つけることができます。曲線を取り、それが一定に達し始める点で導関数の勾配正接をスライスすると、学習能力が構築され始めます。
X軸とy軸のマッピング方法に応じて、一方の軸の値が一定値に近づき始め、もう一方の軸の値は増加し続けます。これは、いくつかの学習を見始めたときです。曲線全体では、アルゴリズムが学習できる速度を測定できます。最大点は通常、勾配が後退し始めるときです。最大/最小点まで、いくつかの微分測定を行うことができます。
したがって、上記の例から、曲線が徐々に一定値に近づいていることがわかります。最初はトレーニング例を通して学習を利用し始め、一定の状態に近づく傾向がある最大/最小ポイントで勾配が広がります。この時点で、テストデータから新しい例を取得し、データから新しい独自の結果を見つけることができます。エポック対エラーに対して、このようなx/y軸の測定値があります。
特定のモデルについて、トレーニングポイントがさらに役立つかどうかをどのように判断できますか?このための有用な診断は、学習曲線です。
•予測精度/エラー対トレーニングセットサイズのプロット(つまり、モデルを使用して、ターゲットのトレーニングに使用されるインスタンスの数を増やすと、ターゲットの予測がどの程度改善されるか)
•学習曲線は従来、トレーニングセットのサイズ(機械学習の場合)や反復/時間など、別のパラメーター(横軸)に変更があった場合の縦軸のパフォーマンスの向上を表しています。
•学習曲線は、アルゴリズムの健全性チェックやパフォーマンスの向上のためのプロットに役立つことがよくあります。
•学習曲線のプロットは、アルゴリズムが被る問題の診断に役立ちます
個人的には、以下の2つのリンクがこの概念について理解を深めるのに役立ちました
Andrewの機械学習クラスでは、学習曲線は、サンプルサイズに対するトレーニング/交差検証エラーのプロットです。学習曲線を使用して、モデルに高いバイアスまたは高い分散があるかどうかを検出できます。モデルが高バイアスの問題に苦しんでいる場合、サンプルサイズが増加すると、トレーニングエラーが増加し、相互検証エラーが減少し、最終的にそれらは互いに非常に接近しますが、トレーニングエラーと分類エラーの両方のエラー率は高くなります。 。また、サンプルサイズを大きくしても、ハイバイアスの問題にはあまり役立ちません。
モデルの分散が大きい場合、サンプルサイズが増加し続けると、トレーニングエラーは増加し続け、交差検定エラーは減少し続け、トレーニングおよび交差検定エラー率は低くなります。そのため、モデルの分散が大きい場合、サンプルの数が増えると、モデルの予測パフォーマンスが向上します。
このコードを使用してプロットします。
# Loss Curves
plt.figure(figsize=[8,6])
plt.plot(history.history['loss'],'r',linewidth=3.0)
plt.plot(history.history['val_loss'],'b',linewidth=3.0)
plt.legend(['Training loss', 'Validation Loss'],fontsize=18)
plt.xlabel('Epochs ',fontsize=16)
plt.ylabel('Loss',fontsize=16)
plt.title('Loss Curves',fontsize=16)
# Accuracy Curves
plt.figure(figsize=[8,6])
plt.plot(history.history['acc'],'r',linewidth=3.0)
plt.plot(history.history['val_acc'],'b',linewidth=3.0)
plt.legend(['Training Accuracy', 'Validation Accuracy'],fontsize=18)
plt.xlabel('Epochs ',fontsize=16)
plt.ylabel('Accuracy',fontsize=16)
plt.title('Accuracy Curves',fontsize=16)
履歴= model.fit(...)