ভারসাম্যহীন ডেটা মাল্টিক্লাস ডেটাসেটে ভুল-শ্রেণিবদ্ধকরণের কারণ


9

আমি পাঠ্য শ্রেণিবিন্যাসে কাজ করছি যেখানে আমার 39 টি বিভাগ / শ্রেণি এবং 8.5 মিলিয়ন রেকর্ড রয়েছে। (ভবিষ্যতে ডেটা এবং বিভাগগুলি বৃদ্ধি পাবে)।

আমার ডেটার গঠন বা ফর্ম্যাটটি নীচে রয়েছে।

----------------------------------------------------------------------------------------
| product_title          | Key_value_pairs                               | taxonomy_id |
----------------------------------------------------------------------------------------
  Samsung S7 Edge        | Color:black,Display Size:5.5 inch,Internal    | 211 
                          Storage:128 GB, RAM:4 GB,Primary Camera:12 MP  

  Case cover Honor 8     | Color:transparent,Height:15 mm,width:22 mm    | 212 

  Ruggers Men's T-Shirt  | Size:L,ideal for:men,fit:regular,             | 111
                          sleeve:half sleeve

  Optimum Nutrition Gold | Flavor:chocolate,form:powder,size:34 gm       | 311
  Standard Whey Protein  

ডেটা বিতরণ স্বাভাবিক নয়; এটি অত্যন্ত ভারসাম্যহীন:

-------------------------
| taxonomy_id |   count |
-------------------------
          111 |  851750 
          112 |  355592
          113 |  379433
          114 |   23138
          115 |  117735
          116 |  145757
          117 | 1339471
          121 |  394026
          122 |  193433
          123 |   78299
          124 |  111962
          131 |    1776
          132 |    4425
          133 |     908
          134 |   23062
          141 |   22713
          142 |   42073
          211 |    7892
          212 | 1574744
          221 |    1047
          222 |  397515
          223 |   53009
          231 |    1227
          232 |    7683
          251 |     739
          252 |     327
          253 |   38974
          254 |      25
          311 |    2901
          321 |    7126
          412 |     856
          421 |  697802
          422 |  414855
          423 |   17750
          425 |    1240
          427 |     658
          429 |    1058
          431 |   20760
          441 |     257       

আপনি দেখতে পাচ্ছেন যে এগুলি অত্যন্ত ভারসাম্যহীন এবং ভুল-শ্রেণিবদ্ধকরণের দিকে পরিচালিত করে।

আমি এখনও অবধি অভিনয় করেছি

1) product_title এবং key_value_pairs কলামটি মার্জ করুন এবং স্টপ শব্দ এবং বিশেষ অক্ষর মুছে ফেলুন এবং স্টেমিং সঞ্চালন করুন।

2) আমি টিএফআইডিএফভেেক্টরাইজার (), লিনিয়ারএসভিসি () এর জন্য পাইপলাইন ব্যবহার করেছি

vectorizerPipe = Pipeline([
                 ('tfidf', TfidfVectorizer(lowercase=True, stop_words='english')),
                 ('classification', OneVsRestClassifier(LinearSVC(penalty='l2', loss='hinge'))),
                 ])

এর পরে আমার ফিট পাইপলাইন আছে এবং আমি ক্লাসিফায়ারকে আচারে সংরক্ষণ করি

prd = vectorizerPipe.fit(df.loc[:, 'description'], df.loc[:, 'taxonomy_id'])

পরীক্ষার দিকে আমি উপরে উল্লিখিত হিসাবে ধাপ 1 পুনরাবৃত্তি করেছি এবং তার পরে আচার লোড করুন এবং পূর্বাভাস ফাংশন ব্যবহার করুন

pd = cl.predict([testData])

আমি যে সমস্যার মুখোমুখি হচ্ছি

  1. প্রচুর পণ্যকে অন্য কয়েকটি বিভাগে ভুলভাবে শ্রেণিবদ্ধ করা হচ্ছে

    উদাহরণ: চূড়ান্ত পুষ্টি প্রস্টার 100% হুই প্রোটিন 311 বিভাগে শ্রেণিবদ্ধ করা উচিত তবে আমার শ্রেণিবদ্ধ এটি 222 হিসাবে শ্রেণিবদ্ধ করছে যা সম্পূর্ণ ভুল।

  2. আমি টিফিডফেক্টরেক্টর () বা হ্যাশিংভেক্টরাইজার () ব্যবহার করবেন কিনা তা নিশ্চিত নই, আপনি কি তাদের পরামিতিগুলির সাথে এর মধ্যে একটি নির্বাচন করতে আমাকে সহায়তা করতে পারেন?

  3. অ্যালগরিদম আমি ব্যবহার করছি লিনিয়ারএসভিসি, এটি কি প্রচুর পরিমাণে ডেটা সহ বহু শ্রেণির শ্রেণিবিন্যাস সমস্যার জন্য ভাল পছন্দ? নাকি আমার আলাদা অ্যালগোরিদম ব্যবহার করা উচিত?

  4. আমার ডেটা অত্যন্ত ভারসাম্যহীন হওয়ায় আমি এলোমেলোভাবে আন্ডার স্যাম্পলিংয়ের চেষ্টা করেছি। ফলাফলগুলি উন্নত করা হয়েছিল তবে তারা এখনও শীর্ষে ছিল না। এছাড়াও আমি নিশ্চিত নই যে এটি এলোমেলো আন্ডার স্যাম্পলিংয়ের সঠিক পন্থা:

    pipe = make_pipeline_imb(
        HashingVectorizer(lowercase=True),
        RandomUnderSampler(ratio={111: 405805, 112: 170431, 113: 241709, 114: 8341, 115: 50328, 116: 89445, 117: 650020, 121: 320803, 122: 162557, 123: 66156, 124: 36276, 131: 1196, 132: 3365, 133: 818, 134: 15001, 141: 6145, 142: 31783, 211: 24728, 212: 100000, 221: 791, 222: 8000, 223: 35406, 231: 785, 232: 3000, 251: 477, 252: 127, 253: 29563, 254: 33, 311: 2072, 321: 5370, 412: 652, 421: 520973, 422: 99171, 423: 16786, 425: 730, 427: 198, 429: 1249, 431: 13793, 441: 160},random_state=1), 
        OneVsRestClassifier(LinearSVC(penalty='l2', loss='hinge')))
    
  5. আমি মেশিন লার্নিংয়ে নতুন তাই আমি এই পদ্ধতির পাঠ্য শ্রেণিবিন্যাসের জন্য ব্যবহার করেছি। যদি আমার পদ্ধতির ভুল হয় তবে দয়া করে আমাকে সঠিকভাবে সংশোধন করুন।

(আপনি উদাহরণগুলির সাথে পরামর্শ বা সমাধান দিলে এটি দুর্দান্ত হবে কারণ এটি আমাকে আরও ভালভাবে বুঝতে সহায়তা করবে)।

*** সম্পাদনা -1 ****

RndmFrst = RandomForestClassifier(n_estimators=100, max_depth=20, max_features=5000,n_jobs=-1)
LogReg = LogisticRegression()
voting = VotingClassifier(estimators=[('LogReg ', LogReg), ('RndmFrst', RndmFrst)], voting='soft', n_jobs=-1)

pipe = Pipeline([('tfidf', TfidfVectorizer(ngram_range=(1,4), max_features=50000)), ('clf', voting)])

pipe = pipe.fit(df.loc[:,'description'], df.loc[:,'taxonomy_id'])
Preds = pipe.predict(test_data)

আমি সবেমাত্র দেখেছি যে আপনি আন্ডার স্যাম্পলিংয়ের চেষ্টা করেছেন। কেবলমাত্র, সায়-কিট লার্নের স্টারফায়েড কে-ফোল্ড ক্রস বৈধকরণও শ্রেণি বিতরণকে অ্যাকাউন্টে গ্রহণ করে।
কসরা মনশায়ে

উত্তর:


6

সুন্দর প্রশ্ন!

কিছু মন্তব্য

ভারসাম্যহীন ডেটার জন্য আপনার কাছে আলাদা পদ্ধতি রয়েছে। সর্বাধিক সুপ্রতিষ্ঠিত একটি হ'ল পুনরায় মডেলিং (ছোট শ্রেণির ওভারস্যাম্পলিং / বৃহত শ্রেণির নিম্নমানের)। অন্যটি হ'ল আপনার শ্রেণিবিন্যাসকে শ্রেণিবিন্যাস করা অর্থাৎ অন্য সকলের বিপরীতে বৃহত শ্রেণিগুলির শ্রেণিবদ্ধকরণ এবং তারপরে দ্বিতীয় ধাপে ছোট শ্রেণিগুলিকে শ্রেণিবদ্ধকরণ করা (শ্রেণিবদ্ধ একই নয় বলে মনে করা হয় the সেরাটি খুঁজে পাওয়ার জন্য মডেল নির্বাচনের কৌশলগুলি চেষ্টা করুন)।

ব্যবহারিক উত্তর

আমি ডেটা পুনরায় মডেল না করে গ্রহণযোগ্য ফলাফল পেয়েছি! সুতরাং এটি ব্যবহার করে দেখুন কিন্তু পরে পুনরায় মডেলিং পদ্ধতিগুলি ব্যবহার করে এটি উন্নত করুন (পরিসংখ্যানগত দিক থেকে তারা এক ধরনের অত্যাবশ্যক)।

টিএফআইডিএফ এ জাতীয় সমস্যার জন্য ভাল। মডেল নির্বাচনের মাধ্যমে ক্লাসিফায়ারগুলি নির্বাচন করা উচিত তবে আমার অভিজ্ঞতা দেখায় যে লজিস্টিক রিগ্রেশন এবং র্যান্ডম ফরেস্ট এই নির্দিষ্ট সমস্যাটিতে ভাল কাজ করে (তবে এটি কেবল একটি বাস্তব অভিজ্ঞতা)।

আপনি কোড বেলো অনুসরণ করতে পারেন কারণ এটি খুব ভাল কাজ করেছে তবে আপনার ফলাফলগুলি উন্নত করতে আপনি এটি সংশোধন করার চেষ্টা করতে পারেন:

train = pd.read_csv(...)
test = pd.read_csv(...)    

# TFIDF Bag Of Words Model For Text Curpos. Up to 4-grams and 50k Features
vec = TfidfVectorizer(ngram_range=(1,4), max_features=50000)
TrainX = vec.fit_transform(train)
TestX = vec.transform(test)


# Initializing Base Estimators
clf1 = LogisticRegression()
clf2 = RandomForestClassifier(n_estimators=100, max_depth=20, max_features=5000,n_jobs=-1)

# Soft Voting Classifier For Each Column
clf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2)], voting='soft', n_jobs=-1)
clf = clf.fit(TrainX, TrainY)
preds = clf.predict_proba(TestX)[:,1]

দয়া করে নোট করুন যে কোডটি বিমূর্ত তাই টিয়ানএক্স, ট্রেনওয়াই, টেস্টএক্স ইত্যাদি আপনার দ্বারা যথাযথভাবে সংজ্ঞায়িত করা উচিত।

সংকেতগুলি

স্টপওয়ার্ড কী তা সম্পর্কে সতর্কতা অবলম্বন করুন। প্রাক-সংজ্ঞায়িত তালিকাগুলি অনুসারে ব্যবহারিকভাবে অনেক লোক (নিজেকে সহ!) এই শব্দগুলি থামানোর জন্য ভুল করেছিল। এটা ঠিক না!

স্টপ শব্দগুলি কর্পাস-সংবেদনশীল তাই তথ্যের তাত্ত্বিক ধারণা অনুসারে আপনার স্টপওয়ার্ডগুলি সরিয়ে ফেলতে হবে (এটি সহজ রাখতে আপনার টিফআইডিএফ জাতীয় ধরণের আপনার কর্পাস-নির্দিষ্ট স্টপওয়ার্ডগুলি উপেক্ষা করতে হবে know আপনার আরও ব্যাখ্যা প্রয়োজন হলে দয়া করে আমার উত্তর আপডেট করতে আমাকে জানান) ।

VotingClassifier পরিবার একটি মেটা-শেখার কৌশল আঁসাঁব্ল পদ্ধতি । তারা বিভিন্ন শ্রেণিবদ্ধ থেকে সুবিধা গ্রহণ। তারা অনুশীলনে বেশ ভাল কাজ করার কারণে তাদের চেষ্টা করুন।

ভোটিং স্কিমাটি সহজভাবে বিভিন্ন শ্রেণিবদ্ধের ফলাফল গ্রহণ করে এবং যার ফলাফলের সঠিক সম্ভাবনা রয়েছে তার আউটপুট ফেরত দেয়। একনায়কতন্ত্রের বিরুদ্ধে এত ধরণের গণতান্ত্রিক পন্থা;)

আশা করি এটা সাহায্য করবে!


স্বাগত! স্বজ্ঞাত পুনরায় মডেলিংয়ের জন্য আপনি পুনরায় মডেলিংয়ের জন্য আমার দেওয়া লিঙ্কটি উল্লেখ করতে পারেন। একটি ধাপে ধাপে নির্দেশ আছে।
কসরা মনশায়ে

আমি আপনার সমাধানটি চেষ্টা করছি, আমি যদি কোথাও আটকে যাই বা কোনও সন্দেহের ক্ষেত্রে আমি মন্তব্য বিভাগে পোস্ট করব। আশা করি আপনার জন্য এটি ভাল হবে!
আউটলেটর

অবশ্যই আমার বন্ধু ... শুভকামনা!
কসরা মনশায়ে

1
যদি এটি কাজ করে তবে আপনি উত্তরটি গ্রহণ করতে পারেন :)
কসরা মনশায়ে

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