ในกระบวนการสร้างโมเดล Machine Learning การประมวลผลข้อมูลล่วงหน้าถือเป็นขั้นตอนที่สำคัญที่สุดขั้นตอนหนึ่ง การจัดการค่าที่เป็นหมวดหมู่มีบทบาทสำคัญ
ตัวแปรหมวดหมู่คือตัวแปรที่แสดงถึงหมวดหมู่ต่างๆ เช่น เพศ สี หรือประเภทของผลิตภัณฑ์ ในการเรียนรู้ของเครื่อง อัลกอริธึมส่วนใหญ่ต้องการอินพุตที่เป็นตัวเลข ซึ่งหมายความว่าตัวแปรหมวดหมู่จะต้องถูกแปลงเป็นรูปแบบตัวเลขก่อนจึงจะสามารถใช้เป็นอินพุตของอัลกอริธึมได้ กระบวนการนี้เรียกว่าการเข้ารหัส
การใช้ SK-learn ทำให้เราสามารถเข้ารหัสตัวแปรเชิงหมวดหมู่ได้หลายวิธี มาพูดคุยกันทีละเรื่องด้วยตัวอย่างการเขียนโค้ดแบบลงมือปฏิบัติจริง
- ตัวเข้ารหัสฉลาก
การเข้ารหัสฉลากเป็นเทคนิคที่ใช้ในการเรียนรู้ของเครื่องเพื่อแปลงข้อมูลเชิงหมวดหมู่ให้เป็นรูปแบบตัวเลข นี่เป็นสิ่งจำเป็นเนื่องจากโมเดลการเรียนรู้ของเครื่องทำงานกับข้อมูลตัวเลข และตัวแปรหมวดหมู่ไม่สามารถป้อนลงในโมเดลเหล่านี้ได้โดยตรง
ตัวอย่างเช่น ลองพิจารณาชุดข้อมูลที่มีข้อมูลเกี่ยวกับผลไม้ ชุดข้อมูลประกอบด้วยคอลัมน์ชื่อ "สี" ซึ่งมี 3 หมวดหมู่ ได้แก่ "สีแดง" "สีเขียว" และ "สีเหลือง" เพื่อที่จะใช้ข้อมูลนี้ในโมเดลการเรียนรู้ของเครื่อง เราจำเป็นต้องแปลงข้อมูลหมวดหมู่ในคอลัมน์ "สี" ให้เป็นรูปแบบตัวเลข
ดังนั้น เราจะจับคู่ค่าตัวเลขกับสีเหล่านั้นโดยใช้คลาส LabelEncoder()
#Import Libraries import pandas as pd from sklearn.preprocessing import LabelEncoder #Create Dataset data_raw = pd.DataFrame({'Fruit': ['Apple', 'Banana', 'Orange','Apple', 'Kiwi', 'Grape'], 'Color': ['Red', 'Yellow', 'Orange','Red', 'Green', 'Purple']}) #Encode Color Column data = data_raw.copy() le = LabelEncoder() data['Color_Encoded'] = le.fit_transform(data['Color']) print(data)
ปัญหาคือการเข้ารหัสป้ายกำกับถือว่ามีความสัมพันธ์ตามลำดับระหว่างหมวดหมู่ ซึ่งหมายความว่าจำนวนเต็มที่กำหนดนั้นมีลำดับที่มีความหมาย อย่างไรก็ตาม นี่อาจไม่เป็นเช่นนั้นเสมอไป ซึ่งในกรณีนี้การเข้ารหัสแบบร้อนแรงอาจมีความเหมาะสมมากกว่า
2. ตัวเข้ารหัสแบบร้อนเดียว
การเข้ารหัสแบบฮอตอย่างหนึ่งเป็นอีกเทคนิคหนึ่งที่ใช้ในการเรียนรู้ของเครื่องเพื่อแปลงข้อมูลหมวดหมู่ให้เป็นรูปแบบตัวเลข มักใช้เมื่อจำนวนหมวดหมู่ในตัวแปรมีมาก หรือเมื่อไม่มีลำดับหมวดหมู่โดยธรรมชาติ
ที่นี่จะสร้างคอลัมน์ที่แตกต่างกันสำหรับแต่ละหมวดหมู่ และใช้ 0,1 เพื่อแสดงว่าหมวดหมู่นั้นเป็น True หรือ False สำหรับแถวที่ระบุ ดังนั้น สำหรับทุกจุดข้อมูล คอลัมน์ใดคอลัมน์หนึ่งจะมี '1' และคอลัมน์อื่นๆ จะมีค่า '0'
#Import Libraries from sklearn.preprocessing import OneHotEncoder #Fitting OHE data = data_raw.copy() ohe = OneHotEncoder(handle_unknown='ignore') encoding_col = ['Fruit','Color'] data_encoded = ohe.fit_transform(data[encoding_col]).toarray() data_encoded_df = pd.DataFrame(data_encoded, columns=ohe.get_feature_names(encoding_col)) data_encoded = pd.concat([data, data_encoded_df], axis=1) print(data_encoded)
ใน Label Encoder ขนาดของชุดข้อมูลจะไม่เปลี่ยนแปลง แต่ในกรณีของ OneHot Encoder ขนาดของชุดข้อมูลจะเพิ่มขึ้น ขึ้นอยู่กับจำนวนคอลัมน์หมวดหมู่และจำนวนหมวดหมู่ที่มี
3. ตัวเข้ารหัสลำดับ
ตัวเข้ารหัสลำดับเป็นเทคนิคการเข้ารหัสฟีเจอร์ประเภทหนึ่งที่ใช้ในการเรียนรู้ของเครื่องเพื่อแปลงตัวแปรหมวดหมู่ให้เป็นตัวแปรตัวเลข ในวิธีนี้ ค่าที่ไม่ซ้ำกันแต่ละค่าในตัวแปรหมวดหมู่จะถูกกำหนดค่าจำนวนเต็มที่ไม่ซ้ำกันตามลำดับหรืออันดับ
ตัวอย่างเช่น หากเรามีตัวแปรหมวดหมู่ “ระดับการศึกษา” ที่มีค่า “มัธยมปลาย” “ปริญญาตรี” “ปริญญาโท” และ “ปริญญาเอก” เราสามารถกำหนดค่าเป็น 1, 2, 3 และ 4 ตามลำดับ การเข้ารหัสลำดับจะถือว่ามีลำดับหรือการจัดอันดับที่มีความหมายระหว่างหมวดหมู่ และใช้ข้อมูลนี้เพื่อกำหนดค่าตัวเลข
#Import Libraries from sklearn.preprocessing import OrdinalEncoder #Create Dataset data = pd.DataFrame({'education_level':['High School','Bachelor\'s Degree', 'Master\'s Degree','PhD','High School','Master\'s Degree']}) #Define Ranks/Order category_ranks = {'High School': 1, 'Bachelor\'s Degree': 2, 'Master\'s Degree': 3, 'PhD': 4} #Ordinal Encoding ordinal_encoder = OrdinalEncoder(categories=[list(category_ranks.keys())], dtype=int) data['education_level_encoded'] = ordinal_encoder.fit_transform(data[['education_level']]) print(data)
วิธีการเข้ารหัสนี้มีประโยชน์อย่างยิ่งเมื่อหมวดหมู่มีลำดับหรือการจัดอันดับที่มีความหมาย เนื่องจากสามารถเก็บข้อมูลนี้และใช้ในโมเดลแมชชีนเลิร์นนิงบางรุ่นได้
อย่างไรก็ตาม ควรใช้ความระมัดระวังเมื่อใช้การเข้ารหัสตามลำดับ เนื่องจากอาจทำให้เกิดอคติหรือข้อสันนิษฐานเกี่ยวกับข้อมูลโดยไม่ได้ตั้งใจ ตัวอย่างเช่น การกำหนดค่าตัวเลขที่สูงกว่าให้กับหมวดหมู่ที่ถูกมองว่า "ดีกว่า" หรือ "สำคัญกว่า" อาจทำให้เกิดอคติในโมเดลได้ ดังนั้นจึงจำเป็นอย่างยิ่งที่จะต้องพิจารณาการจัดอันดับหมวดหมู่และผลกระทบอย่างรอบคอบก่อนที่จะใช้การเข้ารหัสลำดับกับข้อมูลของคุณ
คุณสามารถค้นหา Notebook สำหรับบทความนี้ได้ที่นี่: คลิกที่นี่
ขอบคุณที่อ่าน :)