اذهب إلى المحتوى

السؤال

Recommended Posts

  • 1
نشر (معدل)

في تنسرفلو يمكنك حسابهم بالشكل التالي اعتماداً على الصيغة العامة لهم:
1.png.d499a3cd5c5523c69990a3e61b8dec9b.png

بعد حساب القيم المتوقعة 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 إلخ..

 

تم التعديل في بواسطة Ali Haidar Ahmad
  • 1
نشر

كما أوضح علي في الإجابة، فان المعادلات تلخص كل شئ، حيث أنه لحساب 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)

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...