आर में वर्गीकरण मॉडल के लिए वृद्धिशील शिक्षण


11

मान लें, मेरे पास एक क्लासिफायरियर है (यह किसी भी मानक क्लासिफायरिफायर हो सकता है जैसे नीचे दिए गए कोड का उपयोग करके धोखाधड़ी का पता लगाने के लिए निर्णय पेड़, यादृच्छिक वन, लॉजिस्टिक प्रतिगमन .. आदि)।

library(randomForest)
rfFit = randomForest(Y ~ ., data = myData, ntree = 400) # A very basic classifier 

Say, Y is a binary outcome - Fraud/Not-Fraud

अब, मैंने अनदेखी डेटा सेट पर भविष्यवाणी की है ।

pred = predict(rfFit, newData)

फिर मैंने अपने वर्गीकरण पर जांच टीम से प्रतिक्रिया प्राप्त की और पाया कि मैंने एक धोखाधड़ी को गैर-धोखाधड़ी (यानी एक झूठी नकारात्मक ) के रूप में वर्गीकृत करने की गलती की है । वहाँ वैसे भी है कि मैं अपने एल्गोरिथ्म को समझने दे सकता हूँ कि यह एक गलती की है? यानी एल्गोरिथ्म में एक फीडबैक लूप जोड़ने का कोई तरीका ताकि यह गलतियों को ठीक कर सके?

एक विकल्प जो मैं सोच सकता हूं कि मेरे सिर के ऊपर से एक का निर्माण होता है adaboost classifierताकि नया क्लासिफायरियर पुराने की गलती को ठीक कर दे। या मैंने कुछ सुना है Incremental Learningया Online learning। क्या इसमें कोई मौजूदा कार्यान्वयन (पैकेज) हैं R?

क्या यह सही तरीका है? या क्या इसे खरोंच से बनाने के बजाय मॉडल को मोड़ने का कोई और तरीका है?


क्या आपको एक समाधान मिला? मेरे साथ भी वही दिक्कत है।
Blu3nx

@ Blu3nx कृपया प्रश्नों का उत्तर देने के लिए उत्तरों का उपयोग न करें। जवाब उन्हें जवाब देने के लिए होता है।
टिम

उत्तर नहीं है, लेकिन जो आपको सिर्फ myData $ Fraud [positionofincorrectvariable] = सही मान जाने से रोक रहा है?
डेल सी।

जवाबों:


2

एक बूस्टिंग रणनीति आपके मॉडल के प्रदर्शन में सुधार कर सकती है, इसलिए यह एक कोशिश के लायक है। वृद्धिशील / ऑनलाइन सीखने के संबंध में, मुझे आर के किसी भी पैकेज के बारे में पता नहीं है जो इसे लागू करता है (अन्य, कृपया मुझे सही करें अगर मैं गलत हूं)। स्किकिट लर्न में, ऐसे आउट-ऑफ-कोर क्लासिफायर हैं जो वृद्धिशील सीखने की अनुमति देते हैं। हालाँकि, यदि आप R का उपयोग करने के लिए बंधे हैं, तो आपके पास अपने स्वयं के वृद्धिशील मॉडल को लिखने के अलावा कोई विकल्प नहीं हो सकता है। या तो मामले में, स्किकिट लर्न के आउट-ऑफ-कोर क्लासिफायरियर को देखकर आपको अंदाजा हो सकता है कि कहां से शुरुआत करनी है।

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

मानव जांचकर्ताओं के फीडबैक के आधार पर अपने पर्यवेक्षित मॉडल को बेहतर बनाने का सबसे सीधा तरीका सही उदाहरणों से एक अलग मॉडल बनाना होगा (अर्थात गलत तरीके से किए गए पूर्वानुमान जो कि ठीक से लेबल किए जाने के बाद थे)। तब आप अपने पूर्वानुमानित वर्ग के सदस्यों को एकत्रित करके भविष्य के उदाहरणों के वर्गीकरण पर अपने दो मॉडल "वोट" दे सकते थे। उदाहरण के लिए, ModelA का मानना ​​है कि Instance1 [धोखाधड़ी: 0.65, गैर-धोखाधड़ी: 0.35] है, जबकि ModelB का मानना ​​है कि Instance1 [धोखाधड़ी: 0.47, गैर-धोखाधड़ी: 0.53] है। पहनावा की भविष्यवाणी इस प्रकार होगी [धोखाधड़ी: (0.65 + 0.47) / 2=0.56, गैर-धोखाधड़ी: (0.35 + 0.53) / 2=0.44]।

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


0

मैंने ऑनलाइन और वृद्धिशील शिक्षण के बारे में अतीत में कुछ शोध किए थे। कुछ विचार हैं जिन्हें आपको ध्यान में रखना चाहिए।

प्रत्येक क्लासिफायरियर 'वृद्धिशील' कर सकता है, एकमात्र समस्या यह है कि ऐसा करने के लिए कुछ अधिक कठिन है। वृद्धिशील अधिगम एल्गोरिथ्म नहीं है जैसे, केवल सामान्य एल्गोरिदम का उपयोग करके इस खरीद को प्राप्त करने का एक तरीका है। आम तौर पर, आप उनमें से किसी एक को चुनते हैं और जिस तरह से आप इसे प्रशिक्षित करते हैं और डेटा को एक बैच या एक ऑनलाइन फैशन में खिलाते हैं।

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

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

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

सौभाग्य!

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