बहुत बड़ी संख्या में डेटा बिंदुओं में मानों की प्रतिरूपण कैसे करें?


12

मेरे पास एक बहुत बड़ा डेटासेट है और लगभग 5% यादृच्छिक मूल्य गायब हैं। ये चर एक दूसरे के साथ सहसंबद्ध हैं। निम्नलिखित उदाहरण R डाटासेट केवल एक खिलौना उदाहरण है जिसमें डमी सहसंबद्ध डेटा है।

set.seed(123)

# matrix of X variable 
xmat <- matrix(sample(-1:1, 2000000, replace = TRUE), ncol = 10000)
colnames(xmat) <- paste ("M", 1:10000, sep ="")
rownames(xmat) <- paste("sample", 1:200, sep = "")
#M variables are correlated 

N <- 2000000*0.05 # 5% random missing values 
inds <- round ( runif(N, 1, length(xmat)) )
xmat[inds] <- NA 
> xmat[1:10,1:10]
         M1 M2 M3 M4 M5 M6 M7 M8 M9 M10
sample1  -1 -1  1 NA  0 -1  1 -1  0  -1
sample2   1  1 -1  1  0  0  1 -1 -1   1
sample3   0  0  1 -1 -1 -1  0 -1 -1  -1
sample4   1  0  0 -1 -1  1  1  0  1   1
sample5  NA  0  0 -1 -1  1  0 NA  1  NA
sample6  -1  1  0  1  1  0  1  1 -1  -1
sample7  NA  0  1 -1  0  1 -1  0  1  NA
sample8   1 -1 -1  1  0 -1 -1  1 -1   0
sample9   0 -1  0 -1  1 -1  1 NA  0   1
sample10  0 -1  1  0  1  0  0  1 NA   0

क्या इस स्थिति में लापता मूल्यों को लागू करने का एक (सबसे अच्छा) तरीका है? क्या रैंडम फॉरेस्ट एल्गोरिथ्म मददगार है? आर में किसी भी काम कर समाधान बहुत सराहना की जाएगी।

संपादन:

(1) गुम मूल्यों बेतरतीब ढंग से चर और samples.As बीच वितरित कर रहे चर की संख्या है बहुत बड़ी है, जबकि - (10000 उदाहरण में यहाँ) नमूनों की संख्या से ऊपर डमी उदाहरण यह 200 तो जब के बारे में है में यहाँ छोटा है हम सभी चर (10000) पर किसी भी नमूने को देखते हैं, उच्च संभावना है कि कुछ चर पर लापता मूल्य होगा - बड़ी संख्या में चर के कारण। इसलिए सिर्फ सैंपल डिलीट करना विकल्प नहीं है।

(२) परिवर्तनशील होने की प्रक्रिया में चर को मात्रात्मक या गुणात्मक (बाइनरी) दोनों के रूप में माना जा सकता है। एकमात्र निर्णय यह है कि हम कितनी अच्छी तरह से इसका अनुमान लगा सकते हैं (सटीकता)। इसलिए 1 के बजाय 0.98 जैसी भविष्यवाणियां स्वीकार्य हो सकती हैं बल्कि 0 बनाम 1 या -1 बनाम 1. मुझे कंप्यूटिंग समय और सटीकता के बीच व्यापार करने की आवश्यकता हो सकती है।

(३) मैं यह सोच रहा हूँ कि ओवरफिटिंग परिणामों को कैसे प्रभावित कर सकता है क्योंकि नमूनों की संख्या की तुलना में चर की संख्या बड़ी है।

(4) चूंकि लापता मानों की कुल मात्रा लगभग 5% है और यादृच्छिक है (किसी भी चर या नमूनों में केंद्रित नहीं है क्योंकि चर या नमूने जो बहुत अधिक लापता मान हैं, निकालने के लिए सावधानी बरती गई थी)

(5) विश्लेषण के लिए डेटा को पूरा करना पहला उद्देश्य है और सटीकता माध्यमिक है। तो सटीकता के प्रति भी संवेदनशील नहीं।

r  random-forest  missing-data  data-imputation  multiple-imputation  large-data  definition  moving-window  self-study  categorical-data  econometrics  standard-error  regression-coefficients  normal-distribution  pdf  lognormal  regression  python  scikit-learn  interpolation  r  self-study  poisson-distribution  chi-squared  matlab  matrix  r  modeling  multinomial  mlogit  choice  monte-carlo  indicator-function  r  aic  garch  likelihood  r  regression  repeated-measures  simulation  multilevel-analysis  chi-squared  expected-value  multinomial  yates-correction  classification  regression  self-study  repeated-measures  references  residuals  confidence-interval  bootstrap  normality-assumption  resampling  entropy  cauchy  clustering  k-means  r  clustering  categorical-data  continuous-data  r  hypothesis-testing  nonparametric  probability  bayesian  pdf  distributions  exponential  repeated-measures  random-effects-model  non-independent  regression  error  regression-to-the-mean  correlation  group-differences  post-hoc  neural-networks  r  time-series  t-test  p-value  normalization  probability  moments  mgf  time-series  model  seasonality  r  anova  generalized-linear-model  proportion  percentage  nonparametric  ranks  weighted-regression  variogram  classification  neural-networks  fuzzy  variance  dimensionality-reduction  confidence-interval  proportion  z-test  r  self-study  pdf 

1
कारण क्यों डेटा याद कर रहे हैं उचित तकनीक की पसंद पर दृढ़ता से उठाती है। उदाहरण के लिए, यदि डेटा पूरी तरह से गायब है, तो आप सभी मामलों को लापता मानों के साथ छोड़ने से कम हो जाएंगे (क्योंकि डेटासेट बड़ा है और अपेक्षाकृत कुछ मान गायब हैं); लेकिन अगर लापता विश्लेषण में महत्वपूर्ण चर से संबंधित है, तो उन मामलों को छोड़ देना पूर्वाग्रह का परिचय दे सकता है।
whuber

1
@ जब भी मैं सहमत हूं, इस आकार के डेटासेट के लिए इसे हटाना संभव नहीं है क्योंकि प्रत्येक मामले में कम से कम एक चर में एक लापता मूल्य होगा। इससे डेटा का कुल नुकसान होगा।
जॉन

4
यह सवाल काफी हद तक जॉन को बदल देता है, क्योंकि अपने वर्तमान रूप में यह स्पष्ट रूप से अन्यथा बताता है: यह दावा करता है कि केवल 5% मूल्य गायब हैं। यहां तक ​​कि अगर हम 5% मामलों को डेटा मैट्रिक्स में सभी प्रविष्टियों पर लागू करने के लिए समझते हैं , तो 5% मामलों के बजाय, आपके डेटा की प्रकृति के संकेत के रूप में उदाहरण लेने वाला कोई भी व्यक्ति वैध रूप से यह निष्कर्ष निकालेगा कि 10 * 5% = 50 से अधिक नहीं % मामलों में लापता मान हैं। ऐसे प्रश्नों में वर्णन करने के लिए तीन चीजें जो सबसे महत्वपूर्ण हैं, वे हैं (1) विश्लेषण का उद्देश्य, (2) लापता होने की प्रकृति, और (3) लापता होने की मात्रा।
whuber

जवाबों:


8

आपकी स्थिति और डेटासेट के आधार पर, बड़े चर और छोटे नमूने (अवलोकन) समस्या से निपटने के दो तरीके हो सकते हैं।

(1) बस नमूने (टिप्पणियों) का उपयोग करें क्योंकि चर प्रदान किया जाता है कि चर में स्कोर समान या सामान्यीकृत है।

(२) चर का प्रयोग चर के रूप में करते हैं लेकिन थोपते समय कुछ यादृच्छिक नमूना करते हैं ताकि संख्या चर नमूने की संख्या से कम हो और अंत में डेटा को मर्ज करें।

निम्नलिखित कसरत है, आप अपनी जरूरत के अनुसार समायोजित कर सकते हैं। मुझे लगता है कि चर निरंतर है लेकिन आप असतत चर के लिए इसी तरह की कसरत करते हैं। यहां मैं त्वरित जांच के लिए छोटा उदाहरण दे रहा हूं।

सबसे पहले, सहसंबद्ध डेटा उत्पन्न करने वाले वर्कआउट के लिए, यहाँ अवलोकनों (नमूनों) को सहसंबद्ध किया जाता है, स्थितियों में यथार्थवादी हो सकता है, चर स्वतंत्र माने जाते हैं, जबकि चर को स्वतंत्र माना जाता है। लेकिन अन्य स्थितियों में जहां अवलोकन और चर दोनों सहसंबद्ध हैं।

# example correlated data, correlated by observations 
# number of observations 
nobs = 200
nvars = 100
# number of variables 
# covariance matrix matrixCR to create correlated data 
matrixCR <- matrix(NA, nrow = nobs, ncol = nobs)
diag(matrixCR) <- 1
matrixCR[upper.tri (matrixCR, diag = FALSE)] <- 0.5
matrixCR[lower.tri (matrixCR, diag = FALSE)] <- 0.5
matrixCR[1:10,1:10]
L = chol(matrixCR)# Cholesky decomposition
nvars = dim(L)[1]
set.seed(123)
rM = t(L) %*% matrix(rnorm(nvars*nobs), nrow=nvars, ncol=nobs)
rownames(rM) <- paste("V", 1:nvars, sep = "") 
colnames(rM) <- paste("O", 1:nobs, sep = "")
rM[1:10,1:10]



# introduce missing values in random places 
N <- round(nobs*nvars*0.05,0) # 5% random missing values 
set.seed(123)
inds <- round ( runif(N, 1, length(rM)) )
rM1 <- rM
rM1[inds] <- NA

मैं missForestअभियोग के लिए पैकेज का उपयोग कर रहा हूं , जो randomForestऐसा करने के लिए पैकेज पर निर्भर करता है। यदि आप बहुत बड़ी संख्या में डेटा पॉइंट लगाते हैं, तो आप समानांतर कंप्यूटिंग कर सकते हैं।

# now use the rM1 matrix in imputation. 
require(missForest)
out.m <- missForest(rM1, maxiter = 10, ntree = 300)
# imputed 
imp.rM1 <- out.m$ximp

जैसा कि यह सिम्युलेटेड डेटा सेट है, हमारे पास प्रतिभूतियों के साथ पेश किए गए लापता मानों से पहले मूल की तुलना करके प्रतिरूपण की सटीकता का अनुमान लगाने की लक्जरी है।

# actual values that were made missing 
aval <- rM[inds]
impv <- imp.rM1[inds]

# accuracy - defined as correlation between actual (before na introduction) and imputed values 
cor(aval,impv)
[1] 0.6759404

आप सटीकता बढ़ाने के लिए चारों ओर काम कर सकते हैं। सौभाग्य !


5

डेटा प्रतिरूपण की पूर्ण पुस्तकें हैं, इसलिए इस ढांचे में उत्तर देना मुश्किल है।

इस मामले में सबसे आसान काम एक कॉलम ( ) को चुनना और दूसरे को मैट्रिक्स में इकट्ठा करना है ।x yx

एक मॉडल को प्रशिक्षित किया जाता है और लापता मूल्यों को हमारे मॉडल द्वारा अनुमानित मूल्यों से बदल दिया जाता है। आपका डेटा श्रेणीबद्ध प्रतीत होता है इसलिए यादृच्छिक वन एक अच्छा विकल्प हो सकता है।y=f(x)

यदि आपका डेटासेट बहुत बड़ा है तो तेज़ एल्गोरिथम या स्केलेबल का उपयोग करना सुनिश्चित करें।


धन्यवाद, क्या आपके पास कोई पुस्तक सुझाव है?
जॉन

विशेष रूप से कुछ भी नहीं। लेकिन अगर आप Google डेटा
इंप्रूवमेंट करते

वैसे भी अगर कुछ ही मूल्य याद आ रहे हैं तो आप सभी लाइन को हटा सकते हैं। अपने डेटासेट से
डॉनबेओ

3
हालाँकि आप हमेशा गायब मानों के साथ मामलों को हटा सकते हैं, लेकिन कभी-कभी एक खराब विकल्प होगा, इस पर निर्भर करता है कि डेटा क्यों गायब है।
whuber

@ जब भी मैं आपसे पूरी तरह सहमत हूं लेकिन बहुत बार यह सिर्फ सुरक्षित विकल्प है।
डोनेबो

5

यह वास्तव में एक दिलचस्प सवाल है। मैं भी उसी चीज की तलाश में हूं। दरअसल, इससे निपटने के लिए बहुत से अलग-अलग तरीके हैं।

पहली बात, मेरी राय में, यह निर्धारित करना होगा कि आपके पास किस प्रकार का लापता डेटा है - यादृच्छिक (MCAR) में पूरी तरह से गायब है, यादृच्छिक (MAR) पर अनुपलब्ध है, या यादृच्छिक (NMAR) पर नहीं है। यह साबित करना मुश्किल और विवादास्पद है लेकिन यह पेपर MAR डेटा को देखने का एक दिलचस्प तरीका दिखाता है।

कई आरोपों से निपटने के लिए R के पास कुछ पैकेज हैं:

  • MICE (जो बहुत उपयोग किया जाता है),
  • randomForest,
  • Hmisc
  • Amelia
  • mi

ये अभी तक मुझे मिले पैकेजों में से कुछ ही हैं।

MICE पूर्वानुमानित माध्य मिलान जैसे यादृच्छिक वन और कुछ अन्य तरीके भी लागू किए हैं।

यह ज्यादा नहीं है लेकिन आपको कुछ चीजों का पता लगाने में मदद कर सकता है। जैसे ही मेरे पास परिणाम होंगे या मैं किस विधि से आगे बढ़ूंगा, मैं पोस्ट संपादित करूंगा।

सौभाग्य!


मेरा डेटा MCAR है।
जॉन

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

3

दिलचस्प सवाल। इसके लिए ट्रिक यह है कि, कई इम्प्लिमेंटेशन करने के लिए, आपको केवल एक प्रेडिक्टिव मॉडल (जो एक मशीन लर्निंग अप्रोच में कहना, प्राप्त करना / करना आसान होगा) से अधिक की आवश्यकता है। हम इन मॉडलों को अनुकरण मॉडल कहेंगे, क्योंकि वे काफी संभावना वाले मॉडल नहीं हैं।

फीचर चयन (बड़ा ) और एक सिमुलेशन मॉडल को प्रशिक्षित करने का संयुक्त पहलू मुझे लगता है कि बायेसियन दृष्टिकोण सबसे अच्छा है। इसका मतलब यह भी है कि इसके लिए एक स्पष्ट दृष्टिकोण नहीं है। मेरे लिए सबसे अच्छा तरीका निम्नलिखित दृष्टिकोण होगा:p

  1. सभी लापता पैटर्न को पहचानें
  2. प्रत्येक पैटर्न के लिए, डेटा में मामलों को पूरा करने के लिए पश्च भार को असाइन करने के लिए एक बायेसियन सुविधा चयन दृष्टिकोण का उपयोग करें।
  3. बेतरतीब ढंग से नमूना पूरा मामलों iteratively पूरा डेटा फ्रेम उत्पन्न करने के लिए।

3

आपकी समस्या कम-रैंक मैट्रिक्स के किसी प्रकार के पूरा होने के लिए दर्जी की तरह लगती है। पैकेजimpute.svd() से फ़ंक्शन का उपयोग करने का प्रयास करें । मैं एक छोटे रैंक (तर्क ) का उपयोग करने का सुझाव दूंगा - 5 जैसा कुछ।bcvk

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