2016-10-21 13 views
5

वर्तमान में मैं मशीन सीखने वाले एल्गोरिदम काम करने के तरीके को समझने की कोशिश कर रहा हूं और एक चीज जो मुझे वास्तव में नहीं मिलती है वह अनुमानित लेबल और दृश्य भ्रम मैट्रिक्स की गणना सटीकता के बीच स्पष्ट अंतर है। मैं जितना संभव हो उतना स्पष्ट करने की कोशिश करूंगा।पायथन - मशीन लर्निंग

यहाँ डाटासेट (यहाँ के स्निपेट आप 9 नमूने (के बारे में वास्तविक डेटासेट में 4k), 6 सुविधाओं और 9 लेबल (जो नहीं नंबरों के लिए खड़े हैं, लेकिन कुछ अर्थ और देख सकते हैं 7 की तरह की तुलना नहीं की जा सकती है है> 4> 1)):

f1  f2  f3  f4  f5 f6 label 
89.18 0.412 9.1  24.17 2.4 1 1 
90.1 0.519 14.3 16.555 3.2 1 2 
83.42 0.537 13.3 14.93 3.4 1 3 
64.82 0.68 9.1  8.97 4.5 2 4 
34.53 0.703 4.9  8.22 3.5 2 5 
87.19 1.045 4.7  5.32 5.4 2 6 
43.23 0.699 14.9 12.375 4.0 2 7 
43.29 0.702 7.3  6.705 4.0 2 8 
20.498 1.505 1.321 6.4785 3.8 2 9 

जिज्ञासा के पक्ष में मैं एल्गोरिदम (रैखिक, गाऊसी, SVM (SVC, SVR), बायेसियन आदि) के एक नंबर की कोशिश की। जहां तक ​​मैं मैनुअल को समझता हूं, मेरे मामले में प्रतिगमन (निरंतर) के बजाय क्लासिफायर (असतत) के साथ काम करना बेहतर होता है। आम का उपयोग करना:

model.fit(X_train, y_train) 
model.score(X_test, y_test) 

मुझे मिल गया:

Lin_Reg: 0.855793988736 
Log_Reg: 0.463251670379 
DTC:  0.400890868597 
KNC:  0.41425389755 
LDA:  0.550111358575 
Gaus_NB: 0.391982182628 
Bay_Rid: 0.855698151574 
SVC:  0.483296213808 
SVR:  0.647914795849 

सतत एल्गोरिदम बेहतर परिणाम था। जब मैं बायेसियन रिज के लिए भ्रम की स्थिति मैट्रिक्स का इस्तेमाल किया उसके परिणाम को सत्यापित करने के (पूर्णांक के लिए नाव में परिवर्तित करने के लिए किया था), मैं निम्नलिखित है:

Pred l1 l2 l3 l4 l5 l6 l7 l8 l9 
True 
l1 23, 66, 0, 0, 0, 0, 0, 0, 0 
l2 31, 57 1, 0, 0, 0, 0, 0, 0 
l3 13, 85, 19 0, 0, 0, 0, 0, 0 
l4 0, 0, 0, 0 1, 6, 0, 0, 0 
l5 0, 0, 0, 4, 8 7, 0, 0, 0 
l6 0, 0, 0, 1, 27, 36 7, 0, 0 
l7 0, 0, 0, 0, 2, 15, 0 0, 0 
l8 0, 0, 0, 1, 1, 30, 8, 0 0 
l9 0, 0, 0, 1, 0, 9, 1, 0, 0 

क्या मुझे समझ है कि 85% सटीकता गलत है दे दी है। इसे कैसे समझाया जा सकता है? क्या यह फ्लोट/int रूपांतरण है?

कोई सीधा जवाब/लिंक आदि

+1

आपने सटीकता की गणना कैसे की? कुछ 'sklearn.metrics.accuracy_score (y_test, model.predict (X_test))' की तरह कुछ? – sietschie

+1

यदि आप अपने लेबल के साथ 'model.predict()' के परिणामों की मैन्युअल रूप से तुलना करते हैं तो यह गणना करके कि कितनी प्रविष्टियां बराबर हैं, आपको यह समझना चाहिए कि गणना की गई सटीकता या भ्रम मैट्रिक्स गलत है या नहीं। (या यदि दोनों बंद हैं) – sietschie

+0

@sietschie देर से उत्तर के लिए खेद है! मैंने "model.score (X_test, y_test)" का उपयोग किया। हां, मैं देखता हूं कि इनमें से एक गलत है और मुझे लगता है कि गणना की गई सटीकता एक है। – Moveton

उत्तर

4

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

दोनों वर्गीकरण और प्रतिगमन समस्याओं के लिए आप उन्हें स्कोर करने के लिए विभिन्न मीट्रिक का उपयोग कर सकते हैं, इसलिए कभी नहीं मानें कि वे तुलनीय हैं। जैसा कि @ जवाद ने बताया, 'दृढ़ संकल्प का गुणांक' सटीकता से बहुत अलग है। मैं precision and recall पर पढ़ने की भी सिफारिश करता हूं।

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

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

+0

ऐसे स्पष्ट उत्तर और सिफारिशों के लिए धन्यवाद! यह मुझे कुछ अतिरिक्त अंक देता है, जो सिर्फ इस सवाल से परे है। – Moveton

3

के लिए आभारी होगा प्रलेखन here पर एक नजर डालें।

अगर आप score() पर रिग्रेशन विधियों पर कॉल करते हैं तो वे सटीकता की 'अनुमान के निर्धारण आर^2 का गुणांक' वापस नहीं करेंगे।

+0

विशिष्ट उत्तर के लिए धन्यवाद! मैं वास्तव में इस महत्वपूर्ण पल को याद किया। – Moveton

0

this पर एक नज़र डालें।
"model.score (X_test, y_test)" का प्रयोग करें।

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