2016-12-01 10 views
7

क्या मल्टीलाबेल वर्गीकरण के लिए xgboost का उपयोग करना संभव है? अब मैं sklearn से GradientBoostingClassifier पर OneVsRestClassifier का उपयोग करता हूं। यह काम करता है, लेकिन मेरे सीपीयू से केवल एक कोर का उपयोग करें। मेरे डेटा में मेरे पास ~ 45 विशेषताएं हैं और कार्य बाइनरी (बूलियन) डेटा के साथ लगभग 20 कॉलम की भविष्यवाणी करना है। मीट्रिक औसत औसत परिशुद्धता है (मानचित्र @ 7)। यदि आपके पास कोड का एक छोटा सा उदाहरण है तो यह grate जाएगा ...एक्सजी बूस्ट?

+0

क्या आप इसे समझने में सक्षम थे? यदि ऐसा है तो कृपया एक समाधान प्रदान करें। – iOSBeginner

उत्तर

-3

XGBoost बहु-लेबल वर्गीकरण के लिए उपयोग किया जा सकता है। मॉडल को प्रशिक्षण देने से पहले आपको लेबल को एन्कोड करना होगा; मैं sklearn के लेबल एन्कोडर की सलाह देते हैं।

एक sklearn के दस्तावेज़ से उदाहरण संशोधित:

# initialize the encoder 
>>> le = preprocessing.LabelEncoder() 

# fit to the existing labels, your y_train 
>>> y_train = ["paris", "paris", "tokyo", "amsterdam"] 
>>> y_train_encoded = le.fit_transform(y_train) 

# pass some new data to transform, your y_test 
>>> y_test = ["tokyo", "tokyo", "paris"] 
>>> y_test_encoded = le.transform(y_test) 
>>> print y_test_encoded 
array([2, 2, 1]) 

एक बार यह एन्कोडिंग पूरा हो गया है, आप भविष्यवाणी करने के लिए XGBoost उपयोग कर सकते हैं। आपके वाई डेटाफ्रेम अब संख्यात्मक रूप से एन्कोड किए गए हैं, इसके बजाय वे किस प्रकार के थे। यह एकमात्र तरीका है XGBoost पायथन में वर्गीकरण को समझ सकता है।

अगला, आप अपने परीक्षण डेटा पर अपने XGBoost को तुरंत चालू कर सकते हैं और .fit() को अपने प्रशिक्षण डेटा पर और .predict() पर कॉल कर सकते हैं।

मुझे उम्मीद है कि मैंने XGBoost का उपयोग कैसे किया है, लेकिन कृपया टिप्पणियों में और प्रश्न पूछने के लिए स्वतंत्र महसूस करें।

+2

नहीं, यह मल्टीकास वर्गीकरण है। मल्टीलाबेल वर्गीकरण में उत्तर के रूप में टोकी, एस्टरटर्ड और पेरिस एक साथ संभव हैं। या केवल एक शहर - भी संभव जवाब है। – user3318023

+0

जिस तरह से मैं समस्या से संपर्क करूंगा, विभिन्न संयोजनों के लिए अद्वितीय आउटपुट वर्गीकरण बनाना होगा। कुछ हद तक हैक, लेकिन यह मेरा त्वरित और गंदा दृष्टिकोण होगा। माफ़ी, मुझे अपनी विचार प्रक्रिया को और स्पष्ट करना चाहिए था। – root

4

वहाँ तरीके कि, जिनमें से एक एक आप पहले से ही सुझाव दिया है करने के लिए के एक जोड़े हैं:

1.

from xgboost import XGBClassifier 
from sklearn.multiclass import OneVsRestClassifier 
# If you want to avoid the OneVsRestClassifier magic switch 
# from sklearn.multioutput import MultiOutputClassifier 

clf_multilabel = OneVsRestClassifier(XGBClassifier(**params)) 

clf_multilabel वर्ग प्रति एक द्विआधारी वर्गीकारक फिट होगा, और यह प्रयोग करेंगे हालांकि params में आपके द्वारा निर्दिष्ट कई कोर (fyi, आप n_jobs को OneVsRestClassifier में भी निर्दिष्ट कर सकते हैं, लेकिन यह अधिक मेमोरी खाता है)।

2. आप पहली बार k सही लेबल है कि हर डेटा बिंदु के k प्रतियां बनाने से एक छोटे से अपने डेटा की मालिश हैं, तो आप एक सरल multiclass समस्या के लिए अपना रास्ता हैक कर सकते हैं। उस बिंदु पर, सिर्फ

clf = XGBClassifier(**params) 
clf.fit(train_data) 
pred_proba = clf.predict_proba(test_data) 

प्रत्येक वर्ग के लिए वर्गीकरण मार्जिन/संभावनाओं हो और फैसला एक लेबल की भविष्यवाणी के लिए किस सीमा आप चाहते हैं। ध्यान दें कि यह समाधान सटीक नहीं है: यदि किसी उत्पाद में (1, 2, 3) टैग हैं, तो आप कृत्रिम रूप से प्रत्येक वर्ग के लिए दो नकारात्मक नमूने पेश करते हैं।