StandardScaler ก่อนและหลังการแยกข้อมูล


20

เมื่อฉันกำลังอ่านเกี่ยวกับการใช้StandardScalerคำแนะนำส่วนใหญ่บอกว่าคุณควรใช้StandardScaler ก่อนที่จะแยกข้อมูลออกเป็นรถไฟ / ทดสอบ แต่เมื่อฉันตรวจสอบบางส่วนของรหัสโพสต์ออนไลน์ (โดยใช้ sklearn) มีการใช้หลักสองประการ

1- ใช้StandardScalerกับข้อมูลทั้งหมด เช่น

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_fit = sc.fit(X)
X_std = X_fit.transform(X)

หรือ

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit(X)
X = sc.transform(X)

หรือเพียงแค่

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_std = sc.fit_transform(X)

2- การใช้StandardScalerข้อมูลแยก

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

ฉันต้องการสร้างมาตรฐานข้อมูลของฉัน แต่ฉันสับสนว่าวิธีใดดีที่สุด!

คำตอบ:


25

เพื่อประโยชน์ในการป้องกันข้อมูลเกี่ยวกับการแจกจ่ายชุดทดสอบที่รั่วซึมในแบบจำลองของคุณคุณควรไปที่ตัวเลือก # 2 และใส่ scaler ในข้อมูลการฝึกอบรมของคุณเท่านั้นจากนั้นสร้างมาตรฐานทั้งชุดการฝึกอบรมและชุดทดสอบด้วย scaler นั้น โดยการปรับ scaler ในชุดข้อมูลแบบเต็มก่อนที่จะแยก (ตัวเลือก # 1) ข้อมูลเกี่ยวกับชุดทดสอบจะใช้ในการแปลงชุดการฝึกอบรมซึ่งจะถูกส่งผ่านดาวน์สตรีม

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


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

สวัสดี - ถูกต้องพอดีกับรถไฟเท่านั้น - ไม่ผ่านการตรวจสอบหรือทดสอบ
redhqs

0

วิธีการเกี่ยวกับต่อไปนี้:

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

X_train = sc.fit_transform(X_train)

X_test = sc.fit_transform (X_test)

เพราะถ้าX_test = sc.transform(X_test)มันส่งคืนข้อผิดพลาดX_testยังไม่ได้ติดตั้ง หรือฉันพลาดอะไรบางอย่างที่นี่?


2
เพียงถอดแบบจาก X_test
tsumaranaina

0

คุณไม่ควรทำการ fit_transform (X_test) กับข้อมูลการทดสอบ
ความพอดีที่เกิดขึ้นด้านบน

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

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