नई टिप्पणियों के लिए भविष्यवाणी करने के लिए एक मॉडल का पुन: उपयोग करना
यदि मॉडल कम्प्यूटेशनल रूप से महंगा नहीं है, तो मैं एक आर स्क्रिप्ट में पूरी मॉडल निर्माण प्रक्रिया का दस्तावेजीकरण करता हूं जिसे मैं जरूरत पड़ने पर पुन: चलाता हूं। यदि एक यादृच्छिक तत्व मॉडल फिटिंग में शामिल है, तो मैं एक ज्ञात यादृच्छिक बीज सेट करना सुनिश्चित करता हूं।
यदि मॉडल कम्प्यूटेशनल रूप से गणना करने के लिए महंगा है, तो मैं अभी भी ऊपर के रूप में एक स्क्रिप्ट का उपयोग करता हूं, लेकिन मॉडल ऑब्जेक्ट save()
को रेडा और आरडीए ऑब्जेक्ट का उपयोग करके बचा सकता हूं । मैं तब स्क्रिप्ट को संशोधित करने के लिए ऐसा करता हूं कि यदि सहेजे गए ऑब्जेक्ट मौजूद हैं, तो इसे लोड करें, या यदि नहीं, तो if()...else
कोड के संबंधित भागों के चारों ओर लिपटे एक साधारण क्लॉज का उपयोग करके, मॉडल को परिष्कृत करें ।
अपने सहेजे गए मॉडल ऑब्जेक्ट को लोड करते समय, किसी भी आवश्यक पैकेज को फिर से लोड करना सुनिश्चित करें, हालांकि आपके मामले में अगर लॉगिट मॉडल के माध्यम से फिट थे, तो glm()
आर से परे लोड करने के लिए कोई अतिरिक्त पैकेज नहीं होगा।
यहाँ एक उदाहरण है:
> 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
है डेटा मॉडल का उपयोग मूल मॉडल को फिट करने के लिए किया जाता है, जिसमें नए उपलब्ध अवलोकन शामिल हैं।
यहाँ एक काम कर उदाहरण है:
> 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()
), तो यह मॉडल फॉर्मूला निकालने और पुन: उपयोग करने की तुलना में किसी मॉडल को फिट करने के लिए एक सरल तरीका प्रदान करता है।
यदि आप आर में सभी मॉडलिंग और भविष्य की भविष्यवाणी करने का इरादा रखते हैं, तो वास्तव में PMML या इसी तरह के माध्यम से मॉडल को अमूर्त करने में कोई मतलब नहीं है।
data
तर्क में अद्यतन डेटा प्रदान कर सकते हैं ... यह मानते हुए कि मैंने आपको सही ढंग से समझा ...