다른 대답은 모두 좋은 접근 방식입니다. 그러나, 몇 가지 다른 포함, 언급되지 않은 R의 옵션이 있습니다 lowess
및 approx
더 나은 적합 또는 더 빠른 성능을 제공 할 수 있습니다.
장점은 대체 데이터 세트를 사용하면 더 쉽게 입증됩니다.
sigmoid <- function(x)
{
y<-1/(1+exp(-.15*(x-100)))
return(y)
}
dat<-data.frame(x=rnorm(5000)*30+100)
dat$y<-as.numeric(as.logical(round(sigmoid(dat$x)+rnorm(5000)*.3,0)))
다음은 그것을 생성 한 시그 모이 드 곡선으로 겹쳐진 데이터입니다.
이러한 종류의 데이터는 모집단 간의 이진 행동을 볼 때 일반적입니다. 예를 들어, 고객이 구매했는지 여부 (y 축의 이진 1/0)와 사이트에서 보낸 시간 (x 축)의 플롯이 될 수 있습니다.
이러한 기능의 성능 차이를 더 잘 보여주기 위해 많은 포인트가 사용됩니다.
Smooth
,, spline
및 smooth.spline
모두 내가 시도한 모든 매개 변수 세트를 사용하여 이와 같은 데이터 세트에서 의미없는 말을 생성합니다.
loess
, lowess
및 approx
기능을 모두 생산 가능한 결과, 겨우위한 있지만 approx
. 다음은 가볍게 최적화 된 매개 변수를 사용하는 각 코드입니다.
loessFit <- loess(y~x, dat, span = 0.6)
loessFit <- data.frame(x=loessFit$x,y=loessFit$fitted)
loessFit <- loessFit[order(loessFit$x),]
approxFit <- approx(dat,n = 15)
lowessFit <-data.frame(lowess(dat,f = .6,iter=1))
결과 :
plot(dat,col='gray')
curve(sigmoid,0,200,add=TRUE,col='blue',)
lines(lowessFit,col='red')
lines(loessFit,col='green')
lines(approxFit,col='purple')
legend(150,.6,
legend=c("Sigmoid","Loess","Lowess",'Approx'),
lty=c(1,1),
lwd=c(2.5,2.5),col=c("blue","green","red","purple"))
보시다시피 lowess
는 원래 생성 곡선에 거의 완벽하게 맞습니다. Loess
가깝지만 양쪽 꼬리에서 이상한 편차를 경험합니다.
데이터 집합이 매우 다를 수 있지만, 나는 다른 데이터 세트가 모두 유사하게 실시 할 것을 발견 loess
하고 lowess
좋은 결과를 생산할 수있는. 벤치 마크를 살펴보면 차이가 더 커집니다.
> microbenchmark::microbenchmark(loess(y~x, dat, span = 0.6),approx(dat,n = 20),lowess(dat,f = .6,iter=1),times=20)
Unit: milliseconds
expr min lq mean median uq max neval cld
loess(y ~ x, dat, span = 0.6) 153.034810 154.450750 156.794257 156.004357 159.23183 163.117746 20 c
approx(dat, n = 20) 1.297685 1.346773 1.689133 1.441823 1.86018 4.281735 20 a
lowess(dat, f = 0.6, iter = 1) 9.637583 10.085613 11.270911 11.350722 12.33046 12.495343 20 b
Loess
매우 느리며 approx
. 여전히 상당히 빠르게 (황토보다 15 배 빠름) 실행하면서 Lowess
보다 나은 결과를 생성합니다 approx
.
Loess
또한 포인트 수가 증가함에 따라 점점 줄어들어 약 50,000 점에서 사용할 수 없게됩니다.
편집 : 추가 연구에 따르면 loess
특정 데이터 세트에 더 적합합니다. 작은 데이터 세트를 다루거나 성능이 고려되지 않는 경우 두 기능을 모두 시도하고 결과를 비교하십시오.