数値の特徴の観察V1
使って V12
ターゲット変数Wavelength
に使用されます。 Vx
列間のRMSEを計算したいと思います。データ形式は以下のとおりです。
各変数「Vx」は、5分間隔で測定されます。すべてのVx変数の観測値間のRMSEを計算したいのですが、どうすればよいですか?
これは私が見つけたリンクですが、y_predを取得する方法がわかりません: https://www.kaggle.com/wiki/RootMeanSquaredError
以下に提供されているリンクについて、私は予測値を持っているとは思いません: http://heuristically.wordpress.com/2013/07/12/calculate-rmse-and-mae-in-r-and -sas /
以下の関数はあなたにRMSEを与えます:
RMSE = function(m, o){
sqrt(mean((m - o)^2))
}
m
はモデル(適合)値用、o
は観測(真)値用です。
PythonでRMSEを実行するための他の97票以上の投票された正準回答を参照してください。 https://stackoverflow.com/a/37861832/445131 以下では、Rコードの用語について説明します。
RMSE:(二乗平均平方根誤差)、MSE:(二乗平均平方根誤差)、およびRMS:(二乗平均平方根)はすべて、2つの数値リスト間の時間変化の感覚をつかむための数学的トリックです。
RMSEは、「list1からlist2までの数値は平均してどの程度似ているか」という質問に答える単一の数値を提供します。 2つのリストは同じサイズでなければなりません。 「任意の2つの要素間のノイズを洗い流し、収集されたデータのサイズを洗い流し、1つの数値で時間の経過に伴う変化を感じたい」.
あなたがダーツボードでダーツを投げることを学んでいると想像してください。毎日1時間練習します。あなたは良くなっているのか悪くなっているのかを知りたいのです。したがって、毎日10回のスローを行い、ブルズアイとダーツが当たった場所との間の距離を測定します。
それらの番号のリストを作成します。 1日目の距離とすべてゼロを含むリストの間の二乗平均平方根誤差を使用します。 2日目とn日目も同じようにします。得られるのは、時間の経過とともに減少すると期待される単一の数値です。 RMSE番号がゼロの場合、毎回ブルシーを攻撃します。数が増えると、悪化しています。
cat("Inputs are:\n")
d = c(0.000, 0.166, 0.333)
p = c(0.000, 0.254, 0.998)
cat("d is: ", toString(d), "\n")
cat("p is: ", toString(p), "\n")
rmse = function(predictions, targets){
cat("===RMSE readout of intermediate steps:===\n")
cat("the errors: (predictions - targets) is: ",
toString(predictions - targets), '\n')
cat("the squares: (predictions - targets) ** 2 is: ",
toString((predictions - targets) ** 2), '\n')
cat("the means: (mean((predictions - targets) ** 2)) is: ",
toString(mean((predictions - targets) ** 2)), '\n')
cat("the square root: (sqrt(mean((predictions - targets) ** 2))) is: ",
toString(sqrt(mean((predictions - targets) ** 2))), '\n')
return(sqrt(mean((predictions - targets) ** 2)))
}
cat("final answer rmse: ", rmse(d, p), "\n")
どのプリント:
Inputs are:
d is: 0, 0.166, 0.333
p is: 0, 0.254, 0.998
===RMSE Explanation of steps:===
the errors: (predictions - targets) is: 0, -0.088, -0.665
the squares: (predictions - targets) ** 2 is: 0, 0.007744, 0.442225
the means: (mean((predictions - targets) ** 2)) is: 0.149989666666667
the square root: (sqrt(mean((predictions - targets) ** 2))) is: 0.387284994115014
final answer rmse: 0.387285
二乗平均平方根誤差は、ポイントとラインの間の垂直距離を測定します。したがって、データがバナナのような形をしていて、底部付近が平らで上部付近が急勾配である場合、RMSEは高いポイントまでの距離は長くなりますが、実際に距離が等しい場合、ポイントは低くなります。これは、線が低い点より高い点に近い方を好むスキューを引き起こします。
これが問題である場合は、最小二乗法でこれを修正します: https://mubaris.com/posts/linear-regression/
どちらかの入力リストにnullまたは無限大がある場合、出力rmse値は意味がありません。いずれかのリストでnull /欠損値/無限を処理する方法は3つあります。そのコンポーネントを無視するか、ゼロにするか、すべてのタイムステップに最良の推測または均一なランダムノイズを追加します。各レメディには、データの意味によって長所と短所があります。一般に、欠損値のあるコンポーネントを無視することをお勧めしますが、これによりRMSEがゼロにバイアスされ、実際にはパフォーマンスが向上していない場合でもパフォーマンスが向上したと考えられます。欠損値が多い場合は、最良の推測でランダムノイズを追加することをお勧めします。
RMSE出力の相対的な正確さを保証するために、入力からすべてのヌル/無限大を排除する必要があります。
二乗平均平方根誤差は、すべてのデータが正しいことに依存し、すべて等しいと見なされます。それは、左のフィールドにある1つの浮遊点が計算全体を完全に台無しにすることを意味します。外れ値のデータポイントを処理し、特定のしきい値の後でその大きな影響を排除するには、外れ値の排除のしきい値を組み込んだロバスト推定量を参照してください。
あなたの助けのために、これらの関数を書いただけです:
#Fit a model
fit <- lm(Fertility ~ . , data = swiss)
# Function for Root Mean Squared Error
RMSE <- function(error) { sqrt(mean(error^2)) }
RMSE(fit$residuals)
# If you want, say, MAE, you can do the following:
# Function for Mean Absolute Error
mae <- function(error) { mean(abs(error)) }
mae(fit$residuals)
お役に立てば幸いです。
独自の関数を作成するか、RMSE関数も持つパッケージhydroGOFを使用できます。 http://www.rforge.net/doc/packages/hydroGOF/rmse.html
Y_predについては、最初にそれらを生成するモデルが必要です。それ以外の場合、なぜRMSEを計算するのですか?