ในบทความนี้ เราจะเรียนรู้เกี่ยวกับวิธีจัดการกับตัวแปรหลายหมวดหมู่โดยใช้เทคนิค Feature Engineering One Hot Encoding
แต่ก่อนที่จะดำเนินการต่อ เรามาคุยกันสั้นๆ เกี่ยวกับ Feature engineering และ One Hot Encoding
คุณสมบัติวิศวกรรม
ดังนั้น Feature Engineering จึงเป็นกระบวนการแยกฟีเจอร์จากข้อมูลดิบโดยใช้ความรู้โดเมนของปัญหา คุณสมบัติเหล่านี้สามารถใช้เพื่อปรับปรุงประสิทธิภาพของอัลกอริทึมการเรียนรู้ของเครื่องและหากประสิทธิภาพเพิ่มขึ้นก็จะให้ความแม่นยำที่ดีที่สุด เราอาจกล่าวได้ว่าวิศวกรรมคุณลักษณะนั้นเหมือนกับการเรียนรู้ของเครื่องประยุกต์ วิศวกรรมฟีเจอร์เป็นศิลปะที่สำคัญที่สุดในการเรียนรู้ของเครื่อง ซึ่งสร้างความแตกต่างอย่างมากระหว่างโมเดลที่ดีและโมเดลที่ไม่ดี นี่เป็นขั้นตอนที่สามในวงจรชีวิตของโครงการวิทยาศาสตร์ข้อมูล
แนวคิดเรื่องความโปร่งใสสำหรับโมเดลแมชชีนเลิร์นนิงเป็นสิ่งที่ซับซ้อน เนื่องจากโมเดลต่างๆ มักจะต้องการแนวทางที่แตกต่างกันสำหรับข้อมูลประเภทต่างๆ เช่น:-
- ข้อมูลต่อเนื่อง
- คุณสมบัติหมวดหมู่
- ค่าที่ขาดหายไป
- normalization
- วันที่และเวลา
แต่ที่นี่เราจะพูดถึงเฉพาะคุณสมบัติตามหมวดหมู่เท่านั้น คุณสมบัติตามหมวดหมู่คือคุณสมบัติที่ประเภทข้อมูลเป็นประเภทวัตถุ ค่าของจุดข้อมูลในคุณลักษณะเชิงหมวดหมู่ใดๆ ไม่ได้อยู่ในรูปแบบตัวเลข แต่จะอยู่ในรูปแบบวัตถุ
มีเทคนิคมากมายในการจัดการตัวแปรเชิงหมวดหมู่ บางส่วนคือ:
- การเข้ารหัสฉลากหรือการเข้ารหัสลำดับ
- การเข้ารหัสที่ร้อนแรง
- การเข้ารหัสจำลอง
- การเข้ารหัสเอฟเฟกต์
- การเข้ารหัสไบนารี
- การเข้ารหัสบาเซิล
- การเข้ารหัสแฮช
- การเข้ารหัสเป้าหมาย
ดังนั้น ในที่นี้เราจะจัดการคุณสมบัติตามหมวดหมู่โดย One Hot Encoding ดังนั้นก่อนอื่นเราจะหารือเกี่ยวกับ One Hot Encoding
หนึ่งการเข้ารหัสร้อน
เราทราบดีว่าตัวแปรหมวดหมู่มีค่าฉลากมากกว่าค่าตัวเลข จำนวนของค่าที่เป็นไปได้มักจำกัดไว้ที่ชุดคงที่ ตัวแปรหมวดหมู่มักเรียกว่าเล็กน้อย อัลกอริทึมการเรียนรู้ของเครื่องจำนวนมากไม่สามารถทำงานกับข้อมูลฉลากได้โดยตรง พวกเขาต้องการให้ตัวแปรอินพุตและตัวแปรเอาต์พุตทั้งหมดเป็นตัวเลข
ซึ่งหมายความว่าข้อมูลหมวดหมู่จะต้องแปลงเป็นรูปแบบตัวเลข หากตัวแปรหมวดหมู่เป็นตัวแปรเอาต์พุต คุณอาจต้องการแปลงการคาดคะเนโดยโมเดลกลับเป็นรูปแบบหมวดหมู่เพื่อนำเสนอหรือใช้ในแอปพลิเคชันบางอย่าง
เช่น ข้อมูลเกี่ยวกับเพศอยู่ในรูปของ 'ชาย' และ 'หญิง'.
แต่ถ้าเราใช้การเข้ารหัสแบบ one-hot การเข้ารหัสและปล่อยให้โมเดลจัดลำดับตามธรรมชาติระหว่างหมวดหมู่อาจส่งผลให้ประสิทธิภาพต่ำหรือผลลัพธ์ที่ไม่คาดคิด
การเข้ารหัสแบบร้อนครั้งเดียวสามารถนำไปใช้กับการแสดงจำนวนเต็มได้ นี่คือที่ที่ตัวแปรเข้ารหัสจำนวนเต็มถูกลบออก และเพิ่มตัวแปรไบนารีใหม่สำหรับแต่ละค่าจำนวนเต็มที่ไม่ซ้ำกัน
ตัวอย่างเช่น เราเข้ารหัสตัวแปรสี
สีแดง | สีฟ้า |
0 | 1 |
1 | 0 |
0 | 1 |
ตอนนี้เราจะเริ่มการเดินทางของเรา ในขั้นแรก เราจะนำชุดข้อมูลของการทำนายราคาบ้าน
ชุด
ในที่นี้เราจะใช้ชุดข้อมูลของ house_price ที่ใช้ในการทำนายราคาบ้านตามขนาดของพื้นที่
หากคุณต้องการดาวน์โหลดชุดข้อมูลการคาดการณ์ราคาบ้าน ให้คลิก โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม.
การนำเข้าโมดูล
ตอนนี้เราต้องนำเข้าโมดูลที่สำคัญจาก python ซึ่งจะใช้สำหรับการเข้ารหัสแบบ one-hot
# นำเข้าแพนด้า นำเข้าแพนด้าเป็น pd # นำเข้า numpy นำเข้า numpy เป็น np # นำเข้า OneHotEncoder จาก sklearn.preprocessing นำเข้า OneHotEncoder()
ที่นี่ เราใช้ pandas ซึ่งใช้สำหรับการวิเคราะห์ข้อมูล, NumPyused สำหรับอาร์เรย์ n มิติ และจาก sklearn เราจะใช้ One Hot Encoder คลาสที่สำคัญสำหรับการเข้ารหัสตามหมวดหมู่
ตอนนี้เราต้องอ่านข้อมูลนี้โดยใช้ Python
การอ่านชุดข้อมูล
โดยทั่วไป ชุดข้อมูลจะอยู่ในรูปแบบ CSV และชุดข้อมูลที่เราใช้จะอยู่ในรูปแบบ CSV ด้วย สำหรับการอ่านไฟล์ CSV เราจะใช้ฟังก์ชัน pandas read_csv() ดูด้านล่าง:
# ชุดข้อมูลการอ่าน df = pd.read_csv('house_price.csv') df.head()
เอาต์พุต: -
แต่เราต้องใช้ตัวแปรที่เป็นหมวดหมู่สำหรับตัวเข้ารหัสแบบร้อนเพียงตัวเดียว และเราจะพยายามอธิบายด้วยตัวแปรที่เป็นหมวดหมู่เพื่อให้เข้าใจได้ง่ายเท่านั้น
สำหรับการแบ่งตัวแปรหมวดหมู่จากข้อมูลเราต้องตรวจสอบว่าคุณสมบัติมีค่าหมวดหมู่กี่ค่า
การตรวจสอบค่าหมวดหมู่
สำหรับการตรวจสอบค่าเราใช้ฟังก์ชัน pandas select_dtypes ซึ่งใช้สำหรับเลือกประเภทข้อมูลของตัวแปร
# การตรวจสอบคุณสมบัติ cat = df.select_dtypes(include='O').keys() # แสดงตัวแปร cat
เอาต์พุต: -
ตอนนี้เราต้องทิ้งคอลัมน์ตัวเลขเหล่านั้นจากชุดข้อมูลและเราจะใช้ตัวแปรหมวดหมู่นี้สำหรับการใช้งานของเรา เราใช้เพียง 3-4 คอลัมน์หมวดหมู่จากชุดข้อมูลเพื่อใช้การเข้ารหัสแบบร้อนครั้งเดียว
การสร้าง DataFrame ใหม่
ตอนนี้สำหรับการใช้ตัวแปรหมวดหมู่ เราจะสร้าง dataframe ใหม่ของคอลัมน์หมวดหมู่ที่เลือก
# สร้างคอลัมน์การตั้งค่า df # ใหม่ เราใช้ new_df = pd.read_csv('house_price.csv',usecols=['ละแวกบ้าน','ภายนอก1','ภายนอก2nd']) new_df.head()
เอาต์พุต: -
ตอนนี้เราต้องค้นหาว่ามีกี่หมวดหมู่ที่ไม่ซ้ำกันในแต่ละคอลัมน์หมวดหมู่
การหาค่าที่ไม่ซ้ำ
สำหรับการค้นหาค่าเฉพาะเราจะใช้ฟังก์ชัน pandas unique()
# ค่าที่ไม่ซ้ำกันในแต่ละคอลัมน์สำหรับ x ใน new_df.columns: #prinfting ค่าที่ไม่ซ้ำกัน print(x ,':', len(new_df[x].unique()))
เอาต์พุต: -
บริเวณใกล้เคียง : 25 |
ภายนอก1st : 15 |
ภายนอกที่ 2 : 16 |
ตอนนี้เราจะใช้เทคนิคของเราเพื่อใช้การเข้ารหัสแบบร้อนครั้งเดียวกับตัวแปรหลายหมวดหมู่
เทคนิคสำหรับตัวแปรหลายหมวดหมู่
เทคนิคคือเราจะจำกัดการเข้ารหัสแบบ one-hot ไว้ที่ 10 ป้ายกำกับที่พบบ่อยที่สุดของตัวแปร ซึ่งหมายความว่าเราจะสร้างตัวแปรไบนารีหนึ่งตัวสำหรับแต่ละป้ายกำกับที่พบบ่อยที่สุด 10 ป้ายเท่านั้น ซึ่งเทียบเท่ากับการจัดกลุ่มป้ายกำกับอื่นทั้งหมดภายใต้หมวดหมู่ใหม่ ซึ่งในกรณีนี้จะถูกละทิ้ง ดังนั้น ตัวแปรจำลองใหม่ 10 ตัวแปรบ่งชี้ว่าหนึ่งใน 10 ป้ายกำกับที่พบบ่อยที่สุดมีอยู่หรือไม่ 1 หรือไม่ 0 เพื่อการสังเกตโดยเฉพาะ
ตัวแปรที่พบบ่อยที่สุด
ที่นี่เราจะเลือก 20 ตัวแปรที่พบบ่อยที่สุด
สมมติว่าเราใช้ตัวแปรเด็ดขาดหนึ่งตัว ที่อยู่ไกล้เคียง.
# ค้นหาหมวดหมู่ 20 อันดับแรก new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)
เอาท์พุท:
เมื่อคุณเห็นภาพที่ส่งออกนี้ คุณจะสังเกตเห็นว่า ชื่อ ป้ายกำกับกำลังทำซ้ำ 225 ครั้งในคอลัมน์ Neighborhood และเราลงไป ตัวเลขนี้กำลังลดลง
ดังนั้นเราจึงนำผลลัพธ์ 10 อันดับแรกจากด้านบน และเราแปลงผลลัพธ์ 10 อันดับแรกนี้เป็นการเข้ารหัสแบบร้อนครั้งเดียว และป้ายกำกับด้านซ้ายกลายเป็นศูนย์
เอาต์พุต: -
รายการตัวแปรตามหมวดหมู่ที่พบบ่อยที่สุด
# สร้างรายการด้วยตัวแปร 10 อันดับแรก top_10 = [x สำหรับ x ใน new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10
เอาต์พุต: -
['ชื่อ',
'CollgCr',
'เมืองเก่า',
'เอ็ดเวิร์ด',
'ซัมเมอร์ส',
'กิลเบิร์ต'
'NridgHt',
'ซอว์เยอร์',
'NWA',
'ซอว์เยอร์ว']
มีป้ายกำกับหมวดหมู่ 10 อันดับแรกในคอลัมน์ Neighborhood
สร้างไบนารี่
ตอนนี้เราต้องสร้างตัวแปรไบนารี 10 ตัวของป้ายกำกับ top_10:
# ทำไบนารีของป้ายกำกับ
สำหรับป้ายกำกับใน top_10:
new_df = np.where(new_df['Neighborhood']==label,1,0)
new_df[['ย่าน']+top_10]
เอาต์พุต: -
ชื่อ | CollgCr | เมืองเก่า | เอ็ดเวิร์ด | ซัมเมอร์ส | กิลเบิร์ | NridgHt | คนเลื่อยไม้ | กศน | ซอว์เยอร์ว | ||
---|---|---|---|---|---|---|---|---|---|---|---|
0 | CollgCr | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | วีนเกอร์ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | CollgCr | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
3 | ครอว์ฟอร์ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
4 | ไม่มีริดจ์ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
5 | มิทเชล | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
6 | ซัมเมอร์ส | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
7 | กศน | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
8 | เมืองเก่า | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
9 | บริคไซด์ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
10 | คนเลื่อยไม้ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
11 | NridgHt | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
คุณสามารถดูวิธีการแปลงป้ายกำกับ top_10 เป็นรูปแบบไบนารี
ลองยกตัวอย่างดูในตารางที่ 1 ดัชนี วีนเกอร์ ซึ่งไม่ได้อยู่ในป้ายกำกับหมวดหมู่ top_10 ของเรา ดังนั้นจะส่งผลให้ 0 คอลัมน์ทั้งหมด
ตอนนี้เราจะทำกับตัวแปรตามหมวดหมู่ทั้งหมดที่เราเลือกไว้ด้านบน
ตัวแปรที่เลือกทั้งหมดใน OneHotEncoding
# สำหรับตัวแปรหมวดหมู่ทั้งหมดที่เราเลือก def top_x(df2,variable,top_x_labels): สำหรับ label ใน top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # read ข้อมูลอีกครั้ง data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Nighborhood เป็น 10 หมวดหมู่ที่พบบ่อยที่สุด top_x(data, 'ย่าน',top_10) # แสดงข้อมูล data.head()
ผลลัพธ์:-
ตอนนี้ เราใช้การเข้ารหัสแบบ one-hot กับตัวแปรหลายหมวดหมู่ทั้งหมด
ตอนนี้เราจะเห็นข้อดีและข้อเสียของ One Hot Encoding สำหรับหลายตัวแปร
ข้อดี
- ตรงไปตรงมาในการดำเนินการ
- ไม่ต้องใช้เวลามากในการสำรวจตัวแปร
- ไม่ขยายพื้นที่ฟีเจอร์อย่างหนาแน่น
ข้อเสีย
- ไม่เพิ่มข้อมูลใด ๆ ที่อาจทำให้ตัวแปรคาดการณ์ได้มากขึ้น
- อย่าเก็บข้อมูลของตัวแปรที่ถูกละเว้น
หมายเหตุสิ้นสุด
ดังนั้น สรุปคือ เราเรียนรู้วิธีจัดการตัวแปรหลายหมวดหมู่ หากคุณเจอปัญหานี้ นี่เป็นงานที่ยากมาก ขอบคุณที่อ่านบทความนี้
เชื่อมต่อกับฉันใน Linkedin: โปรไฟล์
อ่านบทความอื่น ๆ ของฉัน: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/
ขอบคุณครับ😎
สื่อที่แสดงในบทความนี้ไม่ใช่ของ Analytics Vidhya และใช้ดุลยพินิจของผู้เขียน
คุณยังสามารถอ่านบทความนี้ในแอพมือถือของเรา
บทความที่เกี่ยวข้อง
- '
- อัลกอริทึม
- ทั้งหมด
- การอนุญาต
- การวิเคราะห์
- การวิเคราะห์
- app
- Apple
- การใช้งาน
- AREA
- ศิลปะ
- บทความ
- บทความ
- ที่ดีที่สุด
- การตรวจสอบ
- คอลัมน์
- การสร้าง
- ข้อมูล
- การวิเคราะห์ข้อมูล
- วิทยาศาสตร์ข้อมูล
- หล่น
- ปรับตัวลดลง
- ชั้นเยี่ยม
- เหตุการณ์
- แสดง
- ลักษณะ
- คุณสมบัติ
- ชื่อจริง
- ฟอร์ม
- รูป
- ฟังก์ชัน
- เพศ
- ดี
- Google Play
- การจัดการ
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- บ้าน
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- ทำอย่างไร
- HTTPS
- ใหญ่
- ภาพ
- การนำเข้า
- เพิ่ม
- ดัชนี
- ข้อมูล
- IT
- ความรู้
- ป้ายกำกับ
- เรียนรู้
- การเรียนรู้
- ถูก จำกัด
- รายการ
- เรียนรู้เครื่อง
- ภาพบรรยากาศ
- ตอบสนอง
- app มือถือ
- แบบ
- อื่นๆ
- การปฏิบัติ
- น่าสงสาร
- คำทำนาย
- การคาดการณ์
- นำเสนอ
- ราคา
- การทำนายราคา
- โครงการ
- หลาม
- ดิบ
- ข้อมูลดิบ
- การอ่าน
- ผลสอบ
- วิทยาศาสตร์
- เลือก
- ชุด
- การตั้งค่า
- ขนาด
- So
- ช่องว่าง
- เริ่มต้น
- เวลา
- ด้านบน
- ความโปร่งใส
- us
- ความคุ้มค่า
- X
- เป็นศูนย์