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}