Ten Machine Learning Algorithms You Should Know to Become a Data Scientist

Ten Machine Learning Algorithms You Should Know to Become a Data Scientist

ʕっ•ᴥ•ʔっฉบับแปลไทย 10 นาทีจบ ตามมาโล้ด

original version is here

src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

มนุษย์แต่ละคนมีนิสัยมีบุคลิกที่แตกต่างกันออกไป คนที่ทำ Machine learning (ML) ก็เหมือนกัน บางคนกล่าวว่า “ฉันเชี่ยวชาญด้าน algorithm X มาก X เนี่ยเอาไป train ข้อมูลแบบไหนก็ได้” บางคนบอกว่า “ต้องเลือก tool ที่เหมาะกับคนและงานสิ” ถึงแต่ละคนจะมีมุมมองที่ต่างกัน แต่พวกเขายึดหลักกลยุทธ์ “Jack of all trades. Master of one” เหมือนกัน มันคืออะไร? มันคือการที่มีซักด้านนึงที่เรารู้ลึกรู้จริง และก็ยังรู้จัก field อื่นๆ ของ ML เอาไว้ด้วย

ในฐานะที่เป็น Data Scientist ฝึกหัด เราปฏิเสธไม่ได้ว่าจำเป็นต้องรู้พื้นฐาน algorithm ของ ML เอาไว้บ้าง เพื่อเอาไว้รับมือกับปัญหาที่เราอาจเจอในอนาคต และ blog นี้ก็จะมาพูดถึง algorithm เหล่านั้น + แหล่ง resource สำหรับคนที่สนใจด้วย

1. Principal Component Analysis (PCA)/SVD

เรียกสั้นๆ ว่า PCA ละกัน มันคือวิธีการแบบ unsupervised ที่ช่วยให้เราเข้าใจคุณสมบัติของ dataset เช่น จะวิเคราะห์หา covariance matrix ของ data point เพื่อจะได้รู้ว่า dimension หรือ data point ไหนที่มีความสำคัญกว่า เช่น data point นั้นอาจมีค่า variance สูง แต่มี covariance ต่ำกว่าข้อมูลอื่น

คิดอีกแบบก็คือการหา top PC ของ matrix ก็เหมือนหาตัวเจาะจง (eigenvector) ที่มีค่าเจาะจง (eigenvalue) สูงที่สุดน่ะแหละ ซึ่ง SVD ก็เป็นอีกวิธีที่ใช้หา ordered components ได้เหมือนกัน แต่เป็นแบบไม่ต้องหา covariance matrix

src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

สำหรับ datapoint ที่มี dimension เยอะๆ สามารถใช้ algorithm นี้ลด dimension ได้

Libraries:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.svd.html

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html

Introductory Tutorial:

https://arxiv.org/pdf/1404.1100.pdf

2a. Least Squares and Polynomial Fitting

จำโค้ดที่คุณเขียนสมัยอยู่มหา’ลัย ที่เอาไว้วิเคราะห์ข้อมูลที่เป็นตัวเลขได้หรือเปล่า เราหาสมการซักอย่างที่พอ plot แล้วเส้นของสมการนั้นลากผ่านจุดข้อมูลเยอะที่สุด หรือ error น้อยสุดนั่นแหละ เราใช้วิธีนั้นหา fit curve ใน ML สำหรับข้อมูลที่ไม่เยอะ และ low dimension ได้นะ โดยใช้หลักของ ordinary least square (OLS) เท่านั้น ไม่ต้องใช้ optimization technique ที่ซับซ้อนอะไรมากมาย

ปล. แต่ถ้าเอาไปใช้กับข้อมูลขนาดใหญ่ + หลาย dimension อาจเกิด overfitting ได้ ดังนั้นอย่าดื้อจะใช้ล่ะ

src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

จะเห็นว่า algorithm นี้เหมาะจะใช้กับข้อมูลที่เป็น curve หรือ regression แบบง่ายๆ

Libraries:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.htmlhttps://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.polyfit.html

Introductory Tutorial:

https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/linear_regression.pdf

2b. Constrained Linear Regression

พอเจอข้อมูลที่มี outlier เช่น มีค่าผิดปกติที่โดดจากกลุ่มไปเยอะมาก ข้อมูลแปลกๆ หรือมี noise การหาค่า least squares (กำลังสองน้อยที่สุด) อาจไม่ใช่ทาง และทำให้ model เราเพี้ยนไปได้ เราจึงต้องกำหนดข้อจำกัด (constraint) เพื่อลดความแปรปรวนที่อาจเกิดกับเส้น model เรา

วิธีที่เราจะทำก็คือดู weight ของข้อมูลที่เอาไป fit model ด้วย ซึ่ง model อาจมี L1 norm (LASSO) หรือมี L2 (Ridge regression) หรือมีทั้งคู่เลยก็ได้ (elastic regression) แล้วค่อย optimize model ด้วย mean squared loss อีกที

src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

เราใช้ algorithm นี้ fit constrained regression line เพื่อหลีกเลี่ยงการเกิด overfitting และปิดบัง dimension ที่มี noise ออกจาก model ได้

Libraries:

http://scikit-learn.org/stable/modules/linear_model.html

Introductory Tutorial(s):

https://www.youtube.com/watch?v=5asL5Eq2x0A

https://www.youtube.com/watch?v=jbwSCwoT51M

3. K means Clustering

อันนี้ล่ะคือ algorithm ในดวงใจของใครหลายๆ คนเลย! ให้ข้อมูลมาชุดนึง (ในรูปของ vector) ละเราสามารถแบ่งกลุ่ม (clustering) ข้อมูลเหล่านั้นได้โดยใช้ระยะห่างระหว่างแต่ละ data point มาคำนวณ

algorithm นี้จะรับ input เป็นจำนวน cluster หรือก็คือ เราต้องการแบ่งข้อมูลเป็นกี่กลุ่ม ลักษณะการทำงานคือจะวนลูปไปเรื่อยๆ (iterative) เพื่อหา center ของแต่ละ cluster พอ center เปลี่ยน member ของ cluster นั้นก็จะเปลี่ยนด้วย และวนลูปจนกระทั่ง center หยุดเปลี่ยนแปลง

src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

ตามชื่อเลย! เราใช้ algorithm นี้แบ่งข้อมูลออกเป็น K กลุ่ม (cluster) ได้

Library:

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

Introductory Tutorial(s):

https://www.youtube.com/watch?v=hDmNF9JG3lo

https://www.datascience.com/blog/k-means-clustering

4. Logistic Regression

เอาง่ายๆ มันคือ Linear Regression ที่ไม่เป็น linear (เส้นตรง) นั่นล่ะ จากที่ใช้สมการเส้นตรง Logistic Regression มักจะใช้ sigmoid function หรือ tanh แทน เช่น ค่าที่ผ่าน sigmoid function จะได้ output ออกมาเป็น 0 กับ 1 ซึ่งเป็นการจำกัด output ของ model ไปด้วย ประมาณนี้

src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

note for beginner: เราจะใช้ Logistic Regression ทำ classification โดยจะมองว่า Logistic Regression เป็น Neural Network ที่มี layer เดียวก็ได้

นอกจากนี้ ยัง optimize model ด้วย method เช่น Gradient Descent หรือ L-BFGS ได้ด้วย ซึ่งคนมักจะเรียกวิธีนี้ว่า Maximum Entropy Classifier

Library:

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

Introductory Tutorial(s):

https://www.youtube.com/watch?v=-la3q9d7AKQ

5. SVM (Support Vector Machines)

SVM ก็เป็น linear model เหมือนๆ กับ Linear/Logistic Regression เลย ต่างกันตรงที่ margin-based loss function ที่ใช้ (จริงๆ แล้วรากศัพท์คำว่า support vector มันคือผลลัพธ์ทางคณิตศาสตร์ที่สวยงามอันนึงเลยนะ) เราสามารถใช้ optimization method เช่น L-BFGS หรือ SGD เพื่อ optimize loss function ได้ด้วย

src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

นอกจากนี้เราสามารถกำหนด kernel ที่ใช้ train data ได้ด้วย จากเดิมคือ RBF kernel จะลองเปลี่ยนเป็น kernel อื่นที่ดีกว่าก็ได้จ้า

อีกจุดเด่นคือ SVM สามารถเรียนรู้ classifier ที่จำแนกเพียง 1 class ได้ และยังใช้ train เพื่อสร้างตัวจำแนกข้อมูล (classifier) หรือสมการถดถอย (regressor) ได้ด้วย

Library:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

Introductory Tutorial(s):

https://www.youtube.com/watch?v=eHsErlPJWUU

Note: SGD based training of both Logistic Regression and SVMs are found in SKLearn’s http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html , which I often use as it lets me check both LR and SVM with a common interface. You can also train it on >RAM sized datasets using mini batches.

6. Feedforward Neural Networks

มันคือ Logistic Regression classifier ที่มีหลายๆ layer นั่นเอง ซึ่งคั่นแต่ละ layer ด้วย non-linearitie (เช่นสมการ sigmoid, tanh, relu + softmax หรือกระทั่งสมการ selu) เราเรียกด้วยชื่อเพราะๆ ว่า multi-layered perceptrons

Multi-Layered perceptron src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e
FFNN as an autoencoder, src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

เราใช้ FFNNs ทำ classification หรือ autoencoder ที่เป็น sunsupervised feature learning ได้ด้วย

Libraries:

http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier

http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html

https://github.com/keras-team/keras/blob/master/examples/reuters_mlp_relu_vs_selu.py

Introductory Tutorial(s):

http://www.deeplearningbook.org/contents/mlp.html

http://www.deeplearningbook.org/contents/autoencoders.html

http://www.deeplearningbook.org/contents/representation.html

7. Convolutional Neural Networks (Convnets)

ทุกวันนี้มีการนำ CNN มาใช้กับพวก art Vision เยอะมาก เช่นพวก Image classification, object detection หรือกระทั่ง segmentation of images

ย้อนกลับไปอดีตในช่วงปลายยุค 80s ต้น 90s Yann Lecun เป็นคนคิดค้น Convnets ขึ้นมา มีลักษณะเป็นลำดับชั้นของ layer (hierarchical feature extractor)

src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

เราจะใช้ convnets ทำ image หรือ text classification (graph ก็ได้นะ), object detection รวมถึง image segmentation

Libraries:

https://developer.nvidia.com/digits

https://github.com/kuangliu/torchcv

https://github.com/chainer/chainercv

https://keras.io/applications/

Introductory Tutorial(s):

http://cs231n.github.io/

https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/

8. Recurrent Neural Networks (RNNs):

RNNs model จะมีลักษณะเป็น sequence ที่วนทำซ้ำ (recursive) แต่ละ aggregator state ณ เวลา t (ให้แต่ละ sequence มี input เข้ามาเป็น 0..t..T และมี hidden state ที่เป็น output จาก step ก่อนหน้า หรือ t-1)

ปกติแทบจะไม่มีคนเอา RNNs มาใช้เพียวๆ แล้ว แต่จะเอามาใช้ประมาณนี้

src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

โดย f ในที่นี้เป็น densely connected unit และ nonlinearity (ปกติ f จะเป็น LSTMs หรือ GRUs) ซึ่ง RNN นี้ใช้ LSTM unit แทน dense layer ธรรมดาๆ แบบ pure RNN

src: https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e

จะใช้ RNNs กับงานอะไรที่เป็น sequence โดยเฉพาะ text classification, machine translation และ language modelling จ้า

Library:

https://github.com/tensorflow/models (Many cool NLP research papers from Google are here)

https://github.com/wabyking/TextClassificationBenchmark

http://opennmt.net/

Introductory Tutorial(s):

http://cs224d.stanford.edu/

http://www.wildml.com/category/neural-networks/recurrent-neural-networks/

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

9. Conditional Random Fields (CRFs)

จะบอกว่า CRFs เป็น model ที่ใช้บ่อยสุดในพวก probabilitic graphical model (PGMs) เลยก็ว่าได้ เราใช้ CRFs กับอะไรที่เป็น sequence เหมือนกับ RNNs เลย หรือจะใช้ร่วมกันกับ RNNs เลยก็ได้

เมื่อก่อนที่ยังไม่มีระบบ Neural Machine Translation เจ้า CRFs ถือเป็นศาสตร์แห่งศิลป์ของสมัยนั้นเลยนะ เราใช้ CRFs จัดการ sequence tagging task ต่างๆ ที่มี dataset ไม่ใหญ่มาก ซึ่งตรงนี้ล่ะที่ทำให้ CRFs ได้เปรียบ RNNs ในด้านการเรียนรู้ เพราะ RNNs ต้องการ dataset ขนาดใหญ่ๆ ในการ train

CRFs ยังเอาไปใช้กับ structured prediction task อื่นๆ ได้ด้วย เช่น การทำ image segmentation

CRF จะทำ model แต่ละ element ของ sequence (เรียกว่า sentence) ดังนั้น neighbor นึงจะกระทบกับ label ของ component ใน sequence นั้นเท่านั้น ไม่กระทบกับ label ทั้งหมด (label เป็นอิสระต่อกัน)

เราจะใช้ CRFs tag sequence ต่างๆ ในรูปของ ข้อความ, รูปภาพ, Time Series, DNA เป็นต้น

Library:

https://sklearn-crfsuite.readthedocs.io/en/latest/

Introductory Tutorial(s):

http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/

7 part lecture series by Hugo Larochelle on Youtube: https://www.youtube.com/watch?v=GF3iSJkgPbA

10. Decision Trees

สมมติว่าเราได้รับ data ของผลไม้หลากหลายชนิด และโจทย์คือบอกให้ได้ว่าอันไหนคือแอปเปิ้ล คำถามที่เราจะตั้งก็คือ “ผลไม้อันไหนเป็นผลกลมๆ สีแดงบ้าง?” หลังจากนั้นก็แบ่งผลไม้ที่มีออกเป็นกลุ่มที่ตอบคำถามเป็น yes กับ no

ทีนี้ ผลไม้ที่ตอบ yes ทั้งหลายนั้นอาจจะไม่ใช่แอปเปิ้ลก็ได้ และแอปเปิ้ลก็อาจจะไม่เป็นผลกลมๆ สีแดงเสมอไป ดังนั้น เราก็จะถามกลุ่มผลไม้กลมๆ สีแดงต่อว่า “ผลไม้อันไหนที่ผิวมีสีแดงๆ เหลืองๆ แต้มอยู่บ้าง?” และถามกลุ่มผลไม้ที่ไม่กลมๆ สีแดง ว่า “เป็นผลกลมๆ สีเขียวหรือเปล่า?” ต่อไป

คำถามพวกนี้จะช่วยให้เราตัดสินใจได้ว่าสุดท้ายแล้วอันไหนคือแอปเปิ้ล และลักษณะการถามต่อเป็นทอดๆ (cascade of question) งี้ล่ะที่เราเรียกว่า Decision Tree

จากตัวอย่าง decision tree นั้นเกิดจากสัญชาติญาณของเราเอง ซึ่งในกรณีข้อมูลจริงที่มีหลาย dimension หรือซับซ้อนๆ หน่อย สัญชาติญาณคงไม่เวิร์ค! ทีนี้ล่ะพระเอกของเราจะหา cascade of question มาให้เอง 😎

จริงๆ เมื่อก่อนเคยมี CART tree ประมาณนี้เหมือนกันนะ แต่มันใช้ได้กับเฉพาะ simple data พอเจอ dataset ที่ใหญ่/เยอะหน่อยก็เกิด bias-variance tradeoff ทำให้ต้องใช้ algorithm ที่ดีกว่านั้นมาแก้

ทุกวันนี้ decision trees ที่เห็นคนเอามาใช้กันบ่อยๆ คือ

  • Random Forests ที่สุ่มหลายๆ attribute มาสร้าง tree หลายๆ แบบ เป็นการสร้างแบบ parallel คือสร้างพร้อมๆ กันเลย แล้วสุดท้ายเอา output ของแต่ละแบบมารวมกัน
  • Boosting Trees สร้างหลาย tree เช่นกัน แต่ไม่เป็น parallel เหมือน Random Forests ลักษณะคือสร้างทีละ tree และ tree นั้นจะส่งผลกับ tree ตัวต่อๆ ไปที่จะสร้าง มีการดู residual จาก tree ก่อนหน้า ทำให้เกิด error ในการทำนายน้อยลงเรื่อยๆ

Decision Trees ใช้ classify datapoint ได้ ทำ regression ก็ได้นะ

Libraries

http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html

http://xgboost.readthedocs.io/en/latest/

https://catboost.yandex/

Introductory Tutorial:

http://xgboost.readthedocs.io/en/latest/model.html

https://arxiv.org/abs/1511.05741

https://arxiv.org/abs/1407.7502

http://education.parrotprediction.teachable.com/p/practical-xgboost-in-python

TD Algorithms (Good To Have)

แถมอีกนิด ทุกคนสงสัยมั้ยว่า algorithm ที่อ่านกันมายืดยาวเนี่ย ทำให้ DeepMind เล่นเกมโกะชนะแชมป์ระดับโลกได้ยังไง?

สิ่งที่ algorithms พวกนั้นทำไม่ใช่วางแผนกลยุทธ์ในการเล่นเกมโกะหรอก แต่มันเป็น Pattern Recognition การจะเอาชนะเกมหมากกระดาน หรือเกมคอนโซลอย่าง Atari ได้ (เรียกลักษณะแบบนี้ว่า multi-step problem) มันต้องลงไปเล่น เจอแพ้เจอชนะเอง (rewards/penalties) เราเรียก ML ที่เรียนรู้แบบนี้ว่า Reinforcement Learning

ส่วนมากที่เห็นทุกวันนี้คือจะรวมหลายๆ รูปแบบการเรียนรู้ เช่นจากทั้ง convnet และ LSTM เข้าด้วยกัน ได้เป็นเซ็ตของ algorithm นึง เราเรียกการวิธีแบบนี้ว่า Temporal Difference Learning หรือจะเป็นการเรียนรู้แบบ Q-Learning หรือ SARSA ก็อยู่ในแนวๆ นี้เหมือนกัน

algorithm แบบนี้มักใช้กับการเล่นเกมนี่แหละ 😆 แต่ก็เอาไปใช้กับอย่างอื่น เช่น language generation หรือ object detection ได้เหมือนกัน

Libraries:

https://github.com/keras-rl/keras-rl

https://github.com/tensorflow/minigo

Introductory Tutorial(s):

Grab the free Sutton and Barto book: https://web2.qatar.cmu.edu/~gdicaro/15381/additional/SuttonBarto-RL-5Nov17.pdf

Watch David Silver course: https://www.youtube.com/watch?v=2pWv7GOvuf0

🚩จบละจ้าาา

ถือว่ายาวพอสมควรสำหรับ 10 machine learning algorithms ที่ควรรู้ก่อนจะเป็น data scientist และน่าสนใจหลายๆ ตัว ใครอยากเจาะลึกอันไหนก็จัดไปได้เลย

สำหรับผู้แปลเองมีหลาย algorithm ที่ได้ศึกษาทฤษฎีมาบ้าง ลองเล่นบ้าง และเคยได้ยินแต่ชื่อบ้าง โดยเฉพาะตัว Neuron Network ที่คิดว่ายังไปได้ไกล และมีอะไรให้เล่นอีกเยอะ แน่นอนว่านอกจาก blog นี้ ยังมี algorithm อีกหลายตัวรอให้เราไปค้นหาอยู่ ดังนั้นเราต้องไม่หยุดที่จะเรียนรู้ 🏃‍🏃‍..~

และขอบคุณผู้เขียน blog ต้นฉบับที่ให้ความรู้กับทุกๆ คน ใครอยากอ่านเป็นภาษาอังกฤษตามไปได้เลยน้า 👇

Ten Machine Learning Algorithms You Should Know to Become a Data Scientist

วันนี้ไปก่อนล่ะ แล้วเจอกัน blog หน้าจ้า 😎

“Ten Machine Learning Algorithms You Should Know to Become a Data Scientist” Posted first on ” Data Science on Medium “
Author: Manusaporn Treerungroj

Author: Pawan Kumar

Leave a Reply

Close Menu
%d bloggers like this:
Skip to toolbar