RMSEとは MSE、RMD、またはRMSとも呼ばれます。それはどのような問題を解決しますか?
RMSE:(二乗平均平方根誤差)、MSE:(二乗平均平方根誤差)RMD(二乗平均平方根偏差)、およびRMS:(二乗平均平方根)を理解している場合は、ライブラリーにこれを計算するように求めることは、不必要な過剰設計ではありません。これらのメトリックはすべて、長さが最大2インチの単一行のPythonコードです。3つのメトリクスrmse、mse、rmd、およびrmsは、概念的に同じコアにあります。
RMSEは次の質問に答えます。「数値は平均してどの程度似list1
ていlist2
ますか?」2つのリストは同じサイズでなければなりません。「任意の2つの要素間のノイズを洗い流し、収集されたデータのサイズを洗い流し、1つの数値で時間の経過に伴う変化を感じてもらいたい」
直感とRMSEのELI5:
ダーツボードにダーツを投げることを学んでいると想像してください。毎日1時間練習します。あなたは良くなっているのか悪くなっているのかを知りたいのです。したがって、毎日10回のスローを行い、ブルズアイとダーツが当たった場所との間の距離を測定します。
それらの番号のリストを作成しますlist1
。1日目の距離とlist2
すべてゼロを含むaの間の二乗平均平方根誤差を使用します。2日目とn日目も同じようにします。あなたが得ることはうまくいけば時間とともに減少する単一の数です。RMSE番号がゼロの場合は、毎回ブルシーを攻撃します。rmse番号が上がると、悪化しています。
Pythonで二乗平均平方根誤差を計算する例:
import numpy as np
d = [0.000, 0.166, 0.333] #ideal target distances, these can be all zeros.
p = [0.000, 0.254, 0.998] #your performance goes here
print("d is: " + str(["%.8f" % elem for elem in d]))
print("p is: " + str(["%.8f" % elem for elem in p]))
def rmse(predictions, targets):
return np.sqrt(((predictions - targets) ** 2).mean())
rmse_val = rmse(np.array(d), np.array(p))
print("rms error is: " + str(rmse_val))
どのプリント:
d is: ['0.00000000', '0.16600000', '0.33300000']
p is: ['0.00000000', '0.25400000', '0.99800000']
rms error between lists d and p is: 0.387284994115
数学表記:
Glyph Legend: n
スローの数を表す完全な正の整数です。 i
合計を列挙する正の整数カウンタ全体を表します。 上記の例ではすべてゼロを含むd
理想的な距離を表しlist2
ます。 上記の例でp
は、パフォーマンスを表していますlist1
。上付き文字2は、数値の2乗を表します。 d iはのi番目のインデックスですd
。 p iはのi番目のインデックスですp
。
rmseは小さなステップで行われるため、理解することができます。
def rmse(predictions, targets):
differences = predictions - targets #the DIFFERENCEs.
differences_squared = differences ** 2 #the SQUAREs of ^
mean_of_differences_squared = differences_squared.mean() #the MEAN of ^
rmse_val = np.sqrt(mean_of_differences_squared) #ROOT of ^
return rmse_val #get the ^
RMSEのすべてのステップはどのように機能しますか。
別の数から1つの数を引くと、それらの間の距離がわかります。
8 - 5 = 3 #absolute distance between 8 and 5 is +3
-20 - 10 = -30 #absolute distance between -20 and 10 is +30
自分自身に任意の数を掛けると、負の値と負の値は正なので、結果は常に正になります。
3*3 = 9 = positive
-30*-30 = 900 = positive
それらをすべて追加しますが、待ってください。そうすると、多くの要素を持つ配列は、小さな配列よりも大きなエラーになるので、要素の数で平均化します。
しかし、待って、私たちはそれらを前向きに二乗し、ポジティブにさせました。平方根でダメージを元に戻します!
これにより、平均して、list1のすべての値とそれに対応するlist2の要素値との間の距離を表す単一の数値が残ります。
時間の経過とともにRMSE値が下がれば、分散が減少しているので満足しています。
RMSEは最も正確なラインフィッティング戦略ではありません。合計最小二乗は次のとおりです。
二乗平均平方根誤差は、ポイントとラインの間の垂直距離を測定します。そのため、データがバナナのような形をしていて、下部が平らで上部が急である場合、RMSEは高いポイントまでの距離は長くなりますが、実際には距離が等しい場合は低いポイント。これにより、線が低い点よりも高い点に近い方が望ましいスキューが発生します。
これが問題である場合は、最小二乗法でこれを修正します。https:
//mubaris.com/posts/linear-regression
このRMSE機能を破壊する可能性のある問題:
どちらかの入力リストにnullまたは無限大がある場合、出力rmse値は意味をなさなくなります。いずれかのリストでnull /欠損値/無限大を処理する方法は3つあります。そのコンポーネントを無視するか、ゼロにするか、すべてのタイムステップに最良の推測または均一なランダムノイズを追加します。各レメディには、データの意味によって長所と短所があります。一般に、欠損値のあるコンポーネントを無視することをお勧めしますが、これによりRMSEがゼロにバイアスされ、実際にはパフォーマンスが向上していないときにパフォーマンスが向上したと考えることができます。欠損値がたくさんある場合は、最良の推測でランダムノイズを追加することをお勧めします。
RMSE出力の相対的な正確さを保証するために、入力からすべてのヌル/無限大を排除する必要があります。
RMSEは、属していない外れ値データポイントの許容値がゼロです。
二乗平均平方根誤差は、すべてのデータが正しいことに依存しており、すべて等しいと見なされます。これは、左のフィールドの外にある1つの浮遊点が計算全体を完全に台無しにすることを意味します。外れ値のデータポイントを処理し、特定のしきい値の後でその大きな影響を排除するには、外れ値の排除のしきい値を組み込んだロバスト推定量を参照してください。