โดยทั่วไปประสิทธิภาพของตัวแยกประเภทจะถูกเปรียบเทียบโดยใช้ความแม่นยำนี่เป็นการวัดจำนวนอินสแตนซ์ที่จำแนกอย่างถูกต้องหารด้วยจำนวนอินสแตนซ์ทั้งหมด อย่างไรก็ตามจากข้อมูลการฝึกอบรมเราสามารถประเมินข้อผิดพลาดที่คาดหวังจากลักษณนามของเราได้ดีขึ้นเมื่อเราใช้เทคนิคการเรียนรู้ทั้งมวลหรือการบรรจุถุง
เกิดข้อผิดพลาดนอกถุง
ตัวชี้วัดนี้คือความแม่นยำของตัวอย่างโดยใช้ต้นไม้ทั้งหมดในชุดสุ่มป่าซึ่งถูกละเว้นในระหว่างการฝึก ดังนั้นมันจึงทำหน้าที่เป็นตัวอย่างการทดสอบกึ่ง คุณสามารถทราบได้ว่าตัวจําแนกของคุณสามารถพูดคุยได้ดีเพียงใดโดยใช้การวัดนี้xผม
ในการติดตั้ง oob ใน sklearn คุณจะต้องระบุเมื่อสร้างออบเจกต์ป่าสุ่มของคุณเป็น
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
จากนั้นเราสามารถฝึกฝนโมเดล
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
คะแนน: 0.979921928817
ตามที่คาดหวังความถูกต้องของแบบจำลองเมื่อประเมินชุดฝึกอบรมจะสูงมาก อย่างไรก็ตามสิ่งนี้ไม่มีความหมายเพราะคุณสามารถ overfitting ข้อมูลของคุณได้อย่างดีและทำให้แบบจำลองของคุณเป็นขยะ อย่างไรก็ตามเราสามารถใช้คะแนนนอกถุงเป็น
print(forest.oob_score_)
0.86453272101
นี่คือความแม่นยำในขณะที่ประเมินอินสแตนซ์ของเราในชุดการฝึกอบรมโดยใช้เฉพาะต้นไม้ที่ถูกตัดออก ทีนี้ลองคำนวณคะแนนในชุดการทดสอบ
print('Score: ', forest.score(X_test, y_test))
คะแนน: 0.86517733935
เราเห็นว่าความแม่นยำที่วัดได้จาก oob นั้นคล้ายคลึงกับที่ได้รับจากชุดทดสอบ ดังนั้นจึงผ่านทฤษฎีที่ว่าความแม่นยำของ oob นั้นเป็นตัวชี้วัดที่ดีกว่าซึ่งใช้ในการประเมินประสิทธิภาพของแบบจำลองของคุณแทนที่จะเป็นเพียงแค่คะแนน นี่เป็นผลสืบเนื่องมาจากรูปแบบการบรรจุถุงและไม่สามารถทำได้กับตัวแยกประเภทอื่น ๆ
การคำนวณ oob โดยใช้ตัวชี้วัดที่แตกต่างกัน
ใช่คุณสามารถทำได้! อย่างไรก็ตามขึ้นอยู่กับว่าโค้ดของคุณมีโครงสร้างอย่างไร ฉันไม่แน่ใจว่าคุณจะรวม oob และ AUC ทั้งหมดเข้ากับcross_val_score
ฟังก์ชันได้อย่างไร อย่างไรก็ตามหากคุณกำลังทำการตรวจสอบไขว้ด้วยตนเองคุณสามารถทำสิ่งต่อไปนี้อัลกอริธึมป่าแบบสุ่มใน sklearn ให้ฟังก์ชันการตัดสินใจของ oob ดังนี้
print(forest.oob_decision_function_)
ชั้นเรียนนั้นสามารถรับได้โดยใช้
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
จากนั้นเราสามารถคำนวณ AUC โดยใช้สิ่งต่อไปนี้
metrics.roc_auc_score(y_train, pred_train)
.86217157846471204