2017-06-20 79 views
0

我的數據集是這樣的:如何迭代GLMS在H2O

rownum a  b  y x 
1  | A | a |1 | a 
2  | B | a |1 | a 
3  | C | a |1 | a 
4  | D | a |0 | b 
5  | E | a |0 | a 
6  | F | a |0 | b 

我希望創建一個基於組織的身份很多h2o.frames。就像這樣:

一個:

rownum a  b  y x 
1  | A | a |1 | a 
2  | D | a |0 | a 
3  | F | a |0 | a 

B:

rownum a  b  y x 
1  | B | a |1 | b 
2  | C | a |1 | b 
3  | E | a |0 | b 

雖然我目前做手工,當我添加更多的組織到數據集變得困難。

我也想將這些h2o.frames推到h2o.glm並迭代保存模型。

"INSERT x NAME HERE" = h2o.glm(y = "y", x = 
c("a","b"), 
training_frame = ITERATE H2O FRAMES HERE, family = 'poisson') 

,然後保存模型

INSERT x NAME HERE <- h2o.saveModel(object= INSERT x NAME 
HERE, force=TRUE) 

我希望得到任何幫助或建議,您可能有。我確實知道GLM中的互動術語,但現在想要這樣做。

+0

你能解釋一下這是什麼意思? 「雖然我目前正在手動完成這項工作,但當我向數據集添加更多組織時,這變得很困難。」你是什​​麼意思的「手動」,你有什麼具體的困難......內存不足?如果您發佈當前正在使用的代碼來執行此操作並顯示其無法使用的原因,將會有所幫助。 –

+1

我可以手動選擇我想要的行:Adipose_Tissue < - as.h2o(df [df $ tissues =='Adipose Tissue',c(1,2,4)])但我不想重複這個命令讓我們說200個組織。我遇到的困難不在於記憶,只是我無法弄清楚如何實現這個自動化。 –

+0

啊,好的。我明白你現在要問什麼 - 你只需要知道如何基於「組織」列中的值來對H2OFrame的行進行子集劃分以創建新的框架。 –

回答

1

由於您沒有直接提供數據,我從上面複製了您的示例作爲R data.frame。

library(h2o) 
h2o.init() 

# Example data as an R data.frame 
df <- data.frame(genes = c("A","B","C","D","E","F"), 
       samples = c("a","a","a","a","a","a"), 
       y = c(1,1,1,0,0,0), 
       tissue = c("Muscle","Brain","Brain","Muscle","Brain","Muscle")) 

# Convert R data.frame to H2OFrame 
hf <- as.h2o(df) 

不過,我認爲你有一個CSV此計算機上的數據,因此在現實中,你會做的是:

# Load data from disk directly into H2O cluster 
hf <- h2o.importFile("tissue_samples.csv") 

現在你已經在H2OFrame數據,只有幾個步驟:

# List of unique tissue types 
tissue_types <- as.list(h2o.unique(hf$tissue)) 

# Create list of frames (one for each tissue type) 
frames <- sapply(tissue_types, function(t) hf[(hf[,"tissue"] == t),]) 

# Set up h2o.glm arguments 
x <- c("genes", "samples") 
y <- "y" 

# List of glms (one for each tissue type) 
glms <- sapply(frames, function(fr) h2o.glm(x = x, y = y, 
         family = "poisson", training_frame = fr)) 

# Save the models 
model_names <- sapply(glms, function(m) h2o.saveModel(m, path = "/Users/me/", force = TRUE)) 

# Look at model names 
print(model_names) 
# [1] "/Users/me/GLM_model_R_1497937770060_222" 
# [2] "/Users/me/GLM_model_R_1497937770060_223" 
+0

這可行!我以前不知道在%中使用%! –

+1

是的,你可以使用'%in%'或'h2o.match()':https://www.rdocumentation.org/packages/h2o/versions/3.10.4.6/topics/h2o.match –

+1

它可能更乾淨使用'=='代替'%in%',因爲這在基礎R中更常見,所以我更新了答案。 –