เราควรใช้การทำให้เป็นมาตรฐานเพื่อทดสอบข้อมูลด้วยหรือไม่


17

ฉันกำลังทำโครงการเกี่ยวกับปัญหาการระบุผู้แต่ง ฉันใช้การปรับมาตรฐาน tf-idf เพื่อฝึกอบรมข้อมูลแล้วฝึก svm กับข้อมูลนั้น

ตอนนี้เมื่อใช้ตัวจําแนกฉันควรทำให้ข้อมูลทดสอบเป็นปกติ ฉันรู้สึกว่าเป้าหมายพื้นฐานของการทำให้เป็นมาตรฐานคือการทำให้การเรียนรู้เพิ่มน้ำหนักให้กับคุณสมบัติที่สำคัญกว่าขณะเรียนรู้ ดังนั้นเมื่อมีการฝึกอบรมแล้วจะรู้ว่าคุณสมบัติใดมีความสำคัญซึ่งไม่ได้ ดังนั้นจำเป็นที่จะต้องใช้การทำให้เป็นมาตรฐานเพื่อทดสอบข้อมูลด้วยหรือไม่?

ฉันยังใหม่กับสาขานี้ ดังนั้นโปรดเพิกเฉยหากคำถามนั้นโง่?


4
ข้อมูลการทดสอบของคุณควรอยู่ในระดับเดียวกับข้อมูลการฝึกอบรมของคุณ
Jon

คำตอบ:


37

ใช่คุณต้องใช้การปรับสภาพให้เป็นมาตรฐานเพื่อทดสอบข้อมูลหากอัลกอริทึมของคุณทำงานกับหรือต้องการข้อมูลการฝึกอบรมที่ได้มาตรฐาน *

นั่นเป็นเพราะแบบจำลองของคุณทำงานบนการแทนค่าที่กำหนดโดยเวกเตอร์อินพุตของมัน มาตราส่วนของตัวเลขเหล่านั้นเป็นส่วนหนึ่งของการแทนค่า มันเหมือนกับการแปลงระหว่างฟุตและเมตร . . รูปแบบหรือสูตรจะทำงานกับหน่วยประเภทเดียวโดยปกติ

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

ใน Python และ SKLearn คุณอาจทำให้ค่าอินพุต / X ของคุณเป็นปกติโดยใช้Standard Scalerดังนี้:

scaler = StandardScaler()
train_X = scaler.fit_transform( train_X )
test_X = scaler.transform( test_X )

โปรดสังเกตว่าการแปลงของการtrain_Xใช้ฟังก์ชั่นที่เหมาะกับ (ตัวเลข params) แล้วปกติ ในขณะที่การtest_Xแปลงเพิ่งแปลงใช้ params เดียวกับที่ได้เรียนรู้จากข้อมูลรถไฟ

การนอร์มัลไลซ์ tf-idf ที่คุณใช้ควรทำงานในทำนองเดียวกันเนื่องจากมันเรียนรู้พารามิเตอร์บางอย่างจากชุดข้อมูลโดยรวม (ความถี่ของคำในเอกสารทั้งหมด) รวมถึงการใช้อัตราส่วนที่พบในแต่ละเอกสาร


* อัลกอริทึมบางอย่าง (เช่นที่ยึดตามต้นไม้การตัดสินใจ) ไม่จำเป็นต้องใช้อินพุตปกติและสามารถรับมือกับคุณลักษณะที่มีสเกลตามธรรมชาติแตกต่างกัน


+1 สำหรับการอธิบายว่าพารามิเตอร์การทำให้เป็นมาตรฐานสำหรับการทดสอบควรเหมือนกับพารามิเตอร์ที่กำหนดจากการฝึกอบรม ฉันเข้าใจว่าตรรกะนี้ครอบคลุมถึงชุดการตรวจสอบความถูกต้องเช่นกัน
Greenstick

@Greenstick: ใช่แน่นอนมันขยายไปถึงการรักษาข้อมูลทั้งหมดที่ป้อนเข้าสู่โมเดล รวมถึงข้อมูลใหม่ถ้าใช้โมเดลเพื่ออนุมานในการผลิต ฉันคิดว่าคำตอบนั้นนานพอที่จะไม่ครอบคลุมทั้งหมดและจุดที่คุณแยกออกจากข้อมูลการตรวจสอบจะแตกต่างกันมาก (มีหลายรุ่นที่มีขั้นตอนการฝึกอบรมนี้) ดังนั้นจึงไม่สามารถแสดงตัวอย่างรหัสได้
Neil Slater

2
คุณควรปรับขนาด (fit_transform) ข้อมูลการทดสอบด้วยข้อมูลการฝึกอบรมหรือไม่? หรือแยกกันโดยใช้สเกลเดียวกัน (scaler.transform)
Bob Ebert

2
@BobEbert: คุณสามารถทำได้ ในทางเทคนิคคุณอาจรั่วไหลข้อมูลจำนวนเล็กน้อยจากการทดสอบไปยังการฝึกอบรมหากคุณใส่ scaler ให้เข้ากับชุดข้อมูลที่รวมกันดังนั้นเวอร์ชั่น "เป็นทางการ" อาจจะพอดีกับ scaler กับข้อมูลการฝึกอบรมเท่านั้น ชุดข้อมูลหลังจากนั้น อย่างไรก็ตามการรั่วไหลนี้น้อยมากและฉันไม่เคยเห็นมันทำให้เกิดปัญหาในทางปฏิบัติถ้าคุณใส่ scaler ให้พอดีกับข้อมูลทั้งหมดที่คุณมี
Neil Slater

ขอบคุณสำหรับการยืนยันสมมติฐานของฉันที่ฉันต้องใช้การฝึกอบรมที่ได้รับการปรับขนาดสำหรับข้อมูลการทดสอบ แต่คุณสามารถให้ลิงค์พร้อมคำอธิบายหลังสิ่งนี้ได้ไหม แก้ไข: ไม่เป็นไรคำอธิบายอยู่ที่นี่: datascience.stackexchange.com/questions/58597/…
crazysantaclaus

6

แน่นอนคุณควรทำให้ข้อมูลของคุณเป็นปกติ คุณทำให้ข้อมูลเป็นปกติสำหรับเป้าหมายต่อไปนี้:

  • สำหรับการมีคุณสมบัติที่แตกต่างในระดับเดียวกันซึ่งเป็นกระบวนการเร่งการเรียนรู้

  • สำหรับการดูแลคุณสมบัติที่แตกต่างอย่างเป็นธรรมโดยไม่ต้องดูแลเครื่องชั่ง

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

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