Aproksymacja
Marcin Orchel
1 Zadania
1.1 Zadania na 3.0
Napisać skrypt w R. W skrypcie
• Dokonać aproksymacji modelem liniowym i nieliniowym dla dwóch wybranych funkcji nieliniowych jednej zmiennej, w tym jedna z nich jest funkcją gęstości prawdopodobieństwa. W tym celu wygenerować punkty z losową odciętą. Podzielić punkty na zbiór treningowy i testowy. Aproksymację wykonać na zbiorze trenin- gowym.
• Dla każdej funkcji aproksymowanej narysować na jednym wykresie punkty trenin- gowe, punkty testowe, funkcję aproksymowaną i funkcje aproksymujące.
• Porównać metody interpolacji za pomocą wyznaczenia średniego błędu kwadrato- wego (root mean square error, RMSE) na zbiorze testowym.
• Porównać RMSE dla aproksymacji z RMSE dla interpolacji.
• Dodać do rzędnej punktów błąd normalny, porównać wyniki dla różnej wielkości odchyleń standardowych.
• Dokonać aproksymacji tych funkcji na stronie wolframalpha.com, porównać wyniki.
• Porównać szybkości wykonania metod.
• Wykonać powyższe testy na dwóch rzeczywistych zbiorach danych z wybranymi cechami.
• Dodać komentarz do skryptu opisujący krótko na czym polegają użyte metody oraz wnioski z badań.
Wskazówki:
• metody interpolacji i aproksymacji powinny być uruchamiane na tych samych zbio- rach danych oraz testowane na tych samych punktach testowych
• w przypadku zbioru danych z większą liczbą cech można wybrać jedną z nich
1
Wskazówki do R:
• funckja lm używa metody najmniejszych kwadratów, https://stat.ethz.ch/R- manual/R-devel/library/stats/html/lm.html, możemy specyfikować wagi dla parametrów za pomocą argumentu weights, formuła automatycznie zawiera wyraz wolny b, jeśli chcemy go pominąć specyfikujemy -1
• funkcja I, AsIshttps://stat.ethz.ch/R-manual/R-devel/library/base/html/
AsIs.html
• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/nls.html
• https://stat.ethz.ch/R-manual/R-patched/library/stats/html/predict.html, https://stat.ethz.ch/R-manual/R-patched/library/stats/html/predict.lm.
html
• polyfit, polyfit2 (przechodzenie przez punkt),https://www.rdocumentation.org/
packages/pracma/topics/polyfit%2Cpolyfix
• https://www.rdocumentation.org/packages/pracma/topics/polyval
• https://www.rdocumentation.org/packages/Metrics/topics/rmse
• http://stackoverflow.com/questions/3822535/fitting-polynomial-model- to-data-in-r
• http://www.statmethods.net/stats/regression.html
• https://socserv.socsci.mcmaster.ca/jfox/Books/Companion/appendix/Appendix- Nonlinear-Regression.pdf
• https://www.rdocumentation.org/packages/biglm/topics/biglm Przykładowy kod
• wyświetlenie funkcji aproksymującej dla zbioru danych x<-cars$speed
y<-cars$dist
fit1 <- lm.fit(cbind(c1=1, c2=x), y) round(fit1$coefficients, 3)
fit4<- lm.fit(cbind(c1=1, c2=x, c3=x^2, c4=x^3, c5=x^4), y) round(fit4$coefficients, 3)
plot(x, y, las=1)
xplot <- seq(0,25, by=0.01)
yplot1<- fit1$coef %*% sapply(xplot, function(x) x^(0:1)) yplot4<- fit4$coef %*% sapply(xplot, function(x) x^(0:4)) lines(xplot, yplot1)
lines(xplot, yplot4, lty=2)
2
Wskazówki do Matlaba:
• można dokonać przykładowej aproksymacji za pomocą cftool oraz splinetool
• do aproksymacji można użyć funkcji z curve fitting toolbox fit,http://www.mathworks.
com/help/curvefit/fit.html, przykłady użycia dostępne także pod adresemhttp:
//www.mathworks.com/help/curvefit/examples/polynomial-curve-fitting.
htmlorazhttp://www.mathworks.com/help/curvefit/custom-nonlinear-census- analysis.html lub fitlm http://www.mathworks.com/help/stats/fitlm.html lub regresshttp://www.mathworks.com/help/stats/regress.htmllub polyfithttp:
//www.mathworks.com/help/matlab/ref/polyfit.html
• do wyliczania wartości funkcji w postaci cfit używamy feval,http://www.mathworks.
com/help/curvefit/feval.html
• można użyć Validation Data w cftool
• zbiory danych w Matlabie http://www.mathworks.com/help/stats/_bq9uxn4.
html, inne zbiory danych wyświetlane po 2 komendach H=what(’demos’), di- splay(H.mat), zbiór danych z curve fitting toolbox po poleceniu titanium opisany tutajhttp://www.mathworks.com/help/curvefit/titanium.html, inny zbiór da- nych to enso opisany tutajhttp://www.mathworks.com/help/curvefit/custom- nonlinear-enso-data-analysis.html, kolejny zbiór danych to census opisany tutaj http://www.mathworks.com/help/curvefit/custom-nonlinear-census- analysis.html, kolejny zbiór to carsmall.mat opisany tutajhttp://www.mathworks.
com/help/stats/regress.htmloraz tutajhttp://www.mathworks.com/help/stats/
fitlm.htmllub zbiór carbig.mat, kolejny zbiór to moore używany tutaj http://
www.mathworks.com/help/stats/robust-regression-reduce-outlier-effects.
html
1.2 Zadania na 4.0
• zadania te same co dla interpolacji, z tą różnicą, że zamiast dwóch metod interpo- lacji wybieramy dwie metody aproksymacji oraz testujemy metody na 2 rzeczywi- stych zbiorach danych zamiast na wygenerowanych funkcjach
• Dokonać walidacji krzyżowej dla danych z zadania na 3.0 i porównać błąd RMSE.
• Dodać komentarz do skryptu opisujący krótko na czym polegają użyte metody oraz wnioski z badań.
Wskazówki do R:
• http://www.uni-kiel.de/psychologie/rexrepos/posts/multRegression.html Wskazówki do Matlaba:
• Do walidacji krzyżowej można użyć polecenia crossval http://www.mathworks.
com/help/stats/crossval.htmllub cvpartitionhttp://www.mathworks.com/help/
stats/cvpartition.html.
3
1.3 Zadania na 5.0
• zadania te same co dla interpolacji, z tą różnicą, że zamiast dwóch metod interpo- lacji wybieramy dwie metody aproksymacji
• Dodać komentarz do skryptu opisujący krótko na czym polegają użyte metody oraz wnioski z badań.
Wskazówki do Matlaba:
• do aproksymacji można użyć funkcji ze statistics toolbox fitnlm, http://www.
mathworks.com/help/stats/fitnlm.html
4