आर

2017-07-12 5 views
7

में एच 2o मॉडलिंग पर LIME का कार्यान्वयन मैं आर में एच 2o (गहरी शिक्षा) का उपयोग करके बनाए गए मॉडल पर LIME को कार्यान्वित करना चाहता हूं। मॉडल में डेटा का उपयोग करने के लिए, मैंने h2oFrames बनाए और इसे उपयोग करने से पहले इसे डेटाफ्रेम में परिवर्तित कर दिया LIME (चूना फ़ंक्शन, क्योंकि LIME का समझा कार्य H2oFrame को पहचान नहीं सकता है)। यहां मैं फ़ंक्शनआर

अगला चरण स्पष्टीकरण उत्पन्न करने के लिए परीक्षण डेटा पर व्याख्या कार्य का उपयोग करने में सक्षम हूं। यहां आर डेटाफ्रेम के साथ-साथ h2oFrame का उपयोग करने के लिए एक त्रुटि फेंकता है।

यह जब एक dataframe उपयोग करते हुए उत्पन्न त्रुटि है:

Error in UseMethod("permute_cases") : 
    no applicable method for 'permute_cases' applied to an object of class "H2OFrame" 
if(!require(pacman)) install.packages("pacman") 
pacman::p_load(h2o, lime, data.table, e1071) 

data(iris) 
h2o.init(nthreads = -1) 
h2o.no_progress() 

# Split up the data set 
iris <- as.h2o(iris) 

split <- h2o.splitFrame(iris, c(0.6, 0.2), seed = 1234) 
iris_train <- h2o.assign(split[[1]], "train") # 60% 
iris_valid <- h2o.assign(split[[2]], "valid") # 20% 
iris_test <- h2o.assign(split[[3]], "test") # 20% 


output <- 'Species' 
input <- setdiff(names(iris),output) 


model_dl_1 <- h2o.deeplearning(
    model_id = "dl_1", 
    training_frame = iris_train, 
    validation_frame = iris_valid, 
    x = input, 
    y = output, 
    hidden = c(32, 32, 32), 
    epochs = 10, # hopefully converges earlier... 
    score_validation_samples = 10000, 
    stopping_rounds = 5, 
    stopping_tolerance = 0.01 
) 

pred1 <- h2o.predict(model_dl_1, iris_test) 
list(dimension = dim(pred1), pred1$predict) 

#convert to df from h2ofdataframe 

train_org<-as.data.frame(iris_train) 
#converting train h2oframe to dataframe 
sapply(train_org,class) #checking the class of train_org 
test_df <- as.data.frame(iris_test) 
#converting test data h2oFrame to dataframe 
test_sample <- test_df[1:1,] 

#works 
#lime is used to get explain on the train data 
explain <- lime(train_org, model_dl_1, bin_continuous = FALSE, n_bins = 
        5, n_permutations = 1000) 


# Explain new observation 
explanation <- explain(test_sample, n_labels = 1, n_features = 1) 
h2o.shutdown(prompt=F) 

कर सकते हैं:

Error in chk.H2OFrame(x) : must be an H2OFrame 

यह जब एक h2oframe उपयोग करते हुए उत्पन्न त्रुटि है कोई भी याचिका से मुझे एक समाधान या उचित dataFrame

+0

कृपया पूरी तरह से पुन: उत्पादित कोड उदाहरण के साथ-साथ चूने और एच 2o आर पैकेज के बारे में संस्करण जानकारी प्रदान करें। –

+1

आपको अपनी पोस्ट में कोड को अपडेट करने की आवश्यकता है ताकि यह पुन: उत्पन्न हो - यह कोई डेटासेट हो सकता है (आईरिस ठीक होगा)। कृपया यहां एमसीवी के बारे में स्टैक ओवरफ़्लो दिशानिर्देश देखें: https://stackoverflow.com/help/mcve अगर मैं कोड को डीबग करने में आपकी सहायता के लिए अपना कोड कॉपी/पेस्ट नहीं कर सकता, तो यह एक एमसीवीई नहीं है। –

+1

@ErinLeDell, प्रतिक्रिया के लिए धन्यवाद, मैं परिवर्तन कर दूंगा। – gattaca

उत्तर

4

हुड के नीचे lime पैकेज दो कार्यों, predict_model() और model_type() कि आप किसी भी मॉडल है कि वर्तमान में नहीं हैं के लिए सेटअप की जरूरत का उपयोग करता है के साथ चूने के समझाने समारोह का उपयोग करने के लिए एक रास्ता ढूँढने में मदद समर्थित।

आपके विशिष्ट उदाहरण के लिए, आपको यह करने की आवश्यकता है।

चरण 1: कक्षा H2OMultinomialModel के मॉडल के लिए एक सामान्य model_type फ़ंक्शन सेट करें। आप यहां सब कुछ बताते हैं lime आप किस मॉडल प्रकार को "वर्गीकरण" या "रिग्रेशन" जैसे प्रदर्शन करना चाहते हैं।

model_type.H2OMultinomialModel <- function(x, ...) { 
    # Function tells lime() what model type we are dealing with 
    # 'classification', 'regression', 'survival', 'clustering', 'multilabel', etc 
    # 
    # x is our h2o model 

    return("classification") 

} 

चरण 2: सेटअप वर्ग H2OMultinomialModel के मॉडल के लिए एक सामान्य predict_model कार्य करते हैं। यहां की कुंजी यह समझ रही है कि चूने के लिए काम करने के लिए इसे भविष्यवाणी की बजाय वर्गीकरण संभावनाओं की आवश्यकता होती है (मुझे पता लगाने में थोड़ी देर लग गई और इसे lime:::output_type(explaination) चर से निपटना पड़ा)।

predict_model.H2OMultinomialModel <- function(x, newdata, type, ...) { 
    # Function performs prediction and returns dataframe with Response 
    # 
    # x is h2o model 
    # newdata is data frame 
    # type is only setup for data frame 

    pred <- h2o.predict(x, as.h2o(newdata)) 

    # return classification probabilities only 
    return(as.data.frame(pred[,-1])) 

} 

एक बार जब आप इन कार्यों को ठीक से सेट, आप अपने lime स्क्रिप्ट चला सकते हैं।

# Lime is used to get explain on the train data 
explainer <- lime(train_org, model_dl_1, bin_continuous = FALSE, n_bins = 5, n_permutations = 1000) 

# Explain new observation 
explanation <- explain(test_sample, explainer, n_labels = 1, n_features = 1) 
+0

ध्यान दें कि 'lime' पैकेज को तब से 'h2o' एकीकृत करने के लिए अद्यतन किया गया है। आपको यहां गिटहब संस्करण डाउनलोड करने की आवश्यकता हो सकती है: https://github.com/thomasp85/lime –