Yeni gözlemleri tahmin etmek için bir modeli yeniden kullanma
Model hesaplama açısından maliyetli değilse, tüm model oluşturma sürecini gerektiğinde yeniden çalıştırdığım bir R betiğinde belgeleme eğilimindeyim. Model uydurmada rastgele bir öğe varsa, bilinen bir rastgele tohum ayarladığımdan emin olurum.
Model hesaplama açısından maliyetli ise, yine de yukarıdaki gibi bir komut dosyası kullanıyorum, ancak save()
into ve rda nesnesini kullanarak model nesnelerini dışarıda bırakıyorum. Daha sonra if()...else
, kodun ilgili kısımlarının etrafına sarılmış basit bir cümle kullanarak, kaydedilen nesne varsa, onu yükleyecek veya yoksa modeli yeniden yerleştirecek şekilde komut dosyasını değiştirme eğilimindeyim .
Kaydedilmiş model nesnenizi yüklerken, gerekli paketleri yeniden yüklediğinizden emin olun, ancak sizin durumunuzda logit modeli aracılığıyla uygunsa, glm()
R'nin ötesinde yüklenecek ek paketler olmayacaktır.
İşte bir örnek:
> 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
Bunu otomatikleştirmek istiyorsanız, muhtemelen bir komut dosyasında aşağıdakileri yapardım:
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)
Tabii ki, veri oluşturma kodu, gerçek verilerinizi yükleyen kodla değiştirilecektir.
Önceden takılmış bir modeli yeni gözlemlerle güncelleme
Ek yeni gözlemler kullanarak modeli yeniden takmak istiyorsanız. O zaman update()
kullanışlı bir işlevdir. Tek yaptığı, güncellenen bir veya daha fazla model argümanıyla modeli yenilemek. Modeli uydurmak için kullanılan verilere yeni gözlemler eklemek istiyorsanız, yeni gözlemleri bağımsız değişkene iletilen veri çerçevesine ekleyin 'data'
ve ardından aşağıdakileri yapın:
m2 <- update(m1, . ~ ., data = df)
nerede m1
, orijinal, kaydedilmiş model uyum olduğu . ~ .
bu durumda araç sol ve sağ taraflarında mevcut tüm değişkenler içerir modeli formülü değişiklikleri, olduğu ~
(diğer bir deyişle, modelin formüle hiçbir değişiklik) ve df
bir orijinal modele uymak için kullanılan veri çerçevesi, yeni mevcut gözlemleri içerecek şekilde genişletildi.
İşte çalışan bir örnek:
> 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
Diğerleri formula()
, formülü yerleştirilmiş bir modelden çıkaran yorumlarda bahsetti :
> formula(m1)
y ~ x
>
>
> m3 <- lm(formula(m1), data = df)
Bununla birlikte, model uydurma daha karmaşık model uydurma işlevlerinde gibi ek bağımsız değişkenler 'family'
veya 'subset'
bağımsız değişkenler içeriyorsa . Eğer update()
yöntemleri (gibi onlar, birçok ortak uydurma fonksiyonları için hangi modeliniz uydurma fonksiyonu için kullanılabilir glm()
), bu ayıklanması ve model formülünü yeniden daha model uyumunu güncellemek için daha basit bir yol sağlar.
Tüm modellemeyi ve gelecek tahminini R'de yapmayı düşünüyorsanız, modeli PMML veya benzeri bir yöntemle soyutlamanın pek bir anlamı yok gibi görünüyor.
data
argümanda güncellenmiş verileri sağlayabilirsiniz ... sizi doğru anladığımı varsayarak ...