メインコンテンツへスキップ
W&B では、以下の種類のスムージングを利用できます: これらのスムージング手法は、インタラクティブな W&B レポートで確認できます。
さまざまなスムージングアルゴリズムのデモ

時間重み付き指数移動平均 (TWEMA) スムージング (デフォルト)

時間重み付き指数移動平均 (TWEMA) スムージングアルゴリズムは、過去の点の重みを指数的に減衰させることで、時系列データを平滑化する手法です。この手法の詳細については、Exponential Smoothing を参照してください。範囲は 0 から 1 です。時系列の初期の値が 0 に偏らないように、バイアス補正項が追加されています。 TWEMA アルゴリズムは、線上の点の密度 (x 軸上の範囲の単位あたりの y 値の数) を考慮します。これにより、特性の異なる複数の線を同時に表示する場合でも、一貫したスムージングを適用できます。 以下は、このアルゴリズムが内部的にどのように動作しているかを示すサンプルコードです。
const smoothingWeight = Math.min(Math.sqrt(smoothingParam || 0), 0.999);
let lastY = yValues.length > 0 ? 0 : NaN;
let debiasWeight = 0;

return yValues.map((yPoint, index) => {
  const prevX = index > 0 ? index - 1 : 0;
  // VIEWPORT_SCALE は結果をチャートのx軸の範囲にスケーリングする
  const changeInX =
    ((xValues[index] - xValues[prevX]) / rangeOfX) * VIEWPORT_SCALE;
  const smoothingWeightAdj = Math.pow(smoothingWeight, changeInX);

  lastY = lastY * smoothingWeightAdj + yPoint;
  debiasWeight = debiasWeight * smoothingWeightAdj + 1;
  return lastY / debiasWeight;
});
アプリでは このように表示されます:
TWEMA スムージングのデモ

ガウシアン平滑化

ガウシアン平滑化(ガウシアンカーネル平滑化)は、各点に対して重み付き平均を計算します。このとき各点の重みは、平滑化パラメータとして指定した標準偏差を持つガウス分布に従います。平滑化後の値は、各入力 x の値ごとに、その前後の点に基づいて計算されます。 アプリでの表示例はこちらを参照してください。
ガウシアン平滑化のデモ

ランニング平均スムージング

ランニング平均は、ある点を、その点の x 値の前後にあるウィンドウ内の点の平均値で置き換えるスムージングアルゴリズムです。詳細は、Wikipedia の「Boxcar Filter」を参照してください。ランニング平均で選択したパラメータは、移動平均を計算する際に Weights & Biases が考慮する点の数を指定します。 x 軸上の点の間隔が不均一な場合は、代わりに Gaussian Smoothing の使用を検討してください。 アプリ内での表示例はこちらです:
ランニング平均スムージングのデモ

指数移動平均 (EMA) スムージング

指数移動平均 (EMA) スムージングアルゴリズムは、指数ウィンドウ関数を使って時系列データを平滑化するための経験則的な手法です。この手法の詳細については、Exponential Smoothing を参照してください。範囲は 0 から 1 です。時系列の初期値が 0 にバイアスされないようにするために、デバイアス項が追加されています。 多くの場合、EMA スムージングは、先にバケット化を行うのではなく、履歴全体に対して直接適用されます。この方法のほうが、より正確なスムージング結果が得られることがよくあります。 次のような状況では、EMA スムージングはバケット化の後に適用されます。
  • サンプリング
  • グルーピング
  • 単調でない x 軸
  • 時間ベースの x 軸
以下は、内部でどのように動作しているかを示すサンプルコードです。
  data.forEach(d => {
    const nextVal = d;
    last = last * smoothingWeight + (1 - smoothingWeight) * nextVal;
    numAccum++;
    debiasWeight = 1.0 - Math.pow(smoothingWeight, numAccum);
    smoothedData.push(last / debiasWeight);
アプリでは次のように表示されます
EMA スムージングのデモ

元のデータを非表示にする

デフォルトでは、平滑化されていない元のデータが、背景に薄い線としてプロットに表示されます。この表示をオフにするには、Show Original をクリックします。
元のデータの表示をオン/オフする