عامر ابراهيم نشر 17 سبتمبر 2021 أرسل تقرير مشاركة نشر 17 سبتمبر 2021 قمت ببناء نموذج لمهمة تصنيف ثنائي وأريد حساب F1 score لنموذجي، فيكف يمكننا القيام بذلك من خلال تنسرفلو؟ 2 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 Ali Haidar Ahmad نشر 17 سبتمبر 2021 أرسل تقرير مشاركة نشر 17 سبتمبر 2021 (معدل) في تنسرفلو يمكنك حسابهم بالشكل التالي اعتماداً على الصيغة العامة لهم: بعد حساب القيم المتوقعة y_pred نقوم بحساب ال TP و TN و FP و FN ونستخدم الدالة count_nonzero للقيام بذلك: TP = tf.count_nonzero(y_pred * y_true) TN = tf.count_nonzero((y_pred - 1) * (y_true - 1)) FP = tf.count_nonzero(y_pred * (y_true - 1)) FN = tf.count_nonzero((y_pred - 1) * y_true) ثم نقوم بتطبيق القوانين السابقة مباشرةً: precision = TP / (TP + FP) recall = TP / (TP + FN) f1 = 2 * precision * recall / (precision + recall) عموماً إذا لم تكن تستخدم graph فيمكنك أيضاً استخدام التوابع الجاهزة في sklearn لذا سأترك لك روابط لهم: في الرابط هنا تجد شرح لل TP و ال TN إلخ.. تم التعديل في 17 سبتمبر 2021 بواسطة Ali Haidar Ahmad 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 Ahmed Sharshar نشر 17 سبتمبر 2021 أرسل تقرير مشاركة نشر 17 سبتمبر 2021 كما أوضح علي في الإجابة، فان المعادلات تلخص كل شئ، حيث أنه لحساب f1-score يجب حساب precision وكذلك recall لذا فانه تمثل الموازنه بين الطريقتين ، وهي مناسبة للغاية اذا كنت تريد اختيار النموذج بناء على التوازن بين الحسابتين. وتتميز f1-score بانها تحقق التوازن بين نسبة القيم الصحية التي تم توقعها بالنسبة للعدد الايجابي الكلى precision وهي دقة النموذج و نسبة القيم الصحيحة التي تم توقعها بالنسبة للقيم الصحيحة كلها وهي recall تعبر عن مدى اكتمال النموذح، لذلك فهي تعتبر طريقة مهمة للقياس. وهي تتواجد في tensorflow مباشرة كالتالي: tfa.metrics.F1Score( num_classes: tfa.types.FloatTensorLike, average: str = None, threshold: Optional[FloatTensorLike] = None, name: str = 'f1_score', dtype: tfa.types.AcceptableDTypes = None ) مثال لكيفية استخدامها كالتالي: metric = tfa.metrics.F1Score(num_classes=3, threshold=0.5) y_true = np.array([[1, 1, 1], [1, 0, 0], [1, 1, 0]], np.int32) y_pred = np.array([[0.2, 0.6, 0.7], [0.2, 0.6, 0.6], [0.6, 0.8, 0.0]], np.float32) metric.update_state(y_true, y_pred) result = metric.result() result.numpy() >>> [ 0.5 , 0.8 , 0.66666667 ] وبداخل النموذج يمكنك استخدامها كالتالي: pred = multilayer_perceptron(x, weights, biases) correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) with tf.Session() as sess: init = tf.initialize_all_variables() sess.run(init) for epoch in xrange(150): for i in xrange(total_batch): train_step.run(feed_dict = {x: train_arrays, y: train_labels}) avg_cost += sess.run(cost, feed_dict={x: train_arrays, y: train_labels})/total_batch if epoch % display_step == 0: print "Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost) #metrics y_p = tf.argmax(pred, 1) val_accuracy, y_pred = sess.run([accuracy, y_p], feed_dict={x:test_arrays, y:test_label}) print "validation accuracy:", val_accuracy y_true = np.argmax(test_label,1) print "Precision", sk.metrics.precision_score(y_true, y_pred) print "Recall", sk.metrics.recall_score(y_true, y_pred) print "f1_score", sk.metrics.f1_score(y_true, y_pred) print "confusion_matrix" print sk.metrics.confusion_matrix(y_true, y_pred) fpr, tpr, tresholds = sk.metrics.roc_curve(y_true, y_pred) اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
عامر ابراهيم
قمت ببناء نموذج لمهمة تصنيف ثنائي وأريد حساب F1 score لنموذجي، فيكف يمكننا القيام بذلك من خلال تنسرفلو؟
رابط هذا التعليق
شارك على الشبكات الإجتماعية
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.