ปัญหาหน่วยความจำ LabelEncoder() ของ scikit-learn

ฉันมี train pandas df ที่มี 20 ล้านแถวและ test pandas df ที่มีประมาณ 10 ล้านแถว

มีคอลัมน์ใน df ทั้งสองคอลัมน์ที่ฉันต้องการใช้ LabelEncoder() แต่ฉันได้รับ Memory Error บนแล็ปท็อปของฉันและแม้แต่ในอินสแตนซ์ AWS RAM ขนาด 64 กิ๊ก

มีวิธีที่ฉันสามารถจัดการกับสิ่งนี้เป็นชิ้น ๆ โดยไม่สูญเสียการแมปหรือไม่?

นี่คือรหัสที่ฉันใช้:

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()

for col in cols_to_encode:
    le.fit(list(train[col])+list(test[col]))
    train[col] = le.transform(train[col])
    test[col] = le.transform(test[col])

ฉันสุ่มตัวอย่าง 500,000 แถวจากแต่ละแถวและสามารถเรียกใช้โค้ดได้โดยไม่มีข้อผิดพลาด ดังนั้นฉันจึงรู้ว่าไม่ใช่ข้อผิดพลาดทางไวยากรณ์หรืออะไรสักอย่าง

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.


person Kevin Zakka    schedule 20.07.2016    source แหล่งที่มา


คำตอบ (1)


ฉันยังไม่เคยใช้ LabelEncoder มาก่อน แต่จากการทำงานร่วมกับ Sklearn ฉันรู้ว่ามีตัวเลือกต่างๆ ที่สามารถช่วยทำให้เป็นคู่ขนานได้ คุณได้ลองพยายามทำให้งานนี้ขนานกันหรือไม่? ไม่ว่าจะใช้พารามิเตอร์เช่น n_jobs ซึ่งมีตัวแยกประเภท sklearn จำนวนมาก หรือแม้แต่ไลบรารีมัลติโพรเซสซิงของ python

person danialcala    schedule 20.07.2016
comment
สิ่งแรกที่ฉันทำคือตรวจสอบพารามิเตอร์ n_jobs แต่ดูเหมือนว่าจะไม่มีอยู่ในฟังก์ชันนี้ โดยปกติ n_jobs ใช้สำหรับตัวแยกประเภท ไม่ใช่ฟังก์ชันตัวช่วย - person Kevin Zakka; 20.07.2016