Normalization และ Standardization แตกต่างกันอย่างไร คนเรียน Machine learning ต้องรู้

Image placeholder
แวะมาทักทายกันได้


ในบทความนี้จะมาศึกษาทำความเข้าใจระหว่างการทำ normalization กับ standardization มีการเรียกใช้ Method อย่างไรและแต่ละมีวิธีจะต้องพิจารณาในการเลือกใช้อย่างไร ถ้ายังไม่รู้ในเรื่องนี้ ไปต่อกันเลย

 

Feature scaling

ก่อนอื่นมารู้จักกับคำว่า feature scaling กันก่อน ให้นึกถึงการเก็บข้อมูลที่เป็นตารางคำว่า feature จะหมายถึง column ของตารางที่เราเก็บข้อมูล ในบริบทนี้ให้คิดว่าเป็น label ของข้อมูลก็ได้ ส่วน scaling หมายถึงอัตราส่วนของข้อมูล ถ้าแปลรวมกันแล้วก็จะหมายถึง การทำอัตราส่วนให้กับข้อมูลนั่นเอง

 

Feature scaling เป็นขั้นตอนหนึ่งที่มีความสำคัญในการทำ machine learning pipeline ซึ่งเทคนิคที่ใช้คือ การทำ normalization และ การทำ standardization เป็นเทคนิคหลักที่เราจะพูดถึงกันในบทความนี้

 

Feature scaling มีความสำคัญอย่างไร

Feature scaling เป็นวิธีในการแปลงข้อมูลให้อยู่ในอัตราส่วนจำนวนเป็นตัวเลข ในย่าน จำนวนจริง [0, 1] เลขศูนย์ถึงเลขหนึ่ง หรือ [-1, 1] เลขลบหนึ่งถึงเลขหนึ่ง หรือ [-2, 2] เลขลบสองถึงเลขสอง เป็นต้น ในกรณีที่เราไม่ได้ใช้ feature scaling จะเกิดอะไรขึ้น สิ่งที่เกิดขึ้นจะทำให้ machine learning เกิดการ Bias (การอคติ) อาจจะทำให้ model ที่ได้พัฒนาขึ้นเกิดการตัดสินใจผิดพลาดได้ เนื่องจากข้อมูลใน feature หนึ่งมีขนาดใหญ่ จำนวนที่ค่อนข้างมากกว่า feature อื่นๆ

 

ยกตัวอย่าง จากตารางด้านล่าง เป็นข้อมูล total_bill และ tip ของร้านอาหาร ซึ่งเป็น dataset ของ seabon

 

ข้อมูลในตารางจะเห็น ขนาดค่อนข้างแตกต่างเป็นอย่างมากซึ่ง model จะมองเห็นเพียงตัวเลขเพียงเท่านั้น มันจะไม่รู้ว่าตัวเลขไหนคือ total_bill หรือ tip เมื่อ Model ถูกสร้างขึ้นโดยไม่ได้ทำ feature scaling จะทำให้ model ตัดสินใจเอนเอียงไปที่ค่าที่มากกว่า ดังนั้นเพื่อแก้ปัญหาในเรื่องนี้จำเป็นต้องนำ feature scaling มาใช้นั่นเอง แต่ไม่จำเป็นต้องใช้ feature scaling ใน machine learning algorithm อื่นๆ เช่น distance-based algorithm อย่าง linear regression, logistic regression, support vector machine, KNN, K-mean เป็นต้น


การทำ Normalization

การทำ normalization หมายถึงการทำให้ข้อมูลเป็นค่ามาตรฐาน เป็นเทคนิค feature scaling ที่จะนำข้อมูลแต่ละ feature อยู่ในย่านจำนวนจริงที่ machine learning อ่านได้ง่ายขึ้น ในแต่ละวิธีที่จะพูดถึง ได้แก่ MinMaxScaler, MaxAbsScaler, และ RobustScaler

 

 

MinMaxScaler method

สำหรับวิธีการทำ feature scaling ด้วยวิธีนี้ จะทำการ scale แต่ละ feature อยู่ในย่าน [0,1] ซึ่งข้อมูลแต่ละตัวที่ตำแหน่งที่สนใจ (i) ขนาดของข้อมูลจะถูกลบด้วยค่าต่ำสุด และถูกหารด้วยส่วนต่างระหว่าง ค่าสูงสุดและค่าต่ำสุดของข้อมูล ตามสมการด้านล่าง

 

ผลลัพท์ (สามารถ download file ได้ที่ท้ายบทความเพื่อดูภาพผลลัพท์)

 

การพิจารณาว่า เมื่อไรที่ต้องใช้ MinMaxScaler

·      เมื่อการกระจายของข้อมูลผิดปกติ เช่นข้อมูลที่ไม่เกาะกลุ่มที่มีค่าสูงมากหรือต่ำมาก (outlier)

·     เมื่อถ้าใช้ algorithm ที่ไม่สร้างสมมติฐานเกี่ยวกับการกระจายข้อมูล เช่น KNN หรือ Neural Network

·     เมื่อข้อมูลไม่มีค่า outlier หรือมีน้อยมาก

·     โดยปกติ MinMaxScaler จะแบ่งข้อมูลใน scale [0,1] แต่ยังไงก็ตามสามารถที่จะ แก้ไขย่านตามที่ต้องการได้โดยแต่ที่ parameter ชื่อ feature_range

 

MaxAbsScaler method

สำหรับ MaxAbsScaler เป็นเทคนิค normalization อีกหนึ่งวิธีที่จะทำการ scale ข้อมูลแต่ละตัวด้วยการสร้างย่านตั้ง[0, 1] หรือ [-1, 0] หรือ  [-1, 1] ภายใต้เหตุการณ์ที่แตกต่างตามที่ระบุด้านล่าง

 

·      ค่าที่ได้เป็นบวกเท่านั้น จะอยู่ในย่าน [0, 1]

·     ค่าที่ได้เป็นลบเท่านั้น จะอยู่ในย่าน [-1, 0]

·     ค่าที่ได้เป็นทั้งบวกและลบ จะอยู่ในย่าน [-1, 1]

 

ซึ่งวิธีนี้จะเป็นไปตามสมการด้านล่าง คือ ข้อมูลที่สนใจจะถูกหารด้วยค่า สูงสุด absolute เพราะว่าวิธีนี้จะใช้วิธีค่าสูงสุด เพราะไม่เช่นนั้นจะมีการตอบสนองอย่างวิธี MinMaxScaler

 

ผลลัพท์ (สามารถ download file ได้ที่ท้ายบทความเพื่อดูภาพผลลัพท์)

 

การพิจารณาว่า เมื่อไรที่ต้องใช้ MaxAbsScaler

·     ถ้าข้อมูลมีการกระจัดการจาย และโดยมากค่าจะเป็นศูนย์ จะต้องพิจารณาการใช้ MaxAbsScaler จริงๆแล้วถูกออกแบบมาเพื่อข้อมูลที่กระจัดกระจายโดยเฉพาะ

·     ทำไมควรจะใช้ MaxAbscaler ถ้าข้อมูลกระจัดกระจาย โปรดลองอ่านบทความของ Christian Versloot เพื่อทำความเข้าใจ christianversloot

 

RobustScaler method

MinMaxScaler และ MaxAbsScaler เป็นเทคนิคที่ตอบสนองต่อข้อมูลที่ outlier (เกิดค่าผิดปกติ) ดังนั้นจะสลับมาใช้ RobustScaler  แทนการใช้ค่า Min และ Max จากที่เทคนิค MinMaxScaler และ MaxAbsScaler ได้ใช้ไป แต่ RobustScaler จะใช้ IQR เพราะว่ามีความทนทานต่อข้อมูลผิดปกติ (outlier)

 

RobustScaler จะคำนวณตามสมการด้านล่าง โดยที่ใช้ค่า median มาลบกับค่าที่สนใจ และ Scale ตาม IQR (Inter Quartile Range) ค่าที่คำนวณค่ากลางและ IQR จะถูกเก็บเอาไว้ เพื่อที่จะแปลงค่าตามข้อมูล Test set โดยการ scale นี้จะเกิดขึ้นอย่างอิสระต่อกันในชุดข้อมูล

 

ผลลัพท์ (สามารถ download file ได้ที่ท้ายบทความเพื่อดูภาพผลลัพท์)

 

การพิจารณาว่า เมื่อไรที่ต้องใช้ RobustScaler

·     เมื่อข้อมูลนั้นมี outlier เพราะว่ามันจะตอบสนองน้อยกว่าการใช้ MinMaxScaler และ MaxAbsScaler

 

 

การทำ Standardization

Standardization เป็นอีกหนึ่งเทคนิคในการทำ feature scaling ใน machine learning เป็นเพราะในบาง algorithm จะใช้งานได้กับข้อมูลที่มีการกระจายแบบปกติ ถ้าข้อมูลในแต่ละ feature มีการกระจายตัวแบบปกติแล้ว model ที่ได้ตัดสินใจได้ไม่ดี ดังนั้น การทำ feature scaling ในรูปแบบนี้จะต้องใช้ StandardScaler เข้ามาช่วย

 

หลายคนอาจจะสงสัยว่าในเมื่อมีการกระจายแบบปกติแล้ว model ที่ได้จึงไม่ดี ลองอ่านเพิ่มเติมในบทความ Overfitting Underfitting วิธีหลีกเลี่ยงและการป้องกันทั้ง 7

StandardScaler method

สำหรับวิธีนี้จะลบค่าของข้อมูลที่สนใตด้วยค่าเฉลี่ยแล้วหารด้วยค่าความแปรปรวน เมื่อถูกคำนวณเสร็จค่าจะถูกเก็บไว้แล้วมาแปลงค่ากับข้อมูล Test set โดยการ scale จะเกิดขึ้นอย่างอิสระต่อกันในชุดข้อมูล ซึ่งเป็นไปตามสมการด้านล่าง

 

 

ผลลัพท์ (สามารถ download file ได้ที่ท้ายบทความเพื่อดูภาพผลลัพท์)

 

การพิจารณาว่า เมื่อไรที่ต้องใช้ StandardScaler

·     เมื่อข้อมูลมีการกระจายตัวอย่างปกติ

·     พิจารณาการใช้ StandardScaler ถ้าใช้ algorithm ที่จะต้องสร้างสมมติฐาน เช่น linear regression, logistic regression เป็นต้น

·     ถ้ามี outlier ในชุดข้อมูล สามารถที่จะกำจัด outlier เหล่านั้นได้

 

ตารางสรุป


Normalization

Standardization

ในแต่ละวิธีจะจัดอยู่ในย่านเลขจำนวนจริง ตั้งแต่ [0, 1] หรือ [1, -1]

จะต้องเป็นค่าเฉลี่ยและค่าความแปรปรวน

Scikit learning มีให้เรียกใช้ฟังก์ชัน

Scikit learning มีให้เรียกใช้ฟังก์ชัน

Minmaxscaler และ maxabsscaler มีผลต่อค่า outlier แต่ robustscaler จะทนทานกว่า

Standardization จะการตอบสนองต่อน้อยกว่าเมื่อเทียบกับ minmaxscaler หรือ maxabsscaler

มีประโยชน์เมื่อไม่รู้ค่าการกระจายตัวของข้อมูล

มีประโยชน์เมื่อรู้ว่ามีการกระจายตัวแบบปกติ


ทั้งนี้ การทำ feature scaling ไม่ได้จำเป็นต่อ algorithm อื่นๆ อย่างเช่น พวก tree-based algorithm เช่น decision tree, random forest, gradient booted tree เป็นต้น

ต้องพิจารณาเป็นเคสบายเคสไปตามแต่ละปัญหาที่วิเคราะห์ได้


Download File บทความนี้


พูดคุยแลกเปลี่ยนได้ที่ Facebook Fanpage




References
difference-between-normalization-and-standardization

อ่านเพิ่มเติม

[1]. preprocessing

[2]. sklearn.preprocessing.MinMaxScaler

[3]. sklearn.preprocessing.MaxAbsScaler

[4]. sklearn.preprocessing.RobustScaler

แวะมาทักทายกันได้
donate

Categories: Research Tags: #Machine Learning , 7023