RMSE (root mean square deviatie) berekening in R

Ik heb numerieke kenmerkwaarnemingen V1tot en met V12genomen voor een doelvariabele Wavelength. Ik wil graag de RMSE berekenen tussen de Vxkolommen. Het gegevensformaat staat hieronder.

Elke variabele “Vx” wordt gemeten met een interval van 5 minuten. Ik wil graag de RMSE berekenen tussen de waarnemingen van alle Vx variabelen, hoe doe ik dat?

Dit is een link die ik heb gevonden, maar ik weet niet zeker hoe ik y_pred kan krijgen:
https://www.kaggle.com/wiki/RootMeanSquaredError

Voor de onderstaande link denk ik niet dat ik de voorspelde waarden heb:
http://heuristisch. wordpress.com/2013/07/12/calculate-rmse-and-mae-in-r-and-sas/


Antwoord 1, autoriteit 100%

De onderstaande functie geeft u de RMSE:

RMSE = function(m, o){
  sqrt(mean((m - o)^2))
}

mis voor (aangepaste) modelwaarden, ois voor waargenomen (ware) waarden.


Antwoord 2, autoriteit 39%

Voor uw hulp, heb zojuist deze functies geschreven:

#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)

Ik hoop dat het helpt.


Antwoord 3, Autoriteit 26%

Hoe een RMSE uit te voeren in r.

Zie mijn andere 97+ Up Voted Canonical Antwoord voor het doen van RMSE in Python: https://stackoverflow.com/a/37861832/ 445131 Hieronder leg ik het uit IT-termen van de R-code.

RMSE: (root-gemiddelde vierkante fout), MSE: (gemiddelde vierkante fout) en RMS: (root-gemiddelde kwadraat) zijn allemaal wiskundige trucjes om een ​​gevoel te krijgen voor verandering in de tijd tussen twee lijsten van cijfers.

RMSE biedt een enkel nummer dat de vraag beantwoordt: “Hoe vergelijkbaar, gemiddeld, zijn de nummers in List1 naar List2?”. De twee lijsten moeten dezelfde grootte hebben. Ik wil “ruis tussen twee gegeven elementen uitwassen, de grootte van de verzamelde gegevens uitspoelen en een enkel nummer krijgen voor verandering in de tijd”.

Intuition en Eli5 voor RMSE:

Stel je voor dat je leert darts te gooien in een dartbord. Elke dag oefen je een uur. U wilt erachter komen of u beter wordt of erger wordt. Dus elke dag maak je 10 gooit en meet de afstand tussen de bullseye en waar je dart-hit.

U maakt een lijst met die nummers. Gebruik de rootgemiddelde vierkante fout tussen de afstanden op dag 1 en een lijst met alle nullen. Doe hetzelfde op de 2e en nde dagen. Wat je krijgt is een enkel nummer dat hopelijk in de loop van de tijd afneemt. Wanneer uw RMSE-nummer nul is, raakt u elke keer op Bullseyes. Als het nummer omhoog gaat, wordt u erger.

Voorbeeld in het berekenen van root Mate Squared Fout in R:

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") 

Welke afdrukken:

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 

De wiskundige notatie:

RMSE is niet de meest nauwkeurige strategie voor het aanpassen van lijnen, de totale kleinste kwadraten zijn:

Root mean squared error meet de verticale afstand tussen het punt en de lijn, dus als je gegevens de vorm hebben van een banaan, vlak bij de bodem en steil bij de bovenkant, dan rapporteert de RMSE grotere afstanden tot punten hoog, maar korte afstanden naar lage punten, terwijl de afstanden in feite gelijkwaardig zijn. Dit veroorzaakt een scheeftrekking waarbij de lijn liever dichter bij hoge dan lage punten ligt.

Als dit een probleem is, lost de methode van de totale kleinste kwadraten dit op:
https://mubaris.com/posts/linear-regression/

Gotcha’s die deze RMSE-functie kunnen verbreken:

Als er nulls of oneindig in een van de invoerlijsten staan, heeft de output rmse-waarde geen zin. Er zijn drie strategieën om met nulls / ontbrekende waarden / oneindigheden in beide lijsten om te gaan: negeer dat onderdeel, zet het op nul of voeg een beste schatting of een uniforme willekeurige ruis toe aan alle tijdstappen. Elke remedie heeft zijn voor- en nadelen, afhankelijk van wat uw gegevens betekenen. Over het algemeen heeft het negeren van een component met een ontbrekende waarde de voorkeur, maar dit vertekent de RMSE richting nul, waardoor u denkt dat de prestaties zijn verbeterd terwijl dat niet het geval is. Het toevoegen van willekeurige ruis aan een beste schatting kan de voorkeur hebben als er veel ontbrekende waarden zijn.

Om de relatieve correctheid van de RMSE-uitvoer te garanderen, moet u alle nulls/oneindigen uit de invoer verwijderen.

RMSE heeft nultolerantie voor uitschieters die er niet thuishoren

Root mean squared error squares is afhankelijk van het feit dat alle gegevens juist zijn en dat ze allemaal als gelijk worden geteld. Dat betekent dat één verdwaald punt in het linkerveld de hele berekening totaal verpest. Zie Robuuste schatters die een drempel inbouwen voor het afwijzen van uitbijters om uitbijtergegevens te verwerken en hun enorme invloed na een bepaalde drempel te verwerpen.


Antwoord 4

Je kunt je eigen functie schrijven of het pakket hydroGOF gebruiken, dat ook een RMSE-functie heeft.
http://www.rforge.net/doc/packages/hydroGOF/rmse.html

Met betrekking tot je y_pred heb je eerst een model nodig dat ze heeft geproduceerd, waarom zou je anders de RMSE willen berekenen?


Antwoord 5

Je kunt ook library(mltools) gebruiken in R, die methode heeft

rmse(preds = NULL, actuals = NULL, weights = 1, na.rm = FALSE)

Referentie: http://search.r-project.org /bibliotheek/mltools/html/rmse.html


Antwoord 6

U kunt ook samenvatting() gebruiken voor uw lineaire model:

mod = lm(dependent ~ independent, data)dan:

mod.error = summary(mod)
mod.error$sigma

Other episodes