เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

String และ Factor

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

โชคดีที่ PySpark มีฟังก์ชันสำหรับจัดการกรณีนี้ไว้ในโมดูลย่อย pyspark.ml.features สามารถสร้างสิ่งที่เรียกว่า 'one-hot vector' เพื่อแทนค่าสายการบินและจุดหมายปลายทางของแต่ละเที่ยวบินได้ one-hot vector คือวิธีการแทนค่าฟีเจอร์ประเภท categorical โดยที่แต่ละ observation จะมีเวกเตอร์ซึ่งทุกองค์ประกอบเป็นศูนย์ ยกเว้นองค์ประกอบมากที่สุดหนึ่งตัวที่มีค่าเป็นหนึ่ง (1)

แต่ละองค์ประกอบในเวกเตอร์สอดคล้องกับระดับของฟีเจอร์นั้น ดังนั้นจึงสามารถระบุได้ว่าระดับใดถูกต้องโดยดูว่าองค์ประกอบใดในเวกเตอร์มีค่าเท่ากับหนึ่ง (1)

ขั้นตอนแรกของการเข้ารหัสฟีเจอร์ประเภท categorical คือการสร้าง StringIndexer ซึ่งสมาชิกของคลาสนี้คือ Estimator ที่รับ DataFrame ที่มีคอลัมน์ string และแมป string แต่ละค่าที่ไม่ซ้ำกันให้เป็นตัวเลข จากนั้น Estimator จะคืนค่า Transformer ที่รับ DataFrame แนบการแมปดังกล่าวเป็น metadata แล้วคืนค่า DataFrame ใหม่พร้อมคอลัมน์ตัวเลขที่สอดคล้องกับคอลัมน์ string เดิม

ขั้นตอนที่สองคือการเข้ารหัสคอลัมน์ตัวเลขนั้นให้เป็น one-hot vector โดยใช้ OneHotEncoder ซึ่งทำงานในลักษณะเดียวกันกับ StringIndexer คือสร้าง Estimator แล้วตามด้วย Transformer ผลลัพธ์สุดท้ายคือคอลัมน์ที่เข้ารหัสฟีเจอร์ประเภท categorical ให้อยู่ในรูปแบบเวกเตอร์ที่พร้อมใช้งานกับกระบวนการ machine learning!

ดูซับซ้อนอยู่บ้าง แต่ไม่ต้องกังวล สิ่งที่ต้องจำก็แค่ต้องสร้าง StringIndexer และ OneHotEncoder ส่วน Pipeline จะจัดการส่วนที่เหลือให้เอง

ทำไมถึงต้องเข้ารหัสฟีเจอร์ประเภท categorical เป็น one-hot vector?

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

พื้นฐาน PySpark

ดูคอร์ส

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำจริง

เปลี่ยนทฤษฎีให้เป็นการลงมือทำด้วยแบบฝึกหัดเชิงโต้ตอบหนึ่งในของเรา

เริ่มแบบฝึกหัด