ลักษณนามพร้อมความแม่นยำที่ปรับได้และการเรียกคืน


11

ฉันกำลังทำงานกับปัญหาการจำแนกเลขฐานสองซึ่งมันสำคัญมากกว่าที่จะไม่มีผลบวกปลอม ข้อผิดพลาดเชิงลบค่อนข้างมากก็โอเค ฉันใช้ตัวแยกประเภทจำนวนมากใน sklearn แต่ฉันคิดว่าไม่มีตัวใดที่สามารถปรับความแม่นยำในการจำคืนได้อย่างชัดเจน (พวกมันให้ผลลัพธ์ที่ดี แต่ไม่สามารถปรับได้)

ตัวแยกประเภทใดที่สามารถปรับความแม่นยำ / เรียกคืนได้ มีวิธีใดบ้างที่จะส่งผลต่อความแม่นยำ / การเรียกคืนการแลกเปลี่ยนกับตัวแยกประเภทมาตรฐานเช่น Random Forest หรือ AdaBoost?

คำตอบ:


12

ตัวแยกประเภทของ scikit-Learn เกือบทั้งหมดสามารถให้ค่าการตัดสินใจ (ผ่านdecision_functionหรือpredict_proba)

ขึ้นอยู่กับค่าการตัดสินใจมันตรงไปตรงมาในการคำนวณเส้นโค้งความแม่นยำและ / หรือ ROC scikit เรียนรู้ฟังก์ชั่นให้ผู้ที่อยู่ในของตัวชี้วัด submodule

ตัวอย่างเล็กน้อยสมมติว่าคุณมีdataและlabelsมีเนื้อหาที่เหมาะสม:

import sklearn.svm
import sklearn.metrics
from matplotlib import pyplot as plt

clf = sklearn.svm.LinearSVC().fit(data, labels)
decision_values = clf.decision_function(data)

precision, recall, thresholds = sklearn.metrics.precision_recall_curve(labels, decision_values)

plt.plot(recall, precision)
plt.show()

สมบูรณ์แบบขอบคุณ! ไม่แน่ใจว่าฉันพลาดไปได้อย่างไร :)
อเล็กซ์ฉัน

ดูเหมือนว่าprecision_recall_curveคำนวณ F1 ทั้งหมด จะคำนวณค่าลบได้อย่างไร
มิ ธ ริล

6

ฉันเพิ่งแก้ไขปัญหานี้ด้วยตัวเองก่อนที่จะชนเข้ากับคำถามนี้ดังนั้นฉันจึงตัดสินใจแบ่งปันโซลูชันของฉัน

มันใช้วิธีการเดียวกับที่ Marc Claesen ได้เสนอ แต่ตอบคำถาม actuall เกี่ยวกับวิธีการปรับลักษณนามเพื่อให้สูงขึ้นในการซื้อขายแกนที่แม่นยำจากการเรียกคืน

X_test เป็นข้อมูลและ y_test เป็นป้ายกำกับที่แท้จริง ตัวจําแนกควรจะติดตั้งไว้แล้ว

y_score = clf.decision_function(X_test)

prcsn,rcl,thrshld=precision_recall_curve(y_test,y_score)

min_prcsn=0.25 # here is your precision lower bound e.g. 25%
min_thrshld=min([thrshld[i] for i in range(len(thrshld)) if prcsn[i]>min_prcsn])

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

y_pred_adjusted=[1 if y_s>min_thrshld else 0 for y_s in y_score]

จะเป็นการดีหากได้ยินความคิดเห็นของคุณเกี่ยวกับสูตรการปรับปรุง


1

นี่คือฟังก์ชั่น

http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier.predict_proba

ซึ่งสร้างความน่าจะเป็นระดับ จากนั้นใช้เมตริกต่างๆเพื่อปรับเปลี่ยนค่า P ซึ่งคุณใช้ในการตัดสินใจโดยทำตามรหัสหลอก

ถ้า p (y)> P ดังนั้น y = 1 อื่น y = 0 endif

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.