새로운 관측치를 예측하기 위해 모델 재사용
모델이 계산적으로 비용이 많이 들지 않으면 필요할 때 다시 실행하는 R 스크립트에 전체 모델 구축 프로세스를 문서화하는 경향이 있습니다. 모델 피팅에 임의의 요소가 포함 된 경우 알려진 임의의 시드를 설정해야합니다.
모델이 계산하는 데 계산 비용이 많이 든다면 위와 같이 여전히 스크립트를 사용하지만 save()
into 및 rda 개체를 사용하여 모델 개체를 저장 합니다. 그런 다음 저장된 객체가 있으면로드하거나 그렇지 않은 경우 if()...else
코드의 관련 부분을 감싸는 간단한 절을 사용하여 모델을 다시 맞추도록 스크립트를 수정하는 경향이 있습니다.
저장된 모델 객체를로드 할 때 필요한 패키지를 모두 다시로드해야합니다.하지만 귀하의 경우에는 로짓 모델이 적합하다면 glm()
R을 넘어서로드 할 추가 패키지가 없습니다.
다음은 그 예입니다.
> set.seed(345)
> df <- data.frame(x = rnorm(20))
> df <- transform(df, y = 5 + (2.3 * x) + rnorm(20))
>
> m1 <- lm(y ~ x, data = df)
>
> save(m1, file = "my_model1.rda")
>
>
> newdf <- data.frame(x = rnorm(20))
>
> load("my_model1.rda")
>
> predict(m1, newdata = newdf)
1 2 3 4 5 6
6.1370366 6.5631503 2.9808845 5.2464261 4.6651015 3.4475255
7 8 9 10 11 12
6.7961764 5.3592901 3.3691800 9.2506653 4.7562096 3.9067537
13 14 15 16 17 18
2.0423691 2.4764664 3.7308918 6.9999064 2.0081902 0.3256407
19 20
5.4247548 2.6906722
이것을 자동화하려면 스크립트에서 다음을 수행 할 것입니다.
df <- data.frame(x = rnorm(20))
df <- transform(df, y = 5 + (2.3 * x) + rnorm(20))
if(file.exists("my_model1.rda")) {
load("my_model1.rda")
} else {
m1 <- lm(y ~ x, data = df)
}
newdf <- data.frame(x = rnorm(20))
predict(m1, newdata = newdf)
물론 데이터 생성 코드는 실제 데이터를로드하는 코드로 대체됩니다.
이전에 피팅 된 모델을 새로운 관측치로 업데이트
추가 새 관측치를 사용하여 모델을 다시 적합시키려는 경우. 다음 update()
은 유용한 기능입니다. 업데이트 된 모델 인수 중 하나 이상을 사용하여 모델을 다시 맞추기 만하면됩니다. 모델을 맞추는 데 사용되는 데이터에 새 관찰을 포함하려면 인수에 전달 된 데이터 프레임에 새 관찰을 추가 'data'
한 후 다음을 수행합니다.
m2 <- update(m1, . ~ ., data = df)
어디에 m1
원래 저장된 모형 적합 . ~ .
이 경우에도 수단의 왼쪽과 오른쪽 양쪽에 모두 존재하는 변수 포함 모델 식 변경된다 ~
(즉, 모델 식을 변경하지 않음)과 df
는 IS 원래 모델을 맞추는 데 사용되는 데이터 프레임으로, 새로 사용 가능한 관측치를 포함하도록 확장되었습니다.
다음은 작동하는 예입니다.
> set.seed(123)
> df <- data.frame(x = rnorm(20))
> df <- transform(df, y = 5 + (2.3 * x) + rnorm(20))
>
> m1 <- lm(y ~ x, data = df)
> m1
Call:
lm(formula = y ~ x, data = df)
Coefficients:
(Intercept) x
4.960 2.222
>
>
> newdf <- data.frame(x = rnorm(20))
> newdf <- transform(newdf, y = 5 + (2.3 * x) + rnorm(20))
>
> df <- rbind(df, newdf)
>
>
> m2 <- update(m1, . ~ ., data = df)
> m2
Call:
lm(formula = y ~ x, data = df)
Coefficients:
(Intercept) x
4.928 2.187
다른 사람들은 주석 formula()
에서 언급했으며 피팅 된 모델에서 공식을 추출합니다.
> formula(m1)
y ~ x
>
>
> m3 <- lm(formula(m1), data = df)
그러나 모델 피팅에와 같은 추가 인수 'family'
또는 'subset'
더 복잡한 모델 피팅 함수의 인수가 포함되는 경우. update()
모델 피팅 함수에 메서드를 사용할 수있는 경우 (예 :과 같은 많은 일반적인 피팅 함수에 사용됨 glm()
) 모델 수식을 추출하고 재사용하는 것보다 모델 피팅을 업데이트하는 더 간단한 방법을 제공합니다.
R에서 모든 모델링과 미래 예측을 수행하려는 경우 PMML 또는 이와 유사한 것을 통해 모델을 추상화하는 데는 별 의미가 없어 보입니다.
data
... 내가 제대로 이해 가정 ... 인수