2012-12-02 9 views
13

मैं एसएएस से दूर जाने की कोशिश कर आर के लिए एक नया उपयोगकर्ता हूं। मैं यहां इस सवाल से पूछ रहा हूं क्योंकि मैं आर के लिए उपलब्ध सभी संकुलों और स्रोतों से थोड़ा निराश महसूस कर रहा हूं, और मुझे लगता है कि मुख्य रूप से डेटा आकार के कारण यह काम नहीं कर रहा है।बड़े डेटाबेस का नमूना कैसे लें और आर में के-साधन और के-एनएन लागू करें?

एक तालिका 200 भविष्यवक्ता सुविधाओं और एक वर्ग चर के साथ एक स्थानीय MySQL डेटाबेस में स्रोत कहा जाता है:

मैं निम्नलिखित है। तालिका में 3 मिलियन रिकॉर्ड हैं और 3 जीबी बड़ा है। प्रति वर्ग के उदाहरणों की संख्या बराबर नहीं है।

  1. एक बेतरतीब ढंग से स्रोत डेटाबेस प्रति कक्षा उदाहरणों में से समान संख्या के साथ के एक छोटे डाटासेट बनाने के लिए नमूना:

    मैं करना चाहता हूँ।

  2. प्रशिक्षण और परीक्षण सेट में नमूना विभाजित करें।
  3. प्रति वर्ग के सेंट्रॉइड निर्धारित करने के लिए प्रशिक्षण सेट पर प्रीफॉर्म के-साधन क्लस्टरिंग।
  4. सेंट्रॉइड के साथ परीक्षण डेटा के प्री-के-एनएन वर्गीकरण।
+5

तो आपका स्वागत है! मैं आपको सुझाव देता हूं: ** RMysqlite ** नमूनाकरण के लिए अपना डेटा निकालने के लिए पैकेज * नमूना * फ़ंक्शन (** आधार ** पैकेज)! * kmeans * समारोह (** आधार ** पैकेज)! * knn * फ़ंक्शन (** कक्षा ** पैकेज) – agstudy

+0

बड़े डेटा को कैसे संभालें? डेटाबेस के साथ समस्या, स्मृति में पूर्व नमूना रखा जा रहा है। केवल 4 जीबी रैम है। – erichfw

+2

यादृच्छिक चयन करने के लिए डीबी इंजन का उपयोग करने का प्रयास करें: http://stackoverflow.com/q/580639/269476। – James

उत्तर

0

मैं आपको दो प्रश्नों के लिए मदद कर सकता हूं। 1- स्तरीकृत नमूना 2-विभाजन प्रशिक्षण & परीक्षण (यानी अंशांकन सत्यापन)

 n = c(2.23, 3.5, 12,2, 93, 57, 0.2, 
33, 5,2, 305, 5.3,2, 3.9, 4) 
    s = c("aa", "bb", "aa","aa", "bb", "cc","aa", "bb", 
"bb","aa", "aa","aa","aa","bb", "cc") 
     id = c(1, 2, 3,4, 5, 6,7, 8, 9, 
10, 11, 12,13, 14, 15) 
     df = data.frame(id, n, s)  # df is a data frame 

     source("http://news.mrdwab.com/stratified") 
     sample<- stratified(df=df, 
          id=1, #ID of your dataframe, 
          #if there isn't you have to create it 
          group=3, #the position of your predictor features 
          size=2, #cardinality of selection 
          seed="NULL") 

     #then add a new column to your selection 
     sample["cal_val"]<- 1 

     #now, you have a random selection of group 3, 
     #but you need to split it for cal and val, so: 

     sample2<- stratified(df=sample, #use your previous selection 
          id=1, 
          group=3, #sample on the same group used previously 
          size=1,#half of the previous selection 
          seed="NULL") 

     sample2["val"]<- 1 
     #merge the two selection 
     merge<- merge(sample, sample2, all.x=T, by="id") 
     merge[is.na(merge)] <- 0 #delete NA from merge 
    #create a column where 1 is for calibration and 2 for validation  
    merge["calVal"]<- merge$cal_val.x + merge$cal_val.y 
#now "clean" you dataframe, because you have too many useless columns  
id<- merge$id 
     n<- merge$n.x 
     s<- merge$s.x 
     calval<- merge$calVal 
     final_sample<- data.frame(id, n, s, calval) 
2

तरह से मैं आगे बढ़ना होगा है:

1), आप कर सकते हैं आर को अपनी तालिका के आईडी की एक सूची निकालें RMySQL लाइब्रेरी का उपयोग करके एक साधारण SQL क्वेरी के साथ ऐसा करें।

2) आर में किसी भी तरह से आईडी को विभाजित करें, और उसके बाद RMySQL का उपयोग करके फिर से एसक्यूएल प्रश्नों को दोबारा करें (मुझे यह दो चरण दृष्टिकोण सीधे MySQL में नमूनाकरण से अधिक तेज़ पाया गया है)।

3) आधार आर केमन्स कार्यान्वयन का उपयोग करके आप अपना नमूना कितना बड़ा हो सकते हैं, इस पर निर्भर करते हुए, यह बड़े नमूने के लिए असफल हो सकता है, उस स्थिति में आपको लाइब्रेरी biganalytics लाइब्रेरी से bigkmeans का उपयोग करना चाहिए।

0

मुझे लगता है कि आपकी कई समस्याओं को कैरेट पैकेज का उपयोग करके हल किया जा सकता है। समान वर्ग सदस्यता के साथ यादृच्छिक नमूनाकरण के संबंध में, मैं इसे वापस एसक्यूएल में धक्का दूंगा, बस निर्दिष्ट प्रत्येक वर्ग के लिए इच्छित आकार के साथ दो प्रश्नों को चला रहा हूं। अन्य ने आरएमआईएसक्ल, आरओडीबीसी या आरजेडीबीसी का भी उल्लेख किया है।

# separate data into test and train sets, 70/30 split in this case 

splitIndex <- createDataPartition(mydata$mytargetcolumn, p = 0.7, list = FALSE) 
train <- mydata[splitIndex, ] 
test <- mydata[-splitIndex, ] 
testInd <- test[ ,!colnames(test) %in% "mytargetcolumn"] 
testDep <- as.factor(test[, names(test) == "mytargetcolumn"]) 

आप भी अपनी KNN कैरट का उपयोग कर सकते, इस तरह:: ट्रेन और परीक्षण सेट में डेटा को अलग करने के लिए, निम्न कैरट फ़ंक्शन का उपयोग

modelKNN <- knn3(mytargetcolumn ~ ind1 + ind2, data = train, k = neighborCount, prob = TRUE) 

और फिर भविष्यवाणी आसान है:

# prediction using KNN to get class probabilities, change 'type' if you just want class prediction 

predKNN <- predict(modelKNN, testInd, type = "prob") 

तुम भी मूल्यांकन के लिए कैरट का उपयोग कर सकते हैं:

# Generate confusion matrix from class predictions and actual values 

confKNN <- confusionMatrix(testDep, predKNN) 

हालांकि व्यक्तिगत रूप से मैं वर्गीकरण मॉडल मूल्यांकन के लिए एयूसी (पीआरओसी पैकेज के माध्यम से) का उपयोग करता हूं क्योंकि यह शुद्धता की तुलना में वर्गीकृत शक्ति का एक अधिक बढ़िया अनाज उपाय है।

संबंधित मुद्दे