"अर्ध पर्यवेक्षित शिक्षण" - क्या यह ओवरफिटिंग है?


21

मैं एक कागल प्रतियोगिता ( मालवेयर क्लासिफिकेशन ) के जीतने के समाधान की रिपोर्ट पढ़ रहा था । रिपोर्ट इस फ़ोरम पोस्ट में पाई जा सकती है । समस्या एक वर्गीकरण समस्या थी (नौ कक्षाएं, ट्रेन सेट में 10000 तत्वों के साथ मीट्रिक का लॉगरिदमिक नुकसान था), परीक्षण सेट में 10000 तत्व।

प्रतियोगिता के दौरान, मॉडल का परीक्षण सेट के 30% के खिलाफ मूल्यांकन किया गया था। एक अन्य महत्वपूर्ण तत्व यह है कि मॉडल बहुत अच्छा प्रदर्शन कर रहे थे (100% सटीकता के करीब)

लेखकों ने निम्नलिखित तकनीक का इस्तेमाल किया:

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

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

मैं वास्तव में नहीं देखता कि यह परिणामों को कैसे बेहतर बना सकता है। क्या इसलिए कि परीक्षण सेट का 30% "लीक" हो गया था और यह इस जानकारी का उपयोग करने का एक तरीका था?

या फिर कोई सैद्धांतिक कारण है कि यह क्यों काम करता है?

जवाबों:


8

यह ओवरफिटिंग प्रतीत नहीं होता है। सहज रूप से, ओवरफिटिंग का तात्पर्य प्रशिक्षण सेट के क्विरक्स (शोर) से तात्पर्य है और इसलिए एक आयोजित आउट-सेट परीक्षण पर खराब करना जो इन quirks को साझा नहीं करता है। अगर मुझे समझ में आया कि क्या हुआ, तो उन्होंने अप्रत्याशित रूप से खराब परीक्षण के आंकड़ों पर खराब प्रदर्शन नहीं किया और ऐसा अनुभवजन्य नियम था। (उनके पास एक और मुद्दा है, जिसका मैं अंत में उल्लेख करूंगा, लेकिन यह ओवरफिटिंग नहीं है।)

तो आप सही हैं कि यह उपलब्ध (30%?) परीक्षण डेटा का लाभ उठाता है। सवाल यह है: कैसे?

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

ध्यान दें कि यदि आप किसी सटीकता स्कोर तक पहुँच रखते हैं, तो लेबल को स्पष्ट रूप से सूचीबद्ध नहीं करना पड़ेगा। आप बार-बार स्कोर प्रस्तुत करके सटीकता ढाल पर चढ़ सकते हैं, जो कि लोगों ने अतीत में खराब डिजाइन वाली प्रतियोगिताओं के साथ किया है।

यह देखते हुए कि उपलब्ध परीक्षण डेटा में इससे जुड़े लेबल नहीं हैं - प्रत्यक्ष या अप्रत्यक्ष रूप से - कम से कम दो अन्य संभावनाएँ हैं:

सबसे पहले, यह एक अप्रत्यक्ष बूस्टिंग तरीका हो सकता है, जहां आप उन मामलों पर ध्यान केंद्रित कर रहे हैं जहां केवल छद्म-लेबल परीक्षण डेटा के साथ आपकी भविष्यवाणियों के साथ आपकी भविष्यवाणी से असहमत हैं।

दूसरा, यह सीधे-सीधे अर्ध-पर्यवेक्षणीय शिक्षण हो सकता है। सहज रूप से: आप एक पर्यवेक्षित विधि की वर्गीकरण सीमाओं को आकार देने में मदद करने के लिए अनलिस्टेड डेटा के घनत्व का उपयोग कर सकते हैं। चित्रण ( https://en.wikipedia.org/wiki/Semi-supervised_learning#/media/File:Example_of_unlabeled_data_in_semisupervised_pearning.png ) अर्ध-पर्यवेक्षित सीखने की विकिपीडिया परिभाषा में स्पष्ट करने के लिए देखें।

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

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

इसलिए वे यहां मेटा-गेमिंग हैं: उन्होंने जो किया वह प्रतियोगिता के नियमों के भीतर वैध था, क्योंकि उन्हें कुछ परीक्षण डेटा तक पहुंच दी गई थी। लेकिन यह वास्तविक दुनिया में वैध नहीं है, जहां असली परीक्षा नए डेटा पर भविष्य में कितनी अच्छी है।


2

नहीं, यह ओवरफिटिंग नहीं है।

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

इस तरह का दृष्टिकोण क्यों काम कर रहा है,
इस बारे में यहां बताया गया दृष्टिकोण दुनिया के बाहर नहीं है, मैंने कई लोगों को कई मशीन-लर्निंग प्रतियोगिताओं में ऐसा करते देखा है (क्षमा करें, मैंने कोशिश की, लेकिन जहां मैंने यह देखा है, उसे याद नहीं कर सकता)।
जब आप परीक्षण डेटा के एक हिस्से की भविष्यवाणी करते हैं और इसमें शामिल होते हैं कि प्रशिक्षण में, मॉडल को नई सुविधाओं से अवगत कराया जाएगा। इस मामले में, परीक्षण डेटा प्रशिक्षण डेटा जितना बड़ा है, कोई आश्चर्य नहीं कि वे अर्ध-पर्यवेक्षणीय सीखने से इतना अधिक प्राप्त कर रहे हैं।

आशा है कि यह
धन्यवाद समझाता है


आपको "मॉडल" को स्पष्ट रूप से परिभाषित करने की आवश्यकता है। यह पूरी तरह से सामान्यीकृत डिग्री ऑफ फ्रीडम ( pegasus.cc.ucf.edu/~lni/sta6236/Ye1998.pdf ) मुद्दे की तरह है, जहां कोई व्यक्ति "अंतिम मॉडल" की ओर इशारा करता है , जो सरल प्रतीत होता है, लेकिन वास्तव में है प्रक्रिया में भरी हुई बहुत सी जटिलता। मेरी वृत्ति यह है कि आप बाकी प्रक्रिया को अनदेखा नहीं कर सकते हैं और "अंतिम मॉडल" की ओर इशारा कर सकते हैं, दावा है कि यह अर्ध-पर्यवेक्षित कदम के बिना "अंतिम मॉडल" से अधिक जटिल नहीं है, और फिर आगे बढ़ें। बाहर का नमूना परीक्षण के परिणाम में सुधार है के रूप में आप कहते हैं, एक अच्छा संकेत है।
वेन

2

यह फिटिंग पर सकल नहीं है (परिभाषा के आधार पर)। परीक्षण सेट की लक्ष्य जानकारी संरक्षित है। सेमी-पर्यवेक्षित को मॉडल को प्रशिक्षित करने के लिए सेट एक अतिरिक्त सिंथेटिक डेटा उत्पन्न करने की अनुमति देता है। वर्णित दृष्टिकोण में, मूल प्रशिक्षण डेटा 4: 3 के अनुपात में सिंथेटिक के साथ मिश्रित नहीं है। इस प्रकार, यदि सिंथेटिक डेटा की गुणवत्ता खराब है, तो दृष्टिकोण विनाशकारी होगा। मैं किसी भी समस्या के लिए अनुमान लगाता हूं जहां पूर्वानुमान अनिश्चित हैं, सिंथेटिक डेटा सेट खराब सटीकता का होगा। यदि अंतर्निहित संरचना बहुत जटिल है और सिस्टम में कम शोर है, तो यह सिंथेटिक डेटा उत्पन्न करने में मदद कर सकता है, मुझे लगता है। मुझे लगता है कि अर्ध-पर्यवेक्षित शिक्षण गहरी शिक्षा (मेरी विशेषज्ञता नहीं) के भीतर काफी बड़ा है, जहां सुविधा प्रतिनिधित्व को भी सीखना है।

मैंने बिना किसी सकारात्मक परिणाम के rf और xgboost दोनों के साथ कई डेटा सेटों पर अर्ध-प्रशिक्षित प्रशिक्षण के साथ बढ़ी हुई सटीकता को पुन: पेश करने की कोशिश की है। [अपने कोड को संपादित करने के लिए स्वतंत्र महसूस करें।] मुझे लगता है कि अर्ध-पर्यवेक्षित का उपयोग करते हुए सटीकता की वास्तविक सुधार कग्गल रिपोर्ट में काफी मामूली है, शायद यादृच्छिक?

rm(list=ls())
#define a data structure
fy2 = function(nobs=2000,nclass=9) sample(1:nclass-1,nobs,replace=T)
fX2 = function(y,noise=.05,twist=8,min.width=.7) {
  x1 = runif(length(y)) * twist
  helixStart = seq(0,2*pi,le=length(unique(y))+1)[-1]
  x2 = sin(helixStart[y+1]+x1)*(abs(x1)+min.width) + rnorm(length(y))*noise
  x3 = cos(helixStart[y+1]+x1)*(abs(x1)+min.width) + rnorm(length(y))*noise
  cbind(x1,x2,x3)
}

#define a wrapper to predict n-1 folds of test set and retrain and predict last fold  
smartTrainPred = function(model,trainX,trainy,testX,nfold=4,...) {
  obj = model(trainX,trainy,...)
  folds = split(sample(1:dim(trainX)[1]),1:nfold)
  predDF = do.call(rbind,lapply(folds, function(fold) {
    bigX      = rbind(trainX ,testX[-fold,])
    bigy      = c(trainy,predict(obj,testX[-fold,]))
    if(is.factor(trainy)) bigy=factor(bigy-1)
    bigModel  = model(bigX,bigy,...)
    predFold  = predict(bigModel,testX[fold,])
    data.frame(sampleID=fold, pred=predFold)
  }))
  smartPreds = predDF[sort(predDF$sampleID,ind=T)$ix,2]
}

library(xgboost)
library(randomForest)

#complex but perfect separatable
trainy = fy2(); trainX = fX2(trainy)
testy  = fy2();  testX = fX2(testy )
pairs(trainX,col=trainy+1)

यहाँ छवि विवरण दर्ज करें

#try with randomForest
rf = randomForest(trainX,factor(trainy))
normPred = predict(rf,testX)
cat("\n supervised rf", mean(testy!=normPred))
smartPred = smartTrainPred(randomForest,trainX,factor(trainy),testX,nfold=4)
cat("\n semi-supervised rf",mean(testy!=smartPred))

#try with xgboost
xgb = xgboost(trainX,trainy,
              nrounds=35,verbose=F,objective="multi:softmax",num_class=9)
normPred = predict(xgb,testX)
cat("\n supervised xgboost",mean(testy!=normPred))

smartPred = smartTrainPred(xgboost,trainX,trainy,testX,nfold=4,
                           nrounds=35,verbose=F,objective="multi:softmax",num_class=9)
cat("\n semi-supervised xgboost",mean(testy!=smartPred))



printing prediction error:
 supervised rf 0.007
 semi-supervised rf 0.0085
 supervised xgboost 0.046
 semi-supervised xgboost 0.049

1

इस परिभाषा के अनुसार: "ओवरफिटिंग तब होती है जब एक सांख्यिकीय मॉडल अंतर्निहित संबंध के बजाय यादृच्छिक त्रुटि या शोर का वर्णन करता है।" (विकिपीडिया), समाधान ओवरफिटिंग नहीं है।

लेकिन इस स्थिति में:
- टेस्ट डेटा वस्तुओं की एक धारा है न कि वस्तुओं का एक निश्चित सेट।
या
- भविष्यवाणी प्रक्रिया में सीखने का चरण नहीं होना चाहिए (उदाहरण के लिए प्रदर्शन समस्याओं के कारण)

उल्लिखित समाधान ओवरफिटिंग है। क्योंकि मॉडलिंग की सटीकता वास्तविक स्थितियों से अधिक है।

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