शिकिट के साथ मल्टीस्कल्स मामले के लिए सटीक, रिकॉल, सटीकता और एफ 1-स्कोर की गणना कैसे करें?


109

मैं एक भावना विश्लेषण समस्या में काम कर रहा हूँ डेटा इस तरह दिखता है:

label instances
    5    1190
    4     838
    3     239
    1     204
    2     127

इसलिए मेरा डेटा असंतुलित है क्योंकि 1190 instancesके साथ लेबल लगाए गए हैं 5। वर्गीकरण के लिए scikit के SVC का उपयोग कर । समस्या यह है कि मुझे पता नहीं है कि मल्टीकलस केस के लिए सटीक, रिकॉल, सटीकता और एफ 1-स्कोर की सही गणना करने के लिए अपने डेटा को सही तरीके से कैसे संतुलित किया जाए। इसलिए मैंने निम्नलिखित तरीकों की कोशिश की:

प्रथम:

    wclf = SVC(kernel='linear', C= 1, class_weight={1: 10})
    wclf.fit(X, y)
    weighted_prediction = wclf.predict(X_test)

print 'Accuracy:', accuracy_score(y_test, weighted_prediction)
print 'F1 score:', f1_score(y_test, weighted_prediction,average='weighted')
print 'Recall:', recall_score(y_test, weighted_prediction,
                              average='weighted')
print 'Precision:', precision_score(y_test, weighted_prediction,
                                    average='weighted')
print '\n clasification report:\n', classification_report(y_test, weighted_prediction)
print '\n confussion matrix:\n',confusion_matrix(y_test, weighted_prediction)

दूसरा:

auto_wclf = SVC(kernel='linear', C= 1, class_weight='auto')
auto_wclf.fit(X, y)
auto_weighted_prediction = auto_wclf.predict(X_test)

print 'Accuracy:', accuracy_score(y_test, auto_weighted_prediction)

print 'F1 score:', f1_score(y_test, auto_weighted_prediction,
                            average='weighted')

print 'Recall:', recall_score(y_test, auto_weighted_prediction,
                              average='weighted')

print 'Precision:', precision_score(y_test, auto_weighted_prediction,
                                    average='weighted')

print '\n clasification report:\n', classification_report(y_test,auto_weighted_prediction)

print '\n confussion matrix:\n',confusion_matrix(y_test, auto_weighted_prediction)

तीसरा:

clf = SVC(kernel='linear', C= 1)
clf.fit(X, y)
prediction = clf.predict(X_test)


from sklearn.metrics import precision_score, \
    recall_score, confusion_matrix, classification_report, \
    accuracy_score, f1_score

print 'Accuracy:', accuracy_score(y_test, prediction)
print 'F1 score:', f1_score(y_test, prediction)
print 'Recall:', recall_score(y_test, prediction)
print 'Precision:', precision_score(y_test, prediction)
print '\n clasification report:\n', classification_report(y_test,prediction)
print '\n confussion matrix:\n',confusion_matrix(y_test, prediction)


F1 score:/usr/local/lib/python2.7/site-packages/sklearn/metrics/classification.py:676: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring="f1_weighted" instead of scoring="f1".
  sample_weight=sample_weight)
/usr/local/lib/python2.7/site-packages/sklearn/metrics/classification.py:1172: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring="f1_weighted" instead of scoring="f1".
  sample_weight=sample_weight)
/usr/local/lib/python2.7/site-packages/sklearn/metrics/classification.py:1082: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring="f1_weighted" instead of scoring="f1".
  sample_weight=sample_weight)
 0.930416613529

हालाँकि, Im को इस तरह की चेतावनी मिल रही है:

/usr/local/lib/python2.7/site-packages/sklearn/metrics/classification.py:1172:
DeprecationWarning: The default `weighted` averaging is deprecated,
and from version 0.18, use of precision, recall or F-score with 
multiclass or multilabel data or pos_label=None will result in an 
exception. Please set an explicit value for `average`, one of (None, 
'micro', 'macro', 'weighted', 'samples'). In cross validation use, for 
instance, scoring="f1_weighted" instead of scoring="f1"

सही तरीके से क्लासिफायर के मेट्रिक्स में गणना करने के लिए मैं अपने असंतुलित डेटा के साथ सही तरीके से कैसे निपट सकता हूं?


तो averageतीसरे मामले में पैरामीटर क्यों नहीं जोड़ा गया?
यांग्जी जूल

1
@yangjie मुझे नहीं पता। मैं सिर्फ दस्तावेज़ीकरण की जांच करता हूं, लेकिन मुझे समझ में नहीं आता है कि असंतुलित डेटा के लिए सही ढंग से मैट्रिक्स का उपयोग कैसे करें। क्या आप कुछ विस्तृत विवरण और एक उदाहरण प्रदान कर सकते हैं? धन्यवाद!
new_with_python

जवाबों:


164

मुझे लगता है कि इस बारे में बहुत भ्रम है कि किस चीज के लिए वजन का उपयोग किया जाता है। मुझे यकीन नहीं है कि मुझे ठीक से पता है कि आपको क्या परेशान करता है इसलिए मैं विभिन्न विषयों को कवर करने जा रहा हूं, मेरे साथ;)।

वर्ग भार

class_weightपैरामीटर से वेट का उपयोग क्लासिफायरियर को प्रशिक्षित करने के लिए किया जाता है । वे आपके द्वारा उपयोग किए जा रहे किसी भी मैट्रिक्स की गणना में उपयोग नहीं किए जाते हैं : विभिन्न वर्ग भार के साथ, संख्याएं अलग-अलग होंगी क्योंकि क्लासिफायर अलग है।

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

मेट्रिक्स

एक बार आपके पास एक क्लासिफायरियर होने के बाद, आप जानना चाहते हैं कि यह कितना अच्छा प्रदर्शन कर रहा है। यहाँ आप मैट्रिक्स आप का उल्लेख उपयोग कर सकते हैं: accuracy, recall_score, f1_score...

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

मैं इन सभी मैट्रिक्स का विस्तार नहीं करूंगा, लेकिन ध्यान दें कि, अपवाद के साथ accuracy, वे स्वाभाविक रूप से वर्ग स्तर पर लागू होते हैं: जैसा कि आप देख सकते हैं कि printवर्गीकरण रिपोर्ट में वे प्रत्येक वर्ग के लिए परिभाषित हैं। वे अवधारणाओं पर भरोसा करते हैं जैसे कि true positivesया false negativeजिन्हें परिभाषित करने की आवश्यकता होती है कि कौन सा वर्ग सकारात्मक है।

             precision    recall  f1-score   support

          0       0.65      1.00      0.79        17
          1       0.57      0.75      0.65        16
          2       0.33      0.06      0.10        17
avg / total       0.52      0.60      0.51        50

चेतावनी

F1 score:/usr/local/lib/python2.7/site-packages/sklearn/metrics/classification.py:676: DeprecationWarning: The 
default `weighted` averaging is deprecated, and from version 0.18, 
use of precision, recall or F-score with multiclass or multilabel data  
or pos_label=None will result in an exception. Please set an explicit 
value for `average`, one of (None, 'micro', 'macro', 'weighted', 
'samples'). In cross validation use, for instance, 
scoring="f1_weighted" instead of scoring="f1".

आपको यह चेतावनी मिलती है क्योंकि आप एफ 1-स्कोर, रिकॉल और सटीक का उपयोग किए बिना परिभाषित कर रहे हैं कि उनकी गणना कैसे की जानी चाहिए! सवाल फिर से प्रस्तुत किया जा सकता है: उपरोक्त वर्गीकरण रिपोर्ट से, आप एफ 1-स्कोर के लिए एक वैश्विक संख्या का उत्पादन कैसे करते हैं ? आप ऐसा कर सकते हैं:

  1. प्रत्येक वर्ग के लिए f1- स्कोर का औसत लें: जो कि avg / totalउपरोक्त परिणाम है। इसे मैक्रो औसत भी कहा जाता है ।
  2. सही सकारात्मक / गलत नकारात्मक आदि की वैश्विक गणना का उपयोग करके f1- स्कोर की गणना करें (आप प्रत्येक वर्ग के लिए सही सकारात्मक / गलत नकारात्मक की संख्या का योग करते हैं)। अका सूक्ष्म औसत।
  3. F1- स्कोर के भारित औसत की गणना करें। 'weighted'स्किटिट-लर्न में उपयोग करने से वर्ग के समर्थन से f1-स्कोर का वजन होगा: जितने अधिक तत्व एक वर्ग के होते हैं, उतना ही महत्वपूर्ण इस श्रेणी में f1-स्कोर की गणना में होता है।

ये scikit-learn में 3 विकल्प हैं, चेतावनी यह है कि आपको एक को चुनना होगा । इसलिए आपको averageस्कोर विधि के लिए एक तर्क निर्दिष्ट करना होगा ।

आप जो चुनते हैं, वह है कि आप किस प्रकार क्लासिफायर के प्रदर्शन को मापना चाहते हैं: उदाहरण के लिए मैक्रो-औसत वर्ग के असंतुलन को ध्यान में नहीं रखता है और कक्षा 1 का f1-स्कोर कक्षा के f1- स्कोर जितना ही महत्वपूर्ण होगा 5. यदि आप औसत भारित का उपयोग करते हैं तो आपको कक्षा 5 के लिए अधिक महत्व मिलेगा।

इन मेट्रिक्स में संपूर्ण तर्क विनिर्देश अभी स्किटिट-लर्न में सुपर-स्पष्ट नहीं है, यह डॉक्स के अनुसार संस्करण 0.18 में बेहतर होगा। वे कुछ गैर-स्पष्ट मानक व्यवहार को हटा रहे हैं और वे चेतावनी जारी कर रहे हैं ताकि डेवलपर्स इसे नोटिस करें।

कम्प्यूटिंग स्कोर

अंतिम बात जिसका मैं उल्लेख करना चाहता हूं (यदि आप इसके बारे में जानते हैं तो इसे छोड़ना बेझिझक कह सकते हैं) यह है कि स्कोर केवल सार्थक हैं यदि वे डेटा पर गणना किए जाते हैं जो कि क्लासिफायर ने कभी नहीं देखा है । यह अत्यंत महत्वपूर्ण है क्योंकि किसी भी अंक को आप उस डेटा पर प्राप्त करते हैं जिसका उपयोग क्लासिफायर फिटिंग में किया गया था वह पूरी तरह अप्रासंगिक है।

यहां इसका उपयोग करने का एक तरीका है StratifiedShuffleSplit, जो आपको अपने डेटा का एक यादृच्छिक विभाजन देता है (फेरबदल के बाद) जो लेबल वितरण को संरक्षित करता है।

from sklearn.datasets import make_classification
from sklearn.cross_validation import StratifiedShuffleSplit
from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, classification_report, confusion_matrix

# We use a utility to generate artificial classification data.
X, y = make_classification(n_samples=100, n_informative=10, n_classes=3)
sss = StratifiedShuffleSplit(y, n_iter=1, test_size=0.5, random_state=0)
for train_idx, test_idx in sss:
    X_train, X_test, y_train, y_test = X[train_idx], X[test_idx], y[train_idx], y[test_idx]
    svc.fit(X_train, y_train)
    y_pred = svc.predict(X_test)
    print(f1_score(y_test, y_pred, average="macro"))
    print(precision_score(y_test, y_pred, average="macro"))
    print(recall_score(y_test, y_pred, average="macro"))    

उम्मीद है की यह मदद करेगा।


एक मल्टीकाच के लिए, आप एक वर्ग वजन कैसे निर्दिष्ट करते हैं? उदाहरण के लिए, class_weight={1:10}3 वर्गों वाले डेटा के लिए क्या मतलब है?
अजीज जावेद

लेबल वार सटीकता स्कोर प्राप्त करने के लिए वैसे भी क्या है?
अंकुर सिन्हा

क्या आप बता सकते हैं कि माइक्रो अधिक स्पष्ट रूप से कैसे काम करता है। इसके अलावा आप बाइनरी के बारे में कुछ भी उल्लेख नहीं करते हैं
विनम्र

मेरे लिए, स्तरीकृत फेरबदल मुद्दों को पैदा कर रहा था इसलिए मैंने ट्रेन-परीक्षण विभाजन को वापस स्विच कर दिया जैसा कि वह दिखा रहा था ValueError: The least populated class in y has only 1 member, which is too few. The minimum number of labels for any class cannot be less than 2.। यह ट्रेन-परीक्षण विभाजन के साथ ठीक काम कर रहा है, लेकिन क्या कोई मेरी मदद कर सकता है कि मुझे एसएसएस के साथ यह त्रुटि क्यों हो रही है? धन्यवाद।
आकाश कांडपाल

HI मैंने आपके कोड का परीक्षण किया है, लेकिन मेरे पास यह त्रुटि है। C: \ Users \\ Anaconda3 \ lib \ site- पैकेज \ sklearn \ metrics \ वर्गीकरण थिंकपैड: 976: DeprecationWarning: संस्करण 0.18 से, बाइनरी इनपुट का उपयोग करते समय विशेष रूप से नियंत्रित नहीं किया जाएगा। औसत सटीकता / याद / एफ-स्कोर। कृपया केवल सकारात्मक श्रेणी के प्रदर्शन की रिपोर्ट करने के लिए औसत = 'बाइनरी' का उपयोग करें। , पॉजिटिव क्लास परफॉरमेंस। ’,
डिप्रेसेशन वर्निंग

73

यहाँ बहुत विस्तृत उत्तर दिए गए हैं, लेकिन मुझे नहीं लगता कि आप सही प्रश्नों का उत्तर दे रहे हैं। जैसा कि मैं इस प्रश्न को समझता हूं, दो चिंताएं हैं:

  1. मैं एक बहुस्तरीय समस्या कैसे बनाऊं?
  2. मैं असंतुलित डेटा से कैसे निपटूं?

1।

आप स्कोरिंग कार्यों में अधिकांश स्कोरिंग कार्यों का उपयोग एकल वर्ग की समस्याओं के साथ दोनों बहुस्तरीय समस्याओं के साथ कर सकते हैं। पूर्व .:

from sklearn.metrics import precision_recall_fscore_support as score

predicted = [1,2,3,4,5,1,2,1,1,4,5] 
y_test = [1,2,3,4,5,1,2,1,1,4,1]

precision, recall, fscore, support = score(y_test, predicted)

print('precision: {}'.format(precision))
print('recall: {}'.format(recall))
print('fscore: {}'.format(fscore))
print('support: {}'.format(support))

इस तरह आप प्रत्येक वर्ग के लिए मूर्त और व्याख्यात्मक संख्याओं के साथ समाप्त होते हैं।

| Label | Precision | Recall | FScore | Support |
|-------|-----------|--------|--------|---------|
| 1     | 94%       | 83%    | 0.88   | 204     |
| 2     | 71%       | 50%    | 0.54   | 127     |
| ...   | ...       | ...    | ...    | ...     |
| 4     | 80%       | 98%    | 0.89   | 838     |
| 5     | 93%       | 81%    | 0.91   | 1190    |

फिर...

2।

... आप बता सकते हैं कि असंतुलित डेटा भी समस्या है या नहीं। यदि कम प्रतिनिधित्व वाली कक्षाओं (कक्षा 1 और 2) के लिए स्कोरिंग अधिक प्रशिक्षण नमूने (कक्षा 4 और 5) के साथ कक्षाओं की तुलना में कम है, तो आप जानते हैं कि असंतुलित डेटा वास्तव में एक समस्या है, और आप तदनुसार कार्य कर सकते हैं, जैसा कि इस धागे में कुछ अन्य उत्तरों में वर्णित है। हालाँकि, यदि आप जिस डेटा पर भविष्यवाणी करना चाहते हैं, उसी वर्ग का वितरण मौजूद है, तो आपका असंतुलित प्रशिक्षण डेटा डेटा का एक अच्छा प्रतिनिधि है, और इसलिए, असंतुलित होना एक अच्छी बात है।


1
महान पोस्ट और अच्छी तरह से कहा। धन्यवाद
अल्विस

1
अरे बस एक अनुवर्ती सवाल: आपने लेबल का उपयोग कैसे किया precision_recall_fscore_support? क्या लेबल ऑर्डर द्वारा प्रिंट किए गए हैं?
BigD

@BigD हाँ, बहुत नीचे scikit-learn.org/stable/modules/generated/… देखें । average=Noneलेबल सेट करें और परिभाषित करें, फिर आपको वह मीट्रिक मिले जिसे आप खोज रहे हैं, आपके प्रत्येक निर्दिष्ट लेबल के लिए।
Wonderkid2

लेबल वार सटीकता स्कोर प्राप्त करने के लिए वैसे भी क्या है?
अंकुर सिन्हा

@ ट्रोलस्टर मुझे यकीन नहीं है कि आपका क्या मतलब है? क्या मैं उत्तर लेबल वाइज सटीकता स्कोर में नहीं दिखा सकता हूं?
Wonderkid2

16

प्रस्तुत प्रश्न

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

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

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

सोकोलोवा, मरीना, और गाई लाप्लामे। "वर्गीकरण कार्यों के लिए प्रदर्शन के उपायों का एक व्यवस्थित विश्लेषण।" सूचना प्रसंस्करण और प्रबंधन 45.4 (2009): 427-437।

आवेदन-विशिष्ट प्रश्न

हालाँकि, अपने कार्य पर लौटकर, मैं 2 विषयों पर शोध करूँगा:

  1. आमतौर पर आपके विशिष्ट कार्य के लिए उपयोग किए जाने वाले मैट्रिक्स - यह (ए) को दूसरों के साथ अपनी पद्धति की तुलना करने और समझने के लिए देता है कि क्या आप कुछ गलत करते हैं, और (बी) अपने आप से यह पता लगाने और किसी और के निष्कर्षों का पुन: उपयोग न करें;
  2. आपके तरीकों की अलग-अलग त्रुटियों की लागत - उदाहरण के लिए, आपके एप्लिकेशन का उपयोग-केस केवल 4- और 5-स्टार रिव्यू पर भरोसा कर सकता है - इस मामले में, अच्छे मीट्रिक को केवल इन 2 लेबल की गणना करनी चाहिए।

आमतौर पर इस्तेमाल होने वाले मेट्रिक्स। जैसा कि मैं साहित्य को देखने के बाद अनुमान लगा सकता हूं, 2 मुख्य मूल्यांकन मीट्रिक हैं:

  1. सटीकता , जिसका उपयोग किया जाता है, जैसे

यू, अप्रैल, और डेरिल चांग। "येल्प बिज़नेस का उपयोग करते हुए मल्टीक्लास सेंटीमेंट भविष्यवाणी।"

( लिंक ) - ध्यान दें कि लेखक रेटिंग के लगभग समान वितरण के साथ काम करते हैं, चित्र 5 देखें।

पैंग, बो और लिलियन ली। "स्टार्स देखना: रेटिंग स्केल के संबंध में भावना वर्गीकरण के लिए वर्ग संबंधों को उजागर करना।" कम्प्यूटेशनल भाषा विज्ञान के लिए एसोसिएशन की 43 वीं वार्षिक बैठक की कार्यवाही। कम्प्यूटेशनल भाषा विज्ञान के लिए एसोसिएशन, 2005।

( लिंक )

  1. MSE (या, कम बार, मीन एब्सोल्यूट एरर - MAE ) - देखें, उदाहरण के लिए,

ली, मोंटेटे और आर। ग्राफे। "रेस्तरां की समीक्षाओं के साथ मल्टीक्लास भावना का विश्लेषण।" CS N 224 (2010) से अंतिम परियोजनाएं।

( लिंक ) - वे दोनों सटीकता और एमएसई का पता लगाते हैं, बाद वाले को बेहतर मानते हैं

पैपस, निकोलास, रुए मार्कोनी और आंद्रेई पोपेस्कु-बेलिस। "स्टार्स को समझाते हुए: एस्पैक्ट-बेस्ड सेंटीमेंट एनालिसिस के लिए वेटेड मल्टीपल-इंस्टेंस लर्निंग।" प्राकृतिक भाषा प्रसंस्करण में अनुभवजन्य विधियों पर 2014 सम्मेलन की कार्यवाही। ईपीएफएल- CONF-200899। 2014।

( लिंक ) - वे मूल्यांकन और आधारभूत दृष्टिकोण के लिए स्कोर-लर्न का उपयोग करते हैं और कहते हैं कि उनका कोड उपलब्ध है; हालाँकि, मैं इसे नहीं ढूँढ सकता, इसलिए यदि आपको इसकी आवश्यकता है, तो लेखकों को एक पत्र लिखें, काम बहुत नया है और लगता है कि पायथन में लिखा गया है।

विभिन्न त्रुटियों की लागत यदि आप सकल ब्लंडर्स से बचने के बारे में अधिक परवाह करते हैं, जैसे 1-स्टार को 5-स्टार समीक्षा या ऐसा कुछ करने का आश्वासन देते हैं, तो MSE को देखें; यदि अंतर मायने रखता है, लेकिन इतना नहीं, MAE की कोशिश करो, क्योंकि यह वर्ग भिन्न नहीं है; अन्यथा सटीकता के साथ रहें।

एप्रोच के बारे में, मेट्रिक्स नहीं

एसवीआर , जैसे एसवीआर या ओवीए एसवीएम जैसे मल्टिपल क्लासीफायर को बेहतर बनाए , प्रतिगमन दृष्टिकोणों की कोशिश करें ।


13

सबसे पहले यह बताने के लिए कि आपके डेटा असंतुलित हैं या नहीं, यह बताने के लिए सिर्फ गिनती के विश्लेषण का उपयोग करना थोड़ा कठिन है। उदाहरण के लिए: 1000 में से 1 सकारात्मक अवलोकन विज्ञान में केवल एक शोर, त्रुटि या एक सफलता है? आपको कभी नहीं जानते।
इसलिए अपने सभी उपलब्ध ज्ञान का उपयोग करना और सभी बुद्धिमानों के साथ अपनी स्थिति का चयन करना हमेशा बेहतर होता है।

ठीक है, अगर यह वास्तव में असंतुलित है तो क्या होगा?
एक बार फिर से - अपने डेटा को देखें। कभी-कभी आप एक या दो अवलोकन सौ गुना करके पा सकते हैं। कभी-कभी यह नकली एक-वर्ग-अवलोकन बनाने के लिए उपयोगी होता है।
यदि सभी डेटा साफ है, तो अगला कदम भविष्यवाणी मॉडल में वर्ग भार का उपयोग करना है।

तो मल्टीकलर्स मेट्रिक्स के बारे में क्या?
मेरे अनुभव में आमतौर पर आपका कोई भी मैट्रिक्स इस्तेमाल नहीं किया जाता है। दो मुख्य कारण हैं।
पहला: ठोस भविष्यवाणी की तुलना में संभावनाओं के साथ काम करना हमेशा बेहतर होता है (क्योंकि आप 0.9 और 0.6 की भविष्यवाणी के साथ अन्य मॉडल को कैसे अलग कर सकते हैं यदि वे दोनों आपको एक ही वर्ग देते हैं?)
और दूसरा: अपने भविष्यवाणी मॉडल की तुलना करना और नया निर्माण करना बहुत आसान है केवल एक अच्छी मीट्रिक पर निर्भर करता है।
अपने अनुभव से मैं लॉगलॉस या एमएसई (या सिर्फ मतलब चुकता त्रुटि) की सिफारिश कर सकता था ।

स्केलेन की चेतावनी कैसे ठीक करें?
बस (यंग्जी के रूप में देखा) averageइनमें से एक मान के साथ पैरामीटर को अधिलेखित करें : 'micro'(विश्व स्तर पर मैट्रिक्स की गणना करें), 'macro'(प्रत्येक लेबल के लिए मैट्रिक्स की गणना करें) या 'weighted'(मैक्रो के समान लेकिन ऑटो भार के साथ)।

f1_score(y_test, prediction, average='weighted')

आपकी सभी चेतावनियां डिफ़ॉल्ट averageमान के साथ मेट्रिक्स फ़ंक्शंस को कॉल करने के बाद आईं 'binary'जो कि मल्टीस्कल्स भविष्यवाणी के लिए अनुचित है।
गुड लक और मशीन सीखने के साथ मज़े करो!

संपादित करें:
मुझे प्रतिगमन दृष्टिकोण (जैसे SVR) पर स्विच करने के लिए एक और उत्तरदाता अनुशंसा मिली, जिसके साथ मैं सहमत नहीं हो सकता। जहां तक ​​मुझे याद है कि मल्टीस्कल्स रिग्रेशन जैसी कोई चीज भी नहीं है। हाँ, मल्टीलेबल रिग्रेशन है जो बहुत अलग है और हाँ यह संभव है कि कुछ मामलों में रिग्रेशन और वर्गीकरण (यदि कक्षाएं किसी तरह हल हो जाएं) के बीच स्विच करें लेकिन यह बहुत दुर्लभ है।

मैं क्या सलाह दूंगा (शिकयत के दायरे में) एक और बहुत शक्तिशाली वर्गीकरण उपकरण का प्रयास करना है: ग्रेडिएंट बूस्टिंग , रैंडम फॉरेस्ट (मेरा पसंदीदा), केहेंबर्स और कई और।

उसके बाद आप भविष्यवाणियों के बीच अंकगणितीय या ज्यामितीय माध्य की गणना कर सकते हैं और अधिकांश समय आप बेहतर परिणाम प्राप्त करेंगे।

final_prediction = (KNNprediction * RFprediction) ** 0.5

1
> "प्रतिगमन और वर्गीकरण के बीच स्विच (यदि कक्षाएं किसी तरह हल होती हैं) लेकिन यह बहुत दुर्लभ है" यह मामला है: 5> 4> 3> 2> 1. मैं आपको इस कार्य के लिए कागजात पर एक नज़र डालने का सुझाव दूंगा - वहाँ हैं कार्य के लिए कई प्रतिगमन और वर्गीकरण दृष्टिकोण (कभी-कभी एक ही काम में)।
निकिता अचरकांतसेव

तब यह एक बहुविकल्पी वर्गीकरण नहीं बल्कि एक साधारण प्रतिगमन है।
व्लाद मिरोनोव

हां, आंतरिक रूप से, या एमएल के दृष्टिकोण से, यह एक प्रतिगमन है, लेकिन अंतिम चरण में हम प्रतिगमन परिणामों को लेबल में परिवर्तित करते हैं, इसलिए यह एक बहुस्तरीय वर्गीकरण है - उपयोगकर्ता, या अनुप्रयोग, दृष्टिकोण से।
निकिता अस्त्रकांत्सेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.