SMOTE কৌশল ব্যবহার করে ডেটাসেটকে ভারসাম্য বজায় রাখতে সেরা পারফরম্যান্স মেট্রিক কী


8

আমি আমার ডেটাসেটের ওপরে নমুনা করতে স্মোটেক কৌশল ব্যবহার করেছি এবং এখন আমার ভারসাম্যপূর্ণ ডেটাসেট রয়েছে। আমি যে সমস্যার মুখোমুখি হয়েছি তা হ'ল পারফরম্যান্স মেট্রিক্স; ভারসাম্যহীন ডেটাসেটের যথার্থতা, পুনর্বিবেচনা, এফ 1 পরিমাপ, নির্ভুলতা ভারসাম্যপূর্ণ ডেটাসেটের চেয়ে আরও ভালভাবে সম্পাদন করা হয়।

ভারসাম্যপূর্ণ ডেটাসেট মডেলটির কার্যকারিতা উন্নত করতে পারে তা দেখানোর জন্য আমি কোন পরিমাপ ব্যবহার করতে পারি?

এনবি: রক_আউক_স্কোর ভারসাম্যহীন ডেটাসেটে রক_উক_স্কোরের তুলনায় ভারসাম্যহীন ডেটাসেটের চেয়ে ভাল, এটিকে কি ভাল পারফরম্যান্সের পরিমাপ হিসাবে বিবেচনা করা যেতে পারে? ব্যাখ্যার পরে আমি কোডটি প্রয়োগ করেছি এবং আমি এই ফলাফল পেয়েছি

import pandas as pd
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt 
plt.rc("font", size=14)
from sklearn.svm import LinearSVC
from sklearn.svm import SVC
from sklearn.cross_validation import train_test_split,StratifiedShuffleSplit,cross_val_score
import seaborn as sns
from scipy import interp
from time import *
from sklearn import metrics
X=dataCAD.iloc[:,0:71]
y= dataCAD['Cardio1']
# Split the dataset in two equal parts
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0)
print(y_test.value_counts())
model=SVC(C=0.001, kernel="rbf",gamma=0.01, probability=True)
t0 = time()
clf = model.fit(X_train,y_train)
y_pred = clf.predict(X_test)
t = time() - t0
print("=" * 52)
print("time cost: {}".format(t))
print()
print("confusion matrix\n", metrics.confusion_matrix( y_test, y_pred))
cf=metrics.confusion_matrix(y_test, y_pred)
accuracy=(cf.item((0,0))/50)+(cf.item((1,1))/14)
print("model accuracy \n",accuracy/2)
print()
print("\t\tprecision_score: {}".format(metrics.precision_score( y_test, y_pred, average='macro')))
print()
print("\t\trecall_score: {}".format(metrics.recall_score(y_test, y_pred, average='macro')))
print()
print("\t\tf1_score: {}".format(metrics.f1_score(y_test, y_pred, average='macro')))
print()
print("\t\troc_auc_score: {}".format(metrics.roc_auc_score( y_test, y_pred, average='macro')))

ফলাফল:

Name: Cardio1, dtype: int64
====================================================
time cost: 0.012008905410766602

confusion matrix
 [[50  0]
 [14  0]]
model accuracy 
 0.5

        precision_score: 0.390625

        recall_score: 0.5

        f1_score: 0.43859649122807015

        roc_auc_score: 0.5

ভারসাম্যপূর্ণ ডেটাসেটের জন্য

X_train1,y_train1 = sm.fit_sample(X_train, y_train.ravel())
df= pd.DataFrame({'Cardio1': y_train1})
df.groupby('Cardio1').Cardio1.count().plot.bar(ylim=0)
plt.show()
print(X_train1.shape)
print(y_train1.shape)
#model=SVC(C=0.001, kernel="rbf",gamma=0.01, probability=True)
model=SVC(C=10, kernel="sigmoid",gamma=0.001, probability=True)
t0 = time()
clf = model.fit(X_train1,y_train1)
y_pred = clf.predict(X_test)
t = time() - t0
print("=" * 52)
print("time cost: {}".format(t))
print()
print("confusion matrix\n", metrics.confusion_matrix(y_test, y_pred))
cf=metrics.confusion_matrix(y_test, y_pred)
accuracy=(cf.item((0,0))/50)+(cf.item((1,1))/14)
print("model accuracy \n",accuracy/2)
print()
#print("\t\taccuracy: {}".format(metrics.accuracy_score( y_test, y_pred)))
print()
print("\t\tprecision_score: {}".format(metrics.precision_score( y_test, y_pred, average='macro')))
print()
print("\t\trecall_score: {}".format(metrics.recall_score(y_test, y_pred, average='macro')))
print()
print("\t\tf1_score: {}".format(metrics.f1_score(y_test, y_pred, average='macro')))
print()
print("\t\troc_auc_score: {}".format(metrics.roc_auc_score( y_test, y_pred, average='macro')))

ফলাফল:

(246, 71)
(246,)
====================================================
time cost: 0.05353999137878418

confusion matrix
 [[ 0 50]
 [ 0 14]]
model accuracy 
 0.5


        precision_score: 0.109375

        recall_score: 0.5

        f1_score: 0.1794871794871795

        roc_auc_score: 0.5

আমি কোনও কার্যকর ফলাফল পাইনি। আমি কি ক্রস বৈধতা ব্যবহার করে মডেলটি প্রয়োগ করব?

উত্তর:


8

প্রথমত, কেবল স্পষ্ট করে বলতে গেলে, ভারসাম্যপূর্ণ ডেটা সেটটিতে আপনার মডেলগুলির পারফরম্যান্সটি মূল্যায়ন করা উচিত নয় । আপনার যা করা উচিত তা হ'ল আপনার ডেটাসেটকে ট্রেনে বিভক্ত করা এবং আদর্শ পরীক্ষায় একই ভারসাম্যহীনতার সাথে একটি পরীক্ষা সেট। মূল্যায়ন পরীক্ষা সেটটিতে একচেটিয়াভাবে সঞ্চালন করা উচিত , যখন প্রশিক্ষণ সংস্থায় ভারসাম্য রইল।

আপনার প্রশ্নের হিসাবে, যে কোনও ম্যাক্রো গড় মেট্রিক আপনার ব্যালেন্সিং কৌশল কার্যকর তা প্রমাণ করার জন্য ঠিক ঠিক করা উচিত। এই জাতীয় একটি মেট্রিক গণনা করতে (আসুন সরলতার জন্য নির্ভুলতা বলি), আপনাকে কেবল প্রতিটি শ্রেণীর যথাযথ পৃথকভাবে গণনা করতে হবে এবং তারপরে সেগুলি গড় করতে হবে।

উদাহরণ :
আমরা দুটি মডেলের প্রশিক্ষিত m1এবং m2ডেটা সেটটি এবং ডেটা সেটটি সামঞ্জস্য বজায় রাখা মারতে লাগল ব্যবহার করে পরে দ্বিতীয় মিট ছাড়া প্রথম।

আসল মান: 0, 0, 0, 0, 0, 0, 0, 0, 1, 1
পূর্বাভাস m1: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 <- কেবলমাত্র সংখ্যাগরিষ্ঠ শ্রেণীর
পূর্বাভাস m2:1, 0, 0, 1, 0, 1, 0, 0, 1, 1

আমরা কীভাবে সাধারণত নির্ভুলতা গণনা করব?

একটি=RRটিপিRআমিটিআমিএনগুলিটিটিএকটিপিRআমিটিআমিএনগুলি

কীভাবে আমাদের দুটি মডেল এই মেট্রিকটিতে পারফর্ম করবেন?

একটি1=810=80%
একটি2=710=70%

এই পারফরম্যান্স মেট্রিক অনুযায়ী, m2তুলনায় ভাল m1। তবে, m1সংখ্যাগরিষ্ঠ শ্রেণীর ভবিষ্যদ্বাণী অনুসারে এটি অগত্যা নয় ! এর m2চেয়ে কীভাবে আরও ভাল তা দেখানোর জন্য আমাদের এমন m1একটি মেট্রিক দরকার যা দুটি ক্ল্যাসকে সমান হিসাবে বিবেচনা করে।

আমরা এখন ম্যাক্রো-গড় গড় নির্ভুলতা গণনা করার চেষ্টা করব। কিভাবে? প্রথমে আমরা পৃথকভাবে প্রতিটি শ্রেণীর জন্য নির্ভুলতা গণনা করব এবং তারপরে আমরা সেগুলি গড় করব:

  • m1
    একটি10=88=100%m10
    একটি11=02=0%m11
    মিএকটিR: _একটি1=একটি10+ +একটি112=100%+ +0%2=50%

  • m2
    একটি20=58=62.5%m20
    একটি21=22=100%m21
    মিএকটিR: _একটি2=একটি20+ +একটি212=62.5%+ +100%2=81,25%

দ্রষ্টব্য :

  • ম্যাক্রো গড় আপনি যে কোনও মেট্রিকের জন্য প্রয়োগ করতে পারেন, তবে এটি বিভ্রান্তির ম্যাট্রিক্স মেট্রিক্সে (যেমন যথার্থতা, প্রত্যাহার, এফ 1) সবচেয়ে সাধারণ।

  • আপনার নিজের দ্বারা এটি প্রয়োগ করার দরকার নেই, অনেকগুলি গ্রন্থাগার ইতিমধ্যে এটি রয়েছে (উদাহরণস্বরূপ স্ক্লার্নের f1_score এর একটি প্যারামিটার রয়েছে average, যা সেট করা যেতে পারে "macro")


ধন্যবাদ আপনার দুর্দান্ত ব্যাখ্যার জন্য অনেক ধন্যবাদ এটি পরিষ্কার সংক্ষিপ্ত আপনি কি কিছু বৈজ্ঞানিক নিবন্ধ বাস্তবের জন্য প্রস্তাব করতে পারেন ??
রাভিয়া সাম্মাউট

4
বিষয় সম্পর্কে কয়েকটি নিবন্ধ: 1 , 2 , 3 । এই নিবন্ধগুলি মূলত কীভাবে পর্যালোচনা করে তা শ্রেণিবদ্ধ আবাসস্থল (ওভার / স্যাম্পলিং, শ্রেণির ওজন ইত্যাদি) এবং এই পরিস্থিতিতে ব্যবহার করা যেতে পারে এমন মেট্রিকগুলি (আরওসি, জি-গড়, চতুর্ভুজ
কাপ্প

আপনি কি ভাগ করে নেওয়া কোডটি একবার দেখে নিতে পারেন তার পরিবর্তে মডেলটির পারফরম্যান্সের উন্নতি করতে গিয়ে আমি বিভ্রান্তিকর ফলাফল পেয়েছি তার বিপরীতে পেয়েছি
রাওিয়া সাম্মাউট

3
বিভ্রান্তি ম্যাট্রিক্সের মাধ্যমে আমি যা বলতে পারি তা থেকে আপনার প্রথম মডেলটি (ভারসাম্য না রেখে) কেবলমাত্র সংখ্যাগরিষ্ঠ শ্রেণির ভবিষ্যদ্বাণী করে, যখন দ্বিতীয়টি (ধৃত সহ) অন্য শ্রেণীর পূর্বাভাস দেয়। আমি সম্ভবত অন্য শ্রেণিবদ্ধের চেষ্টা করার পরামর্শ দেব, কারণ এসভিএমগুলিকে হাইপার-প্যারামিটার টিউনিংয়ের প্রচুর পরিমাণ প্রয়োজন (যেমন সেরা সি, গামা, কার্নেলের ধরণ ইত্যাদির জন্য আপনার মডেলটি বারবার চালানো)।
ডিজিব २०१১ 21

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