ฉันพยายามที่จะเข้าใจว่าฉันสามารถเข้ารหัสตัวแปรเด็ดขาดได้อย่างไรโดยใช้การประมาณความน่าจะเป็น แต่ก็ประสบความสำเร็จเพียงเล็กน้อย
ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.
ฉันพยายามที่จะเข้าใจว่าฉันสามารถเข้ารหัสตัวแปรเด็ดขาดได้อย่างไรโดยใช้การประมาณความน่าจะเป็น แต่ก็ประสบความสำเร็จเพียงเล็กน้อย
ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.
คำตอบ:
ฉันกำลังเรียนรู้หัวข้อนี้ด้วยและนี่คือสิ่งที่ฉันพบ:
การเข้ารหัสประเภทนี้เรียกว่าการเข้ารหัสโอกาส , การเข้ารหัสผลกระทบหรือการเข้ารหัสเป้าหมาย
แนวคิดกำลังเข้ารหัสตัวแปรเด็ดขาดของคุณด้วยการใช้ตัวแปรเป้าหมาย (ต่อเนื่องหรือจัดหมวดหมู่ขึ้นอยู่กับงาน) ตัวอย่างเช่นหากคุณมีงานการถดถอยคุณสามารถเข้ารหัสตัวแปรเด็ดขาดของคุณด้วยค่าเฉลี่ยของเป้าหมาย สำหรับทุกหมวดหมู่คุณคำนวณค่าเฉลี่ยที่เกี่ยวข้องของเป้าหมาย (ในหมวดหมู่นี้) และแทนที่ค่าของหมวดหมู่ด้วยค่าเฉลี่ยนี้
หากคุณมีงานการจัดหมวดหมู่คุณจะคำนวณความถี่สัมพัทธ์ของเป้าหมายด้วยความเคารพต่อค่าหมวดหมู่ทั้งหมด
จากมุมมองทางคณิตศาสตร์การเข้ารหัสนี้หมายถึงความน่าจะเป็นของเป้าหมายโดยมีเงื่อนไขในแต่ละหมวดหมู่ค่า
หากคุณทำแบบง่ายๆวิธีที่ฉันอธิบายไว้ข้างต้นคุณอาจได้รับการประเมินแบบเอนเอียง นั่นเป็นเหตุผลที่ในชุมชน Kaggle พวกเขามักจะใช้การตรวจสอบข้าม 2 ระดับ อ่านความคิดเห็นนี้โดย raddar ที่นี่ โน๊ตบุ๊คที่สอดคล้องกันคือที่นี่
คำพูด:
มันใช้ค่าเฉลี่ยของ y แต่ไม่ได้หมายถึงธรรมดา แต่ในการตรวจสอบข้ามในทางตรวจสอบข้าม;
สมมติว่าเรามีการตรวจสอบข้าม 20 เท่า เราต้องการวิธีการคำนวณค่าเฉลี่ยของคุณลักษณะสำหรับ # 1 fold โดยใช้ข้อมูลจาก # 2- # 20 folds เท่านั้น
ดังนั้นคุณใช้ # 2- # 20 เท่าสร้างการตรวจสอบความถูกต้องข้ามอีกชุดไว้ข้างใน (ฉันทำ 10 เท่า) คำนวณหาค่าเฉลี่ยของทุกครั้งที่ลาออกหนึ่งครั้ง (ในที่สุดคุณจะได้ 10 วิธี) คุณเฉลี่ย 10 ค่าเฉลี่ยและใช้เวกเตอร์นั้นสำหรับชุดการตรวจสอบ # 1 หลักของคุณ ทำซ้ำสำหรับส่วนที่เหลืออีก 19 เท่า
มันยากที่จะอธิบายยากที่จะเข้าใจและเป็นผู้เชี่ยวชาญ :) แต่ถ้าทำอย่างถูกต้องมันจะก่อให้เกิดประโยชน์มากมาย :)
ในห้องสมุด R vtreatพวกเขามีการใช้การเข้ารหัสผลกระทบ ดูโพสต์นี้
ในไลบรารี CatBoostมีตัวเลือกมากมายสำหรับการเข้ารหัสตัวแปรเด็ดขาดรวมถึงการเข้ารหัสเป้าหมาย
ยังไม่มีการเข้ารหัสดังกล่าวใน sklearn
การเข้ารหัสเป้าหมายมีให้บริการใน sklearn ผ่านแพ็คเกจ category_encoders
เครื่องเข้ารหัสเป้าหมาย
คลาส category_encoders.target_encoder.TargetEncoder (verbose = 0, cols = ไม่มี, drop_invariant = False, return_df = จริง, impute_missing = True, handle_unknown = 'impute', min_samples_leaf = 1, การปรับให้เรียบ = 1
กำหนดเป้าหมายการเข้ารหัสสำหรับคุณสมบัติที่เป็นหมวดหมู่ ขึ้นอยู่กับวิธีการออกครั้งเดียว
ตามที่ระบุไว้โดย josh ในความคิดเห็นข้างต้น
การเข้ารหัสโอกาสยังคงไม่สามารถใช้ได้ใน scikit เรียนรู้ คุณสามารถทำได้โดยการสร้างพจนานุกรมแล้วทำหน้าที่แทนที่
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]