সাইকিতে মাল্টিলেবল শ্রেণিবদ্ধকরণের মেট্রিক্স


19

আমি একাধিক-লেবেল শ্রেণিবদ্ধকারী তৈরি করার চেষ্টা করছি যাতে স্কাইকিট ব্যবহার করে বিদ্যমান নথিতে বিষয় নির্ধারণ করা যায়

আমি আমার নথি মাধ্যমে তাদের পাশ প্রক্রিয়াকরণের করছি TfidfVectorizerমাধ্যমে লেবেল MultiLabelBinarizerএবং নির্মিত OneVsRestClassifierএকটি সঙ্গে SGDClassifierমূল্নির্ধারক হিসাবে।

তবে আমার শ্রেণিবদ্ধার পরীক্ষা করার সময় আমি কেবল ২৯.২ পর্যন্ত স্কোর পাই যা যা পড়েছি তা থেকে একই ধরণের সমস্যার জন্য খুব কম। আমি টিফিডফেক্টর উপর একাধিক বিকল্প চেষ্টা করেছি যেমন স্টপওয়ার্ডস, ইউনিগ্রাম, স্টেমিং এবং কোনও কিছুই ফলাফলকে এতটা পরিবর্তন করে বলে মনে হয় না।

আমি GridSearchCVআমার অনুমানের জন্য সর্বোত্তম পরামিতিগুলিও ব্যবহার করেছি এবং বর্তমানে কী চেষ্টা করব সে সম্পর্কে আমি ধারণার বাইরে।

একই সময়ে, থেকে আমি যা বুঝতে আমি ব্যবহার করতে পারবেন না scikit.metricsসঙ্গে OneVsRestClassifierকেমন আমি তাই কি ভুল জিনিসটা কিছু বৈশিষ্ট্যের মান করুন (F1, নির্ভুলতা, রিকল ইত্যাদি) পেতে পারি?

এটি কি আমার ডেটা কর্পাস নিয়ে সমস্যা হতে পারে?

আপডেট করুন: আমিও ব্যবহার চেষ্টা করেছি CountVectorizerএবং HashingVectorizerএবং তাদের পাইপলাইনিং TfidfTransformerকিন্তু ফলাফল একই। সুতরাং আমি অনুমান করছি যে ব্যাগ-অফ-শব্দের পদ্ধতির বিষয়টি টোকেনাইজেশন ডোমেনে সবচেয়ে ভাল করছে এবং বাকিটি শ্রেণিবদ্ধের হাতে রয়েছে ...


1
0.29 পরিমাপ কি? সঠিকতা? অন্যকিছু?
সাইকোরাক্স বলছেন মনিকা পুনরায় ইনস্টল করুন '

@GeneralAbrial scikit ডকুমেন্টেশন মতে চলমান scoreক্লাসিফায়ার উপর,Returns the mean accuracy on the given test data and labels. In multi-label classification, this is the subset accuracy which is a harsh metric since you require for each sample that each label set be correctly predicted.
mobius

তুমি কি তাই কর? এটি আপনার প্রশ্ন থেকে মোটেও পরিষ্কার নয় যে এটি কেস, তাই এটি একটি সম্পূর্ণ যুক্তিসঙ্গত প্রশ্ন।
সাইকোরাক্স বলছে মনিকা পুনরায়

@ জেনারালআব্রিয়াল হ্যাঁ আমি এটি করেছি। বিভ্রান্তির জন্য দুঃখিত, আমি প্রশ্নটি একটি উন্নয়নের পরিবর্তে আরও তাত্ত্বিক মোডে রাখার চেষ্টা করছিলাম।
মবিয়াস

আপনি কি এখানে আপনার কোড যুক্ত করতে পারেন? বিশেষত আপনি এসজিডি-র জন্য নমুনা_বাঁধ = "ভারসাম্যপূর্ণ" ব্যবহার করছেন? আমরা একবার আপনার কোডটি দেখতে পেলাম তবে এখানে অন্যান্য বিষয় লক্ষ্য রাখতে হবে।
দিয়েগো

উত্তর:


21

সাবসেট নির্ভুলতা প্রকৃতপক্ষে একটি কঠোর মেট্রিক। 0.29 কতটা ভাল বা খারাপ তা অনুধাবন করতে কিছু ধারণা:

  • প্রতিটি নমুনার জন্য আপনার কত গড় লেবেল রয়েছে তা দেখুন
  • আন্ত-এনোটোটার চুক্তিটি দেখুন, যদি উপলভ্য থাকে (যদি তা না হয় তবে আপনি শ্রেণিবদ্ধ হওয়ার সময় কী সাবসেটটি পেয়েছেন তা সঠিকভাবে দেখার চেষ্টা করুন)
  • বিষয় ভালভাবে সংজ্ঞায়িত করা হয়েছে কিনা তা ভাবুন
  • প্রতিটি লেবেলের জন্য আপনার কতটি নমুনা রয়েছে তা দেখুন

আপনিও হ্যামিং স্কোর গণনা করতে চাইতে পারেন, আপনার শ্রেণিবদ্ধটি নিখুঁত কিনা, পরিবর্তে শালীনভাবে ভাল তবে সমস্ত লেবেলকে সঠিকভাবে ভবিষ্যদ্বাণী করা করতে সমস্যা রয়েছে তা দেখতে। হামিং স্কোর গণনা করতে নীচে দেখুন।

একই সাথে, আমি যা বুঝতে পেরেছি সেগুলি থেকে আমি ওয়ানভিএসআরস্টক্লাসিফায়ার দিয়ে সাইকিট.মেট্রিক্স ব্যবহার করতে পারি না তাই আমি কীভাবে কিছু মেট্রিক (এফ 1, যথার্থতা, পুনর্বিবেচনা ইত্যাদি) পেতে পারি যাতে ভুল কী?

দেখুন multiclass-multilabel শ্রেণীবিভাগ জন্য গনা কিভাবে স্পষ্টতা / রিকল? । আমি ভুলে গিয়েছিলাম যে স্ক্লার্ন এটি সমর্থন করে কিনা, আমি মনে করি এটির কিছু সীমাবদ্ধতা ছিল, উদাহরণস্বরূপ স্ক্লেয়ারন কনফিউশন ম্যাট্রিক্সের জন্য মাল্টি-লেবেল সমর্থন করে না । এই সংখ্যাগুলি দেখতে সত্যিই ভাল ধারণা হবে good


হামিং স্কোর :

একটি multilabel শ্রেণীবিন্যাস সেটিং sklearn.metrics.accuracy_scoreশুধুমাত্র নির্ণয় উপসেট সঠিকতা অর্থাত একটি নমুনা ঠিক y_true মধ্যে লেবেলের সংশ্লিষ্ট সেট মেলানো জন্য আগাম অনুমান লেবেলের সেট: (3)।

নির্ভুলতার গণনার এই পদ্ধতিটির নামকরণ করা হয়েছে কিছুটা সময়, সম্ভবত কম অস্পষ্টতার সাথে, সঠিক মিলের অনুপাত (1):

এখানে চিত্র বর্ণনা লিখুন

নির্ভুলতা গণনার আর একটি সাধারণ উপায় (1) এবং (2) এ সংজ্ঞায়িত করা হয়েছে, এবং হ্যামিং স্কোর (4) (যেহেতু এটি হামিং ক্ষতির সাথে নিবিড়ভাবে সম্পর্কিত) বা লেবেল-ভিত্তিক নির্ভুলতা হিসাবে সংজ্ঞায়িত করা হয়েছে কম সংজ্ঞায়িতভাবে । এটি নিম্নলিখিত হিসাবে গণনা করা হয়:

এখানে চিত্র বর্ণনা লিখুন

হামিং স্কোর গণনা করার জন্য এখানে অজগর পদ্ধতি রয়েছে:

# Code by /programming//users/1953100/william
# Source: /programming//a/32239764/395857
# License: cc by-sa 3.0 with attribution required

import numpy as np

y_true = np.array([[0,1,0],
                   [0,1,1],
                   [1,0,1],
                   [0,0,1]])

y_pred = np.array([[0,1,1],
                   [0,1,1],
                   [0,1,0],
                   [0,0,0]])

def hamming_score(y_true, y_pred, normalize=True, sample_weight=None):
    '''
    Compute the Hamming score (a.k.a. label-based accuracy) for the multi-label case
    /programming//q/32239577/395857
    '''
    acc_list = []
    for i in range(y_true.shape[0]):
        set_true = set( np.where(y_true[i])[0] )
        set_pred = set( np.where(y_pred[i])[0] )
        #print('\nset_true: {0}'.format(set_true))
        #print('set_pred: {0}'.format(set_pred))
        tmp_a = None
        if len(set_true) == 0 and len(set_pred) == 0:
            tmp_a = 1
        else:
            tmp_a = len(set_true.intersection(set_pred))/\
                    float( len(set_true.union(set_pred)) )
        #print('tmp_a: {0}'.format(tmp_a))
        acc_list.append(tmp_a)
    return np.mean(acc_list)

if __name__ == "__main__":
    print('Hamming score: {0}'.format(hamming_score(y_true, y_pred))) # 0.375 (= (0.5+1+0+0)/4)

    # For comparison sake:
    import sklearn.metrics

    # Subset accuracy
    # 0.25 (= 0+1+0+0 / 4) --> 1 if the prediction for one sample fully matches the gold. 0 otherwise.
    print('Subset accuracy: {0}'.format(sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)))

    # Hamming loss (smaller is better)
    # $$ \text{HammingLoss}(x_i, y_i) = \frac{1}{|D|} \sum_{i=1}^{|D|} \frac{xor(x_i, y_i)}{|L|}, $$
    # where
    #  - \\(|D|\\) is the number of samples  
    #  - \\(|L|\\) is the number of labels  
    #  - \\(y_i\\) is the ground truth  
    #  - \\(x_i\\)  is the prediction.  
    # 0.416666666667 (= (1+0+3+1) / (3*4) )
    print('Hamming loss: {0}'.format(sklearn.metrics.hamming_loss(y_true, y_pred))) 

আউটপুট:

Hamming score: 0.375
Subset accuracy: 0.25
Hamming loss: 0.416666666667

(১) সোভারার, মোহাম্মদ এস। " মাল্টি-লেবেল শেখার জন্য অ্যালগরিদম সম্পর্কিত একটি সাহিত্য জরিপ। " ওরেগন স্টেট বিশ্ববিদ্যালয়, করভালিস (২০১০) 2010

(২) সৈওমাকাস, গ্রিগরিওস এবং আইওনিস কাটাকিস। " মাল্টি-লেবেল শ্রেণিবদ্ধকরণ: একটি ওভারভিউ। " ইনফরম্যাটিকস বিভাগ, থিসালোনিকি, অ্যারিস্টটল ইউনিভার্সিটি অফ গ্রীস (2006)।

(3) ঘামরাবি, নাদিয়া এবং অ্যান্ড্রু ম্যাককালাম। " সম্মিলিত মাল্টি-লেবেল শ্রেণিবদ্ধকরণ। " তথ্য ও জ্ঞান পরিচালনার বিষয়ে 14 তম এসিএম আন্তর্জাতিক সম্মেলনের কার্যক্রম। এসিএম, 2005

(৪) গডবোলে, শান্তনু, এবং সুনিতা সরওয়াগী। " বহু-লেবেলযুক্ত শ্রেণিবদ্ধকরণের জন্য বৈষম্যমূলক পদ্ধতি " "জ্ঞান আবিষ্কার এবং ডেটা মাইনিংয়ে অগ্রগতি। স্প্রিঞ্জার বার্লিন হাইডেলবার্গ, 2004. 22-30।


দুর্দান্ত উত্তর, এটি আমাকে আরও ভাল করেছে :) আমি এটিকে আরও পুঙ্খানুপুঙ্খভাবে পড়তে চলেছি, হামিং স্কোরটি ব্যবহার করে দেখুন এবং আপনার কাছে ফিরে যাব!
মোবিয়াস

সত্যি কথা বলতে কি সাবসেটের নির্ভুলতা (এক্সট্যাক্ট ম্যাচ রেশিও) আসলে কী তা আমার কাছে পুরোপুরি পরিষ্কার নয়। আপনি কি আরও কিছু ব্যাখ্যা করতে পারেন? দেখে মনে হয় যে মাল্টিক্লাসের ক্ষেত্রে এটি প্রত্যাহার করার মতো।
কবি মওদিত

hamming_scoreফাংশন ত্রুটি Keras আউট: <ipython-ইনপুট-34-16066d66dfdd> hamming_score মধ্যে (y_true, y_pred, স্বাভাবিক, sample_weight) 60 '' '61 acc_list = [] ---> সীমার মধ্যে আমি 62 (y_true.shape [ 0]): 63 সেট_ট্রু = সেট (এনপি.ওহেন (y_true [i]) [0]) set৪ সেট_প্রেড = সেট (এনপি.হোয়ার (y_pred [i]) [0]) টাইপ এরর : ইনডেক্স নন-ইনট ফিরে এসেছে (টাইপ নন টাইপ) )
rjurney

0

0.29 স্কোর কি যথেষ্ট নয়? আপনার কনফিউশন ম্যাট্রিক্স দেখতে কেমন? এমন কিছু বিষয় রয়েছে যা কেবলমাত্র শব্দের বিষয়বস্তু দেখে আলাদা করা যায় না?

অন্যথায়, আপনার সমস্যাটিকে ঘুরিয়ে দেওয়ার চেষ্টা করুন: হাইপোথিসিজ যে কম স্কোরগুলি আসলে আপনার ডেটাতে আপনার শ্রেণিবদ্ধকারী সবচেয়ে ভাল। এর অর্থ হ'ল এই নীতিটি ব্যবহার করে আপনার নথিগুলি শ্রেণিবদ্ধ নয়।

এই হাইপোথিসিসটি পরীক্ষা করার জন্য আপনার জ্ঞাত ব্যাগ-অফ-ওয়ার্ড বৈশিষ্ট্য (যা আপনি নিজেকে তৈরি করেছেন) সহ পরীক্ষার নথির একটি সেট প্রয়োজন। আপনার 100% স্কোর পাওয়া উচিত।

আপনি যদি না করেন তবে আপনার একটি বাগ রয়েছে। অন্যথায়, আপনার নথিগুলিকে শ্রেণিবদ্ধ করার জন্য আপনার আলাদা পদ্ধতির প্রয়োজন। নিজেকে জিজ্ঞাসা করুন: বিভিন্ন শ্রেণীর নথিগুলি একে অপরের থেকে কীভাবে আলাদা? আমার ডকুমেন্টস ইত্যাদির অন্যান্য বৈশিষ্ট্যগুলি কি আমাকে দেখার দরকার আছে?


সংখ্যাগুলি বাদে আমি বুঝতে পারি যে 0.29 কম। আমি শ্রেণিবদ্ধকে ম্যানুয়ালি পরীক্ষার জন্য প্রশিক্ষণটিতে ইতিমধ্যে ব্যবহার করেছি এমন নথিগুলিতে বিষয়গুলির পূর্বাভাস দেওয়ার জন্য প্রশিক্ষিত মডেলটি ব্যবহার করি। ব্যবহারকারী নথিতে ম্যানুয়ালি লিখেছেন এমন নূন্যতম টপিকগুলি আমি পেতে সক্ষম হইনি। আমি সাধারণত তাদের একটি উপসেট পাই। বিভ্রান্তির ম্যাট্রিক্স প্রশ্নের ক্ষেত্রেও আমি মনে করি না যে আমি বিজ্ঞান.মাট্রিক্স ব্যবহার করে ওয়ানভিএসআরস্টক্লাসিফায়ারে একটি বিভ্রান্তির ম্যাট্রিক্স পেতে পারি ... আমি যদিও এটি যাচাই করব
মুবিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.