কেরাস মডেলের সঠিকতা, এফ 1, নির্ভুলতা এবং পুনর্বিবেচনা কীভাবে পাবেন?


22

আমি আমার বাইনারি কেরাসক্ল্যাসিফায়ার মডেলের জন্য নির্ভুলতা, পুনরায় কল এবং এফ 1-স্কোর গণনা করতে চাই, তবে কোনও সমাধান খুঁজে পাই না।

আমার আসল কোডটি এখানে:

# Split dataset in train and test data 
X_train, X_test, Y_train, Y_test = train_test_split(normalized_X, Y, test_size=0.3, random_state=seed)

# Build the model
model = Sequential()
model.add(Dense(23, input_dim=45, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))

# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])


tensorboard = TensorBoard(log_dir="logs/{}".format(time.time()))

time_callback = TimeHistory()

# Fit the model
history = model.fit(X_train, Y_train, validation_split=0.3, epochs=200, batch_size=5, verbose=1, callbacks=[tensorboard, time_callback]) 

এবং তারপরে আমি নতুন পরীক্ষার ডেটা নিয়ে ভবিষ্যদ্বাণী করছি এবং এইভাবে কনফিউশন ম্যাট্রিক্স পাচ্ছি:

y_pred = model.predict(X_test)
y_pred =(y_pred>0.5)
list(y_pred)

cm = confusion_matrix(Y_test, y_pred)
print(cm)

তবে নির্ভুলতা-স্কোর, এফ 1-স্কোর, যথার্থতা এবং পুনরুদ্ধার পাওয়ার কোনও সমাধান আছে কি? (জটিল না হলে ক্রস-বৈধতা-স্কোরও, তবে এই উত্তরের জন্য প্রয়োজনীয় নয়)

কোন সাহায্যের জন্য আপনাকে ধন্যবাদ!

উত্তর:


22

মেট্রিকগুলি কেরাস কোর থেকে সরানো হয়েছে। আপনাকে সেগুলি ম্যানুয়ালি গণনা করতে হবে। তারা 2.0 সংস্করণে সেগুলি সরিয়েছে । এই মেট্রিকগুলি সমস্ত গ্লোবাল মেট্রিক্স, তবে কেরাস ব্যাচগুলিতে কাজ করে। ফলস্বরূপ, এটি সহায়তার চেয়ে আরও বিভ্রান্তিকর হতে পারে।

তবে, আপনার যদি সত্যিই তাদের প্রয়োজন হয়, আপনি এটি এটি করতে পারেন

from keras import backend as K

def recall_m(y_true, y_pred):
    true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
    possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
    recall = true_positives / (possible_positives + K.epsilon())
    return recall

def precision_m(y_true, y_pred):
    true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
    predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
    precision = true_positives / (predicted_positives + K.epsilon())
    return precision

def f1_m(y_true, y_pred):
    precision = precision_m(y_true, y_pred)
    recall = recall_m(y_true, y_pred)
    return 2*((precision*recall)/(precision+recall+K.epsilon()))

# compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc',f1_m,precision_m, recall_m])

# fit the model
history = model.fit(Xtrain, ytrain, validation_split=0.3, epochs=10, verbose=0)

# evaluate the model
loss, accuracy, f1_score, precision, recall = model.evaluate(Xtest, ytest, verbose=0)

যদি তারা বিভ্রান্তিকর হতে পারে তবে কেরাসের মডেলটিকে কীভাবে মূল্যায়ন করবেন?
জেলেলবি

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


দুঃখিত, সবেমাত্র এটি বন্ধ ছিল দেখেছি :(
মরুভূমি

কোনও ধারণা কেন এটি আমার জন্য বৈধতা নিয়ে কাজ করছে না? প্রশিক্ষণের জন্য সূক্ষ্ম কাজ করে।
রডরিগো রুইজ

13

আপনি বিজ্ঞান-শিখার শ্রেণিবিন্যাসের প্রতিবেদনটি ব্যবহার করতে পারেন । আপনার লেবেলগুলিকে একটি সংখ্যাসূচক বা বাইনারি ফর্ম্যাটে রূপান্তর করতে বিজ্ঞান-শিখুন লেবেল এনকোডারটিকে একবার দেখুন

from sklearn.metrics import classification_report

y_pred = model.predict(x_test, batch_size=64, verbose=1)
y_pred_bool = np.argmax(y_pred, axis=1)

print(classification_report(y_test, y_pred_bool))

যা আপনাকে দেয় (বিজ্ঞান-শিখার উদাহরণ থেকে অনুলিপি করা আউটপুট):

             precision  recall   f1-score    support

 class 0       0.50      1.00      0.67         1
 class 1       0.00      0.00      0.00         1
 class 2       1.00      0.67      0.80         3

2
এটি আমি ব্যবহার করি, সহজ এবং কার্যকর।
ম্যাথু

2

আপনি নীচে উল্লিখিত হিসাবে চেষ্টা করতে পারেন।

from sklearn.metrics import f1_score, precision_score, recall_score, confusion_matrix
y_pred1 = model.predict(X_test)
y_pred = np.argmax(y_pred1, axis=1)

# Print f1, precision, and recall scores
print(precision_score(y_test, y_pred , average="macro"))
print(recall_score(y_test, y_pred , average="macro"))
print(f1_score(y_test, y_pred , average="macro"))

0

এটি ব্যবহার করে দেখুন: https://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html সাথে Y_test, y_pred হিসাবে প্যারামিটার।


আমি এটি চেষ্টা করেছি: Model.recision_recall_fscore_support (Y_est, y_pred, গড় = 'মাইক্রো') এবং কার্যকর করার সময় এই ত্রুটিটি পেয়েছি: অ্যাট্রিবিউটরর: 'সিক্যুয়ালিয়াল' অবজেক্টটির কোনও বৈশিষ্ট্য নেই 'পুনর্বিবেচনা_আরকাল_ফস্কোর_সপোর্ট'
জেলেলবি

আপনাকে মডেল.রেসিজেন_রেইকল_ফস্কোর_সুপারপোর্ট () উল্লেখ করার দরকার নেই, কেবল পুনর্বিবেচনা_আরেকশাল_ফস্কোর_সুপারপোর্ট (ইয়েস্ট, y_pred, গড় = 'মাইক্রো') ("মডেল" ছাড়াই এবং আপনার সঠিক আমদানি রয়েছে কিনা তা নিশ্চিত করুন: sklearn.metics আমদানি নির্ভুলতা_রেচাল_ফেস__সুপার্টি)
ভায়াছ্লাভ কোমিসারেঙ্কো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.