लॉजिस्टिक रिग्रेशन के लिए कृत्रिम डेटा का अनुकरण कैसे करें?


45

मुझे पता है कि मैं लॉजिस्टिक प्रतिगमन की मेरी समझ में कुछ याद कर रहा हूं, और वास्तव में किसी भी मदद की सराहना करेगा।

जहां तक ​​मैं इसे समझता हूं, लॉजिस्टिक रिग्रेशन मानता है कि इनपुट्स दिए गए '1' परिणाम की संभावना, इनपुट का एक रैखिक संयोजन है, एक व्युत्क्रम-लॉजिस्टिक फ़ंक्शन के माध्यम से पारित किया गया है। यह निम्नलिखित आर कोड में अनुकरणीय है:

#create data:
x1 = rnorm(1000)           # some continuous variables 
x2 = rnorm(1000)
z = 1 + 2*x1 + 3*x2        # linear combination with a bias
pr = 1/(1+exp(-z))         # pass through an inv-logit function
y = pr > 0.5               # take as '1' if probability > 0.5

#now feed it to glm:
df = data.frame(y=y,x1=x1,x2=x2)
glm =glm( y~x1+x2,data=df,family="binomial")

और मुझे निम्नलिखित त्रुटि संदेश मिलता है:

चेतावनी संदेश: 1: glm.fit: एल्गोरिथ्म 2 नहीं मिला: glm.fit: संकलित संभाव्यता संख्यात्मक रूप से 0 या 1 हुई।

मैंने कुछ समय के लिए R के साथ काम किया है; यह जानने के लिए पर्याप्त है कि शायद मैं ही दोषी हूं। यहाँ क्या हो रहा है?


2
जिस तरह से आप अपने डेटा का अनुकरण करते हैं वह मुझे अजीब लगता है। यदि आप चाहते हैं, एक वैकल्पिक अधिक मानक तरीके के लिए, आप यहाँ देख सकते हैं: आंकड़े
ocram

@ocram: आप सही हैं; यह एक डुप्लिकेट प्रश्न है!
यूजर 603

2
मैंने एक गलत सिमुलेशन चलाया, जैसा कि @ स्टीफन लॉरेंट ने समझाया। हालाँकि, समस्या लॉजिस्टिक रिग्रेशन में एकदम अलग थी , एक ऐसी समस्या जिससे मैं परिचित नहीं था, और यह कि मैं इसके बारे में जानकर हैरान था।
झोरबार

@ ज़ोर्बर: यह आपके प्रश्न के जवाब में था (अब हटा दिया गया)।
user603

1
@ user603: मैं शायद आपकी प्रतिक्रिया से चूक गया; वैसे भी धन्यवाद
zorbar

जवाबों:


63

नहीं, प्रतिक्रिया चर एक बर्नौली यादृच्छिक चर है जो प्रायिकता साथ मान । 1 p r ( i )yi1pr(i)

> set.seed(666)
> x1 = rnorm(1000)           # some continuous variables 
> x2 = rnorm(1000)
> z = 1 + 2*x1 + 3*x2        # linear combination with a bias
> pr = 1/(1+exp(-z))         # pass through an inv-logit function
> y = rbinom(1000,1,pr)      # bernoulli response variable
> 
> #now feed it to glm:
> df = data.frame(y=y,x1=x1,x2=x2)
> glm( y~x1+x2,data=df,family="binomial")

Call:  glm(formula = y ~ x1 + x2, family = "binomial", data = df)

Coefficients:
(Intercept)           x1           x2  
     0.9915       2.2731       3.1853  

Degrees of Freedom: 999 Total (i.e. Null);  997 Residual
Null Deviance:      1355 
Residual Deviance: 582.9        AIC: 588.9 

आप सही कह रहे हैं - मैंने यह कदम मिस कर दिया है। आपकी सहायता के लिए धन्यवाद!
झोरबार

1
आपके पास डेटा अनुकरण करने के तरीके से संबंधित प्रश्न था। जब हम रैखिक प्रतिगमन के लिए डेटा का अनुकरण करते हैं, तो हम एक शोर (\ epsilon) का अनुकरण भी करते हैं। मैं समझता हूं कि लॉजिस्टिक फ़ंक्शन अपेक्षा का एक कार्य है जो स्वयं शोर को रद्द करता है। क्या यह कारण है कि आपके पास अपने z में कोई शोर नहीं है?
सैम

5
@ सिपहर रैखिक प्रतिगमन एक गाऊसी वितरण को मानता है। "शोर" केवल माध्य के चारों ओर परिवर्तनशीलता की व्याख्या है, लेकिन यह प्रतिक्रिया के लिए जोड़ा गया शोर नहीं है: प्रतिक्रिया को रूप में लिखा जाता है , यह सिर्फ एक व्याख्या है। लॉजिस्टिक प्रतिगमन मानता है कि प्रतिक्रिया में एक द्विपद वितरण है, और इसी तरह प्रतिक्रिया में कोई शोर नहीं जोड़ा गया है। mean response+noise
स्टीफन लॉरेंट

@ स्टीफनलौरेंट, बिल्कुल। मैं पूरी तरह से मिलता हूं। आपके उत्तर के लिए बहुत बहुत धन्यवाद।
सैम

2

LogisticRegression फिटिंग के लिए उपयुक्त है यदि संभाव्यता या अनुपात को लक्ष्य के रूप में प्रदान किया जाता है, न कि केवल 0/1 परिणाम।

import numpy as np
import pandas as pd
def logistic(x, b, noise=None):
    L = x.T.dot(b)
    if noise is not None:
        L = L+noise
    return 1/(1+np.exp(-L))

x = np.arange(-10., 10, 0.05)
bias = np.ones(len(x))
X = np.vstack([x,bias]) # Add intercept
B =  [1., 1.] # Sigmoid params for X

# True mean
p = logistic(X, B)
# Noisy mean
pnoisy = logistic(X, B, noise=np.random.normal(loc=0., scale=1., size=len(x)))
# dichotomize pnoisy -- sample 0/1 with probability pnoisy
dichot = np.random.binomial(1., pnoisy)

pd.Series(p, index=x).plot(style='-')
pd.Series(pnoisy, index=x).plot(style='.')
pd.Series(dichot, index=x).plot(style='.')

यहां हमारे पास लॉजिस्टिक रिग्रेशन के लिए तीन संभावित लक्ष्य हैं। pजो सही / लक्ष्य अनुपात / संभावना है, pnoisyजो लॉग ऑड्स स्केल में जोड़े गए सामान्य शोर के साथ p है, और dichot, जो pomisy को binomial PDF के पैरामीटर के रूप में माना जाता है, और उसी से नमूना किया गया है। आपको सभी 3 का परीक्षण करना चाहिए - मैंने पाया कि कुछ खुले स्रोत LR कार्यान्वयन फिट नहीं हो सकते हैं p

आपके आवेदन के आधार पर, आप pnoisy पसंद कर सकते हैं।

अभ्यास में, तुम भी विचार करना चाहिए कि कैसे शोर है की संभावना में आप आवेदन को लक्षित और उस का अनुकरण करने की कोशिश के आकार का होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.