CNTK - รูปแบบการจำแนกประเภท

บทนี้จะช่วยให้คุณเข้าใจวิธีการวัดประสิทธิภาพของรูปแบบการจำแนกใน CNTK เริ่มต้นด้วยเมทริกซ์ความสับสน

เมทริกซ์ความสับสน

เมทริกซ์ความสับสน - ตารางที่มีผลลัพธ์ที่คาดการณ์ไว้เทียบกับผลลัพธ์ที่คาดไว้เป็นวิธีที่ง่ายที่สุดในการวัดประสิทธิภาพของปัญหาการจำแนกประเภทโดยที่ผลลัพธ์อาจเป็นประเภทสองประเภทขึ้นไป

เพื่อให้เข้าใจว่ามันทำงานอย่างไรเราจะสร้างเมทริกซ์ความสับสนสำหรับรูปแบบการจำแนกไบนารีที่คาดการณ์ว่าธุรกรรมบัตรเครดิตเป็นเรื่องปกติหรือเป็นการฉ้อโกง ดังต่อไปนี้ -

การฉ้อโกงที่เกิดขึ้นจริง ปกติจริง

Predicted fraud

บวกจริง

บวกเท็จ

Predicted normal

ลบเท็จ

ลบจริง

ดังที่เราเห็นเมทริกซ์ความสับสนตัวอย่างข้างต้นประกอบด้วย 2 คอลัมน์คอลัมน์หนึ่งสำหรับการฉ้อโกงคลาสและอื่น ๆ สำหรับคลาสปกติ ในทำนองเดียวกันเรามี 2 แถวแถวหนึ่งถูกเพิ่มสำหรับการฉ้อโกงคลาสและอื่น ๆ ถูกเพิ่มสำหรับคลาสปกติ ต่อไปนี้เป็นคำอธิบายของคำศัพท์ที่เกี่ยวข้องกับเมทริกซ์ความสับสน -

  • True Positives - เมื่อทั้งคลาสจริงและคลาสของจุดข้อมูลที่คาดการณ์ไว้คือ 1

  • True Negatives - เมื่อทั้งคลาสจริงและคลาสที่คาดการณ์ไว้ของจุดข้อมูลเป็น 0

  • False Positives - เมื่อคลาสจริงของจุดข้อมูลเป็น 0 และคลาสของจุดข้อมูลที่คาดการณ์ไว้คือ 1

  • False Negatives - เมื่อคลาสจริงของจุดข้อมูลคือ 1 และคลาสของจุดข้อมูลที่คาดการณ์ไว้คือ 0

มาดูกันว่าเราจะคำนวณจำนวนสิ่งต่าง ๆ จากเมทริกซ์ความสับสนได้อย่างไร -

  • Accuracy- เป็นจำนวนการคาดการณ์ที่ถูกต้องซึ่งทำโดยรูปแบบการจำแนก ML ของเรา สามารถคำนวณได้ด้วยความช่วยเหลือของสูตรต่อไปนี้ -

  • Precision− บอกให้เราทราบว่ามีตัวอย่างจำนวนเท่าใดที่ทำนายได้อย่างถูกต้องจากตัวอย่างทั้งหมดที่เราคาดการณ์ไว้ สามารถคำนวณได้ด้วยความช่วยเหลือของสูตรต่อไปนี้ -

  • Recall or Sensitivity- การเรียกคืนคือจำนวนผลบวกที่ส่งคืนโดยรูปแบบการจำแนก ML ของเรา กล่าวอีกนัยหนึ่งก็คือจะบอกให้เราทราบว่าโมเดลนั้นตรวจพบการฉ้อโกงในชุดข้อมูลได้กี่กรณี สามารถคำนวณได้ด้วยความช่วยเหลือของสูตรต่อไปนี้ -

  • Specificity- ตรงข้ามกับการเรียกคืนจะให้จำนวนเชิงลบที่ส่งคืนโดยรูปแบบการจำแนก ML ของเรา สามารถคำนวณได้ด้วยความช่วยเหลือของสูตรต่อไปนี้ -

F- วัด

เราสามารถใช้ F-measure เป็นทางเลือกหนึ่งของ Confusion matrix เหตุผลหลักเบื้องหลังนี้เราไม่สามารถเพิ่มการเรียกคืนและความแม่นยำสูงสุดในเวลาเดียวกันได้ เมตริกเหล่านี้มีความสัมพันธ์ที่แน่นแฟ้นมากและสามารถเข้าใจได้ด้วยความช่วยเหลือของตัวอย่างต่อไปนี้ -

สมมติว่าเราต้องการใช้แบบจำลอง DL เพื่อจำแนกตัวอย่างเซลล์ว่าเป็นมะเร็งหรือปกติ ที่นี่เพื่อให้ได้ความแม่นยำสูงสุดเราจำเป็นต้องลดจำนวนการคาดการณ์ลงเหลือ 1 แม้ว่าสิ่งนี้จะทำให้เราเข้าถึงความแม่นยำได้ประมาณ 100 เปอร์เซ็นต์ แต่การเรียกคืนจะต่ำ

ในทางกลับกันหากเราต้องการเรียกคืนสูงสุดเราจำเป็นต้องคาดการณ์ให้ได้มากที่สุด แม้ว่าสิ่งนี้จะช่วยให้เราจำได้ประมาณ 100 เปอร์เซ็นต์ แต่ความแม่นยำจะต่ำมาก

ในทางปฏิบัติเราต้องหาวิธีที่สมดุลระหว่างความแม่นยำและความจำ เมตริกการวัดค่า F ช่วยให้เราสามารถทำได้เนื่องจากเป็นการแสดงค่าเฉลี่ยฮาร์มอนิกระหว่างความแม่นยำและการเรียกคืน

สูตรนี้เรียกว่า F1-measure โดยคำพิเศษที่เรียกว่า B ถูกกำหนดเป็น 1 เพื่อให้ได้อัตราส่วนความแม่นยำและการเรียกคืนที่เท่ากัน เพื่อเน้นย้ำการระลึกถึงเราสามารถตั้งค่าปัจจัย B เป็น 2 ได้ในทางกลับกันเพื่อเน้นความแม่นยำเราสามารถตั้งค่าปัจจัย B เป็น 0.5

ใช้ CNTK เพื่อวัดประสิทธิภาพการจัดหมวดหมู่

ในส่วนก่อนหน้านี้เราได้สร้างแบบจำลองการจำแนกโดยใช้ชุดข้อมูลดอกไอริส ที่นี่เราจะวัดประสิทธิภาพโดยใช้เมทริกซ์ความสับสนและเมตริกการวัดค่า F

การสร้างเมทริกซ์ความสับสน

เราได้สร้างแบบจำลองแล้วดังนั้นเราจึงสามารถเริ่มกระบวนการตรวจสอบความถูกต้องซึ่งรวมถึง confusion matrixในขณะเดียวกัน ขั้นแรกเราจะสร้างเมทริกซ์ความสับสนด้วยความช่วยเหลือของconfusion_matrix ฟังก์ชันจาก scikit-learn. สำหรับสิ่งนี้เราต้องการฉลากจริงสำหรับตัวอย่างทดสอบของเราและฉลากที่คาดการณ์ไว้สำหรับตัวอย่างทดสอบเดียวกัน

ลองคำนวณเมทริกซ์ความสับสนโดยใช้รหัส python ต่อไปนี้ -

from sklearn.metrics import confusion_matrix
y_true = np.argmax(y_test, axis=1)
y_pred = np.argmax(z(X_test), axis=1)
matrix = confusion_matrix(y_true=y_true, y_pred=y_pred)
print(matrix)

เอาต์พุต

[[10 0 0]
[ 0 1 9]
[ 0 0 10]]

เรายังสามารถใช้ฟังก์ชันแผนที่ความร้อนเพื่อแสดงภาพเมทริกซ์ความสับสนได้ดังนี้ -

import seaborn as sns
import matplotlib.pyplot as plt
g = sns.heatmap(matrix,
     annot=True,
     xticklabels=label_encoder.classes_.tolist(),
     yticklabels=label_encoder.classes_.tolist(),
     cmap='Blues')
g.set_yticklabels(g.get_yticklabels(), rotation=0)
plt.show()

เราควรมีหมายเลขประสิทธิภาพเดียวที่เราสามารถใช้เพื่อเปรียบเทียบรุ่นได้ สำหรับสิ่งนี้เราต้องคำนวณข้อผิดพลาดในการจำแนกโดยใช้classification_error จากแพ็กเกจเมตริกใน CNTK เมื่อเสร็จสิ้นขณะสร้างโมเดลการจำแนก

ตอนนี้ในการคำนวณข้อผิดพลาดในการจำแนกให้ดำเนินการวิธีการทดสอบกับฟังก์ชันการสูญเสียด้วยชุดข้อมูล หลังจากนั้น CNTK จะนำตัวอย่างที่เราให้มาเป็นอินพุตสำหรับฟังก์ชันนี้และทำการคาดคะเนตามคุณสมบัติการป้อนข้อมูล X_test.

loss.test([X_test, y_test])

เอาต์พุต

{'metric': 0.36666666666, 'samples': 30}

การใช้มาตรการ F

สำหรับการใช้ F-Measures CNTK ยังมีฟังก์ชันที่เรียกว่า fmeasures เราสามารถใช้ฟังก์ชันนี้ในขณะที่ฝึก NN โดยการแทนที่เซลล์cntk.metrics.classification_errorพร้อมโทร cntk.losses.fmeasure เมื่อกำหนดฟังก์ชันโรงงานเกณฑ์ดังนี้ -

import cntk
@cntk.Function
def criterion_factory(output, target):
   loss = cntk.losses.cross_entropy_with_softmax(output, target)
metric = cntk.losses.fmeasure(output, target)
   return loss, metric

หลังจากใช้ฟังก์ชัน cntk.losses.fmeasure เราจะได้ผลลัพธ์ที่แตกต่างกันสำหรับไฟล์ loss.test เรียกวิธีการดังต่อไปนี้ -

loss.test([X_test, y_test])

เอาต์พุต

{'metric': 0.83101488749, 'samples': 30}