عامر ابراهيم نشر 17 سبتمبر 2021 أرسل تقرير نشر 17 سبتمبر 2021 قمت ببناء نموذج لمهمة تصنيف ثنائي وأريد حساب F1 score لنموذجي، فيكف يمكننا القيام بذلك من خلال تنسرفلو؟ 2 اقتباس
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 اقتباس
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) اقتباس
السؤال
عامر ابراهيم
قمت ببناء نموذج لمهمة تصنيف ثنائي وأريد حساب F1 score لنموذجي، فيكف يمكننا القيام بذلك من خلال تنسرفلو؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.