2014-04-22 77 views
0

我對理解如何使用poisson的GLM模型有一些困難。使用GLM的問題

import numpy as np 
import scikits.statsmodels as sm 

dataset = pd.DataFrame({'A':np.random.rand(100)*1000, 
         'B':np.random.rand(100)*100, 
         'C':np.random.rand(100)*10, 
         'target':np.random.rand(100)}) 

X = dataset.ix[:,['A','B','C']].values 
y = dataset.ix[:,['target']].values 
size = 1e5 
nbeta = 3 

fam = sm.families.Poisson() 
glm = sm.GLM(y,X, family=fam) 
res = glm.fit() 
  • 我使用的「目標」一欄爲目標,我應該標記目標0或1?
  • 任何人都可以解釋我是如何得到CA的預測值泊松還有另一個功能predict
+0

如果您從scikits名稱空間導入,這是statsmodels的一個非常非常舊的版本。你一定要升級。 – jseabold

+0

你能舉一個升級版本的例子嗎?我可以在scikit上找到這個GLM,我找不到它 – user3378649

+0

Poisson模型用於計數數據模型(除非你知道你在做什麼,並有意將它們應用於連續數據)。你確定要在這裏使用泊松嗎? – jseabold

回答

1

Sourceforge上被降權了。當它備份時,您應該通讀documentationexamples。有很多用於預測和GLM的使用說明。

如何標記您的目標取決於您,可能是一個交叉驗證的問題。泊松是用於計數,但可用於連續數據,但您應該知道您在做什麼。

如果您有0/1,那麼您需要一個Logit或Probit模型。像這樣的東西。您不需要將熊貓對象轉換爲numpy。

import numpy as np 
import statsmodels.api as sm 

dataset = pd.DataFrame({'A':np.random.rand(100)*1000, 
         'B':np.random.rand(100)*100, 
         'C':np.random.rand(100)*10, 
         'target':np.random.randint(0, 5, 100)}) 

X = dataset[['A','B','C']] 
X['constant'] = 1 
y = dataset['target'] 
size = 1e5 
nbeta = 3 

fam = sm.families.Poisson() 
glm = sm.GLM(y,X, family=fam) 
res = glm.fit() 

predict = res.predict() 

或者你可以直接使用泊松最大似然估計量。

res = sm.Poisson(y, X).fit() 
predict = res.predict() 
+0

非常感謝,只是想知道是否可以使用此示例的時間序列來預測下一個事件(基於時間)。讓我們cosider:'B':np.array([datetime.datetime(2013,9,28,i,0)爲我在範圍內(30)]) – user3378649

+0

就實現而言,日期時間應該像引擎蓋下的整數,所以原則上它可以工作。至於,這是你想要做什麼...這是一個交叉驗證的問題。您可能能夠像這樣建模泊松過程,但您可能需要查看生存分析。 [這個答案](https://stats.stackexchange.com/questions/44046/what-are-the-differences-between-survival-analysis-and-poisson-regression)可能會有所幫助。 – jseabold

+0

謝謝!如果我理解你的話。如果我想根據預測的水平預測發生概率,那麼我將使用二項式GLM。如果我想根據預測器級別預測事件的數量,那麼您將使用泊松GLM。我看到「res.predict()」產生概率,這種概率在這種情況下意味着什麼。如果它預測事件的數量(數字因人而異)。還有一個問題,我們是否應該像邏輯迴歸一樣在(O或1)中標出目標? – user3378649