Vũ Hu Tip
Machine Learning cơ bn First Edition Edition
March 2, 2017
Contents
1 Gi Gii i th thi iu u . . . .. . . . .. . . .. . . .. . . . .. . . .. . . .. . . . .. . . .. . . .. . . .. . . . .. . . .. . . .. .
1
1.1 Mc đích đích vit Blog Blog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Tha Tham m kho kho thêm thêm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Phâ Phân n nhóm nhóm các thu thut t toán toán Machin Machinee Learnin Learningg . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.1 Phân nhóm nhóm da trên trên phương phương thc hc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Phân nhóm nhóm da trên trên chc chc năng năng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 Tài liu tham tham kho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 Li Line near ar Re Regr gres essi sion on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1 Gi Giii thi thiuu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 Phân tích tích toán hc hc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.3 Ví d trên trên Pytho Pythonn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4 Th Thoo lun lun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.5 Tài liu tham tham kho . kho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4 KK-me means ans Cl Clus uste teri ring ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1 Gi Giii thi thiuu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2 Phân tích tích toán hc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3 Ví d trên trên Pytho Pythonn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Contents
1 Gi Gii i th thi iu u . . . .. . . . .. . . .. . . .. . . . .. . . .. . . .. . . . .. . . .. . . .. . . .. . . . .. . . .. . . .. .
1
1.1 Mc đích đích vit Blog Blog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Tha Tham m kho kho thêm thêm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Phâ Phân n nhóm nhóm các thu thut t toán toán Machin Machinee Learnin Learningg . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.1 Phân nhóm nhóm da trên trên phương phương thc hc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Phân nhóm nhóm da trên trên chc chc năng năng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 Tài liu tham tham kho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 Li Line near ar Re Regr gres essi sion on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1 Gi Giii thi thiuu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 Phân tích tích toán hc hc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.3 Ví d trên trên Pytho Pythonn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4 Th Thoo lun lun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.5 Tài liu tham tham kho . kho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4 KK-me means ans Cl Clus uste teri ring ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1 Gi Giii thi thiuu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2 Phân tích tích toán hc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3 Ví d trên trên Pytho Pythonn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
VI
Contents
4.4 Th Thoo lun lun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.5 Tài liu tham tham kho . kho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1 Gii thiu
Nhng năm gn đây, AI - Artificial Intelligence (Trí Tu Nhân To), và c th hơn là Machine Learning (Hc Máy hoc Máy Hc - Vi nhng t chuyên ngành, tôi s dùng song song c ting Anh và ting Vit, tuy nhiên s ưu tiên ting Anh vì thun tin hơn trong vic tra cu ) ni lên như mt bng chng ca cuc cách mng công nghip ln th tư (1 - đng cơ hơi nưc, 2 - năng lưng đin, 3 - công ngh thông tin). Trí Tu Nhân To đang len li vào mi lĩnh vc trong đi sng mà có th chúng ta không nhn ra. Xe t hành ca Google và Tesla, h thng t tag khuôn mt trong nh ca Facebook, tr lý o Siri ca Apple, h thng gi ý sn phm ca Amazon, h thng gi ý phim ca Netflix, máy chơi c vây AlphaGo ca Google DeepMind, ..., ch là mt vài trong vô vàn nhng ng dng ca AI/Machine Learning. (Xem thêm Jarvis - tr lý thông minh cho căn nhà ca Mark Zuckerberg.) Machine Learning là mt tp con ca AI. Theo đnh nghĩa ca Wikipedia, Machine learning is the subfield of computer science that "gives computers the ability to learn without being explicitly programmed" . Nói đơn gin, Machine Learning là mt lĩnh vc nh ca Khoa Hc
Máy Tính, nó có kh năng t hc hi da trên d liu đưa vào mà không cn phi đưc lp trình c th. Bn Nguyn Xuân Khánh ti đi hc Maryland đang vit mt cun sách v Machine Learning bng ting Vit khá thú v, các bn có th tham kho bài Machine Learning là gì?.
Nhng năm gn đây, khi mà kh năng tính toán ca các máy tính đưc nâng lên mt tm cao mi và lưng d liu khng l đưc thu thp bi các hãng công ngh ln, Machine Learning đã tin thêm mt bưc tin dài và mt lĩnh vc mi đưc ra đi gi là Deep Learning (Hc Sâu). Deep Learning đã giúp máy tính thc thi nhng vic tưng chng như không th vào 10 năm trưc: phân loi c ngàn vt th khác nhau trong các bc nh, t to chú thích cho nh, bt chưc ging nói và ch vit ca con ngưi, giao tip vi con ngưi, hay thm chí c sáng tác văn hay âm nhc (Xem thêm 8 Inspirational Applications of Deep Learning). Mi quan h gia Artificial Intelligence, Machine Learning, và Deep Learning đưc cho trong Hình 1.1.
2
1 Gii thiu
Fig. 1.1: Mi quan h gia AI, Machine Learning và Deep Learning. Ngun: What’s the Difference Between Artificial Intelligence, Machine Learning, and Deep Learning?
1.1 Mc đích vit Blog Nhu cu v nhân lc ngành Machine Learning (Deep Learning) đang ngày mt cao, kéo theo đó nhu cu hc Machine Learning trên th gii và Vit Nam ngày mt ln. Cá nhân tôi cũng mun h thng li kin thc ca mình v lĩnh vc này đ chun b cho tương lai (đây là mt trong nhng mc tiêu ca tôi trong năm 2017). Tôi s c gng đi t nhng thut toán cơ bn nht ca Machine Learning kèm theo các ví d và mã ngun trong mi bài vit. Tôi s vit 1-2 tun 1 bài (vic vit các công thc toán và code trên blog thc s tn nhiu thi gian hơn tôi tng nghĩ). Đng thơi, tôi cũng mong mun nhn đưc phn hi ca bn đc đ qua nhng tho lun, tôi và các bn có th nm bt đưc các thut toán này. Khi chun b các bài vit, tôi s gi đnh rng bn đc có mt chút kin thc v Đi S Tuyn Tính (Linear Algebra), Xác Suât Thng Kê (Probability and Statistics) và có kinh nghim v lp trình Python. Nu bn chưa có nhiu kinh nghim v các lĩnh vc này, đng quá lo lng vì mi bài s ch s dng mt vài k thut cơ bn. Hãy đ li câu hi ca bn phn Comment bên dưi mi bài, tôi s tho lun thêm vi các bn. Trong bài tip theo ca blog này, tôi s gii thiu v các nhóm thut toán Machine learning cơ bn. Mi các bn theo dõi.
1.2 Tham kho thêm
3
1.2 Tham kho thêm 1.2.1 Các khóa hc Ting Anh
1. Machine Learning vi thy Andrew Ng trên Coursera (Khóa hc ni ting nht v Machine Learning ) 2. Deep Learning by Google trên Udacity (Khóa hc nâng cao hơn v Deep Learning vi Tensorflow ) 3. Machine Learning mastery ( Các thut toán Machine Learning cơ bn ) Ting Vit Lưu ý: Các khóa hc này tôi chưa tng tham gia, ch đưa ra đ các bn tham kho.
1. Machine Learning 1/2017 2. Nhp môn Machine Learning, Tech Master- Cao Thanh Hà POSTECH () 1.2.2 Các trang Machine Learning ting Vit khác
1. Machine Learning trong X Lý Ngôn Ng T Nhiên - Nhóm Đông Du Nht Bn 2. Machine Learning cho ngưi mi bt đu - Ông Xuân Hng JAIST . 3. Machine Learning book for Vietnamese - Nguyn Xuân Khánh University of Maryland
2 Phân nhóm các thut toán Machine Learning
Có hai cách ph bin phân nhóm các thut toán Machine learning. Mt là da trên phương thc hc (learning style), hai là da trên chc năng (function) (ca mi thut toán).
2.1 Phân nhóm da trên phương thc hc Theo phương thc hc, các thut toán Machine Learning thưng đưc chia làm 4 nhóm: Supervise learning, Unsupervised learning, Semi-supervised lerning và Reinforcement learning. Có mt s cách phân nhóm không có Semi-supervised learning hoc Reinforcement learning.
2.1.1 Supervised Learning (Hc có giám sát)
Supervised learning là thut toán d đoán đu ra (outcome) ca mt d liu mi (new input) da trên các cp ( input, outcome ) đã bit t trưc. Cp d liu này còn đưc gi là ( data. label ), tc (d liu, nhãn ). Supervised learning là nhóm ph bin nht trong các thut toán Machine Learning. Mt cách toán hc, Supervised learning là khi chúng ra có mt tp hp bin đu vào X = {x , x , . . . , xN } và mt tp hp nhãn tương ng Y = {y , y , . . . , yN }, trong đó xi , yi là các vector. Các cp d liu bit trưc (xi, yi ) ∈ X × Y đưc gi là tp training data (d liu hun luyn). T tp traing data này, chúng ta cn to ra mt hàm s ánh x mi phn t t tp X sang mt phn t (xp x) tương ng ca tp Y : 1
2
1
2
yi ≈ f (xi ), ∀i = 1, 2, . . . , N
Mc đích là xp x hàm s f tht tt đ khi có mt d liu x mi, chúng ta có th tính đưc nhãn tương ng ca nó y = f (x). Ví d 1: trong nhn dng ch vit tay (Hình 2.1), ta có nh ca hàng nghìn ví d ca mi
ch s đưc vit bi nhiu ngưi khác nhau. Chúng ta đưa các bc nh này vào trong mt
2.1 Phân nhóm da trên phương thc hc
5
thut toán và ch cho nó bit mi bc nh tương ng vi ch s nào. Sau khi thut toán to ra (sau khi hc ) mt mô hình, tc mt hàm s mà đu vào là mt bc nh và đu ra là mt ch s, khi nhn đưc mt bc nh mi mà mô hình chưa nhìn thy bao gi , nó s d đoán bc nh đó cha ch s nào.
Fig. 2.1: MNIST: b cơ s d liu ca ch s vit tay. (Ngun: Simple Neural Network implementation in Ruby) Ví d này khá ging vi cách hc ca con ngưi khi còn nh. Ta đưa bng ch cái cho mt đa tr và ch cho chúng đây là ch A, đây là ch B. Sau mt vài ln đưc dy thì tr có th nhn bit đưc đâu là ch A, đâu là ch B trong mt cun sách mà chúng chưa nhìn thy bao gi. Ví d 2: Thut toán dò các khuôn mt trong mt bc nh đã đưc phát trin t rt lâu.
Thi gian đu, facebook s dng thut toán này đ ch ra các khuôn mt trong mt bc nh và yêu cu ngưi dùng tag friends - tc gán nhãn cho mi khuôn mt. S lưng cp d liu (khuôn mt, tên ngưi ) càng ln, đ chính xác nhng ln t đng tag tip theo s càng ln. Ví d 3: Bn thân thut toán dò tìm các khuôn mt trong 1 bc nh cũng là mt thut toán Supervised learning vi training data (d liu hc) là hàng ngàn cp (nh, mt ngưi ) và (nh, không phi mt ngưi ) đưc đưa vào. Chú ý là d liu này ch phân bit mt ngưi và không phi mt ngưòi mà không phân bit khuôn mt ca nhng ngưi khác nhau.
Thut toán supervised learning còn đưc tip tc chia nh ra thành hai loi chính: Classification (Phân loi)
Mt bài toán đưc gi là classification nu các label ca input data đưc chia thành mt s hu hn nhóm. Ví d: Gmail xác đnh xem mt email có phi là spam hay không; các hãng tín dng xác đnh xem mt khách hàng có kh năng thanh toán n hay không. Ba ví d phía trên đưc chia vào loi này.
6
2 Phân nhóm các thut toán Machine Learning
Regression (Hi quy)
(ting Vit dch là Hi quy , tôi không thích cách dch này vì bn thân không hiu nó nghĩa là gì) Nu label không đưc chia thành các nhóm mà là mt giá tr thc c th. Ví d: mt căn nhà rng x m , có y phòng ng và cách trung tâm thành ph z km s có giá là bao nhiêu? 2
Gn đây Microsoft có mt ng dng d đoán gii tính và tui da trên khuôn mt. Phn d đoán gii tính có th coi là thut toán Classification , phn d đoán tui có th coi là thut toán Regression. Chú ý rng phn d đoán tui cũng có th coi là Classification nu ta coi tui là mt s nguyên dương không ln hơn 150, chúng ta s có 150 class (lp) khác nhau.
2.1.2 Unsupervised Learning (Hc không giám sát)
Trong thut toán này, chúng ta không bit đưc outcome hay nhãn mà ch có d liu đu vào. Thut toán unsupervised learning s da vào cu trúc ca d liu đ thc hin mt công vic nào đó, ví d như phân nhóm (clustering) hoc gim s chiu ca d liu (dimention reduction) đ thun tin trong vic lưu tr và tính toán. Mt cách toán hc, Unsupervised learning là khi chúng ta ch có d liu vào X mà không bit nhãn Y tương ng. Nhng thut toán loi này đưc gi là Unsupervised learning vì không ging như Supervised learning, chúng ta không bit câu tr li chính xác cho mi d liu đu vào. Ging như khi ta hc, không có thy cô giáo nào ch cho ta bit đó là ch A hay ch B. Cm không giám sát đưc đt tên theo nghĩa này. Các bài toán Unsupervised learning đưc tip tc chia nh thành hai loi: Clustering (phân nhóm)
Mt bài toán phân nhóm toàn b d liu X thành các nhóm nh da trên s liên quan gia các d liu trong mi nhóm. Ví d: phân nhóm khách hàng da trên hành vi mua hàng. Điu này cũng ging như vic ta đưa cho mt đa tr rt nhiu mnh ghép vi các hình thù và màu sc khác nhau, ví d tam giác, vuông, tròn vi màu xanh và đ, sau đó yêu cu tr phân chúng thành tng nhóm. Mc dù không cho tr bit mnh nào tương ng vi hình nào hoc màu nào, nhiu kh năng chúng vn có th phân loi các mnh ghép theo màu hoc hình dng.
2.1 Phân nhóm da trên phương thc hc
7
Association
Là bài toán khi chúng ta mun khám phá ra mt quy lut da trên nhiu d liu cho trưc. Ví d: nhng khách hàng nam mua qun áo thưng có xu hưng mua thêm đng h hoc tht lưng; nhng khán gi xem phim Spider Man thưng có xu hưng xem thêm phim Bat Man, da vào đó to ra mt h thng gi ý khách hàng (Recommendation System), thúc đy nhu cu mua sm. 2.1.3 Semi-Supervised Learning (Hc bán giám sát)
Các bài toán khi chúng ta có mt lưng ln d liu X nhưng ch mt phn trong chúng đưc gán nhãn đưc gi là Semi-Supervised Learning. Nhng bài toán thuc nhóm này nm gia hai nhóm đưc nêu bên trên. Mt ví d đin hình ca nhóm này là ch có mt phn nh hoc văn bn đưc gán nhãn (ví d bc nh v ngưi, đng vt hoc các văn bn khoa hc, chính tr) và phn ln các bc nh/văn bn khác chưa đưc gán nhãn đưc thu thp t internet. Thc t cho thy rt nhiu các bài toàn Machine Learning thuc vào nhóm này vì vic thu thp d liu có nhãn tn rt nhiu thi gian và có chi phí cao. Rt nhiu loi d liu thm chí cn phi có chuyên gia mi gán nhãn đưc (nh y hc chng hn). Ngưc li, d liu chưa có nhãn có th đưc thu thp vi chi phí thp t internet. 2.1.4 Reinforcement Learning (Hc Cng C)
Reinforcement learning là các bài toán giúp cho mt h thng t đng xác đnh hành vi da trên hoàn cnh đ đt đưc li ích cao nht (maximizing the performance). Hin ti, Reinforcement learning ch yu đưc áp dng vào Lý Thuyt Trò Chơi (Game Theory), các thut toán cn xác đnh nưóc đi tip theo đ đt đưc đim s cao nht. Ví d 1: AlphaGo (Hình 2.2) gn đây ni ting vi vic chơi c vây thng c con ngưi.
C vây đưc xem là có đ phc tp cc kỳ cao vi tng s nưc đi là xp x 10 , so vi c vua là 10 và tng s nguyên t trong toàn vũ tr là khong 10 !! Vì vy, thut toán phi chn ra 1 nưc đi ti ưu trong s hàng nhiu t t la chn, và tt nhiên, không th áp dng thut toán tương t như IBM Deep Blue) (IBM Deep Blue đã thng con ngưi trong môn c vua 20 năm trưc). V cơ bn, AlphaGo bao gm các thut toán thuc c Supervised learning và Reinforcement learning. Trong phn Supervised learning, d liu t các ván c do con ngưi chơi vi nhau đưc đưa vào đ hun luyn. Tuy nhiên, mc đích cui cùng ca AlphaGo không phi là chơi như con ngưi mà phi thm chí thng c con ngưi. Vì vy, sau khi hc xong các ván c ca con ngưi, AlphaGo t chơi vi chính nó vi hàng triu ván chơi đ tìm ra các nưc đi mi ti ưu hơn. Thut toán trong phn t chơi này đưc xp vào loi Reinforcement learning. (Xem thêm ti Google DeepMind’s AlphaGo: How it works). 761
120
80
8
2 Phân nhóm các thut toán Machine Learning
Fig. 2.2: AlphaGo chơi c vây vi Lee Sedol. AlphaGo là mt ví d ca Reinforcement learning (Ngun AlphaGo AI Defeats Sedol Again, With ’Near Perfect Game’) Ví d 2: Hun luyn cho máy tính chơi game Mario. Đây là mt chương trình thú v dy
máy tính chơi game Mario. Game này đơn gin hơn c vây vì ti mt thi đim, ngưi chơi ch phi bm mt s lưng nh các nút (di chuyn, nhy, bn đn) hoc không cn bm nút nào. Đng thi, phn ng ca máy cũng đơn gin hơn và lp li mi ln chơi (ti thi đim c th s xut hin mt chưng ngi vt c đnh mt v trí c đnh). Đu vào ca thut toán là sơ đ ca màn hình ti thi đim hin ti, nhim v ca thut toán là vi đu vào đó, t hp phím nào nên đưc bm. Vic hun luyn này đưc da trên đim s cho vic di chuyn đưc bao xa trong thi gian bao lâu trong game, càng xa và càng nhanh thì đưc đim thưng càng cao (đim thưng này không phi là đim ca trò chơi mà là đim do chính ngưi lp trình to ra). Thông qua hun luyn, thut toán s tìm ra mt cách ti ưu đ ti đa s đim trên, qua đó đt đưc mc đích cui cùng là cu công chúa.
2.2 Phân nhóm da trên chc năng Có mt cách phân nhóm th hai da trên chc năng ca các thut toán. Trong phn này, tôi xin ch lit kê các thut toán. Thông tin c th s đưc trình bày trong các bài vit khác ti blog này. Trong quá trình vit, tôi có th s thêm bt mt s thut toán. 2.2.1 Regression Algorithms
1. Linear Regression 2. Logistic Regression 3. Stepwise Regression
2.2 Phân nhóm da trên chc năng
2.2.2 Classification Algorithms
1. Linear Classifier 2. Support Vector Machine (SVM) 3. Kernel SVM 4. Sparse Represntation-based classification (SRC) 2.2.3 Instance-based Algorithms
1. k-Nearest Neighbor (kNN) 2. Learnin Vector Quantization (LVQ) 2.2.4 Regularization Algorithms
1. Ridge Regression 2. Least Absolute Shringkage and Selection Operator (LASSO) 3. Least-Angle Regression (LARS) 2.2.5 Bayesian Algorithms
1. Naive Bayes 2. Gausian Naive Bayes 2.2.6 Clustering Algorithms
1. k-Means clustering 2. k-Medians 3. Expectation Maximisation (EM)
9
10
2 Phân nhóm các thut toán Machine Learning
2.2.7 Artificial Neural Network Algorithms
1. Perceptron 2. Softmax Regression 3. Multi-layer Perceptron 4. Back-Propagation 2.2.8 Dimensionality Reduction Algorithms
1. Principal Component Analysis (PCA) 2. Linear Discriminant Analysis (LDA) 2.2.9 Ensemble Algorithms
1. Boosting 2. AdaBoost 3. Random Forest Và còn rt nhiu các thut toán khác.
2.3 Tài liu tham kho 1. A Tour of Machine Learning Algorithms 2. Đim qua các thut toán Machine Learning hin đi
3 Linear Regression
Trong bài này, tôi s gii thiu mt trong nhng thut toán cơ bn nht (và đơn gin nht) ca Machine Learning. Đây là mt thut toán Supervised learning có tên Linear Regression (Hi Quy Tuyn Tính). Bài toán này đôi khi đưc gi là Linear Fitting (trong thng kê) hoc Linear Least Square .
3.1 Gii thiu Quay li ví d đơn gin đưc nêu trong bài trưc: mt căn nhà rng x m , có x phòng ng và cách trung tâm thành ph x km có giá là bao nhiêu. Gi s chúng ta đã có s liu thng kê t 1000 căn nhà trong thành ph đó, liu rng khi có mt căn nhà mi vi các thông s v din tích, s phòng ng và khong cách ti trung tâm, chúng ta có th d đoán đưc giá ca căn nhà đó không? Nu có thì hàm d đoán y = f (x) s có dng như th nào. đây x = [x , x , x ] là mt vector hàng cha thông tin input , y là mt s vô hưng (scalar) biu din output (tc giá ca căn nhà trong ví d này). 2
1
2
3
1
2
3
Lưu ý v ký hiu toán hc: trong các bài vit ca tôi, các s vô hưng đưc biu din bi các ch cái vit dng không in đm, có th vit hoa, ví d x1 , N , y , k . Các vector đưc biu din bng các ch cái thưng in đm, ví d y, x1. Các ma trn đưc biu din bi các ch vit hoa in đm, ví d X, Y , W.
Mt cách đơn gin nht, chúng ta có th thy rng: i) din tích nhà càng ln thì giá nhà càng cao; ii) s lưng phòng ng càng ln thì giá nhà càng cao; iii) càng xa trung tâm thì giá nhà càng gim. Mt hàm s đơn gin nht có th mô t mi quan h gia giá nhà và 3 đi lưng đu vào là: y ≈ yˆ = f (x) = w 1x1 + w2 x2 + w3 x3 + w0
(3.1)
trong đó, w , w , w , w là các hng s, w còn đưc gi là bias. Mi quan h y ≈ f (x) bên trên là mt mi quan h tuyn tính (linear). Bài toán chúng ta đang làm là mt bài toán thuc loi regression. Bài toán đi tìm các h s ti ưu w , w , w , w chính vì vy đưc gi là bài toán Linear Regression. 1
1
2
3
0
2
3
0
0
12
3 Linear Regression
Chú ý 1: y là giá tr thc ca outcome (da trên s liu thng kê chúng ta có trong tp training data ), trong khi yˆ là giá tr mà mô hình Linear Regression d đoán đưc. Nhìn
chung, y và yˆ là hai giá tr khác nhau do có sai s mô hình, tuy nhiên, chúng ta mong mun rng s khác nhau này rt nh. Chú ý 2: Linear hay tuyn tính hiu mt cách đơn gin là thng, phng . Trong không gian hai chiu, mt hàm s đưc gi là tuyn tính nu đ th ca nó có dng mt đưng thng . Trong không gian ba chiu, mt hàm s đưc goi là tuyn tính nu đ th ca nó có dng mt mt phng . Trong không gian nhiu hơn 3 chiu, khái nim mt phng không còn phù hp na, thay vào đó, mt khái nim khác ra đi đưc gi là siêu mt phng (hyperplane ).
Các hàm s tuyn tính là các hàm đơn gin nht, vì chúng thun tin trong vic hình dung và tính toán. Chúng ta s đưc thy trong các bài vit sau, tuyn tính rt quan trng và hu ích trong các bài toán Machine Learning. Kinh nghim cá nhân tôi cho thy, trưc khi hiu đưc các thut toán phi tuyn (non-linear, không phng), chúng ta cn nm vng các k thut cho các mô hình tuyn tính .
3.2 Phân tích toán hc 3.2.1 Dng ca Linear Regression
Trong phương trình (1) phía trên, nu chúng ta đt w = [w , w , w , w ]T = là vector (ct) h s cn phi ti ưu và x¯ = [1, x , x , x ] (đc là x bar trong ting Anh) là vector (hàng) d liu đu vào m rng . S 1 đu đưc thêm vào đ phép tính đơn gin hơn và thun tin cho vic tính toán. Khi đó, phương trình (1) có th đưc vit li dưi dng: 0
1
2
1
2
3
3
¯w = yˆ y ≈ x
Chú ý rng x¯ là mt vector hàng. (Xem thêm v ký hiu vector hàng và ct ti đây ) 3.2.2 Sai s d đoán
Chúng ta mong mun rng s sai khác e gia giá tr thc y và giá tr d đoán yˆ (đc là y hat trong ting Anh) là nh nht. Nói cách khác, chúng ta mun giá tr sau đây càng nh càng tt: 1 2 1 1 ¯w)2 e = (y − ˆ y )2 = (y − x 2 2 2
trong đó h s (li ) là đ thun tin cho vic tính toán (khi tính đo hàm thì s s b trit tiêu). Chúng ta cn e vì e = y − ˆy có th là mt s âm, vic nói e nh nht s không đúng vì khi e = −∞ là rt nh nhưng s sai lch là rt ln. Bn đc có th t đt câu hi: ti sao không dùng tr tuyt đi e mà li dùng bình phương e đây? Câu tr li s có phn sau. 1
1
2
2
2
2
3.2 Phân tích toán hc
13
3.2.3 Hàm mt mát
Điu tương t xy ra vi tt c các cp (input, outcome) (xi , yi ), i = 1, 2, . . . , N , vi N là s lưng d liu quan sát đưc. Điu chúng ta mun, tng sai s là nh nht, tương đương vi vic tìm w đ hàm s sau đt giá tr nh nht: 1 ¯i w)2 (yi − x L(w) = 2 i=1 N
(3.2)
Hàm s L(w) đưc gi là hàm mt mát (loss function) ca bài toán Linear Regression. Chúng ta luôn mong mun rng s mt mát (sai s) là nh nht, điu đó đng nghĩa vi vic tìm vector h s w sao cho giá tr ca hàm mt mát này càng nh càng tt. Giá tr ca w làm cho hàm mt mát đt giá tr nh nht đưc gi là đim ti ưu (optimal point), ký hiu: w∗ = arg min L(w) w
Trưc khi đi tìm li gii, chúng ta đơn gin hóa phép toán trong phương trình hàm mt mát (3.2). Đt y = [y ; y ; . . . ; yN ] là mt vector ct cha tt c các output ca training data ; ¯ = [x X ¯ ;x ¯ ;...;x ¯N ] là ma trn d liu đu vào (m rng) mà mi hàng ca nó là mt đim d liu. Khi đó hàm s mt mát L (w) đưc vit dưi dng ma trn đơn gin hơn: 1
1
2
2
1 1 ¯ 2 ¯i w)2 = y − Xw (yi − x L(w) = 2 2 i=1 2 N
(3.3)
vi z là Euclidean norm (chun Euclid, hay khong cách Euclid), nói cách khác z là tng ca bình phương mi phn t ca vector z. Ti đây, ta đã có mt dng đơn gin ca hàm mt mát đưc vit như phương trình (3.3). 2 2
2
3.2.4 Nghim cho bài toán Linear Regression Cách ph bin nht đ tìm nghim cho mt bài toán ti ưu (chúng ta đã bit t khi hc cp 3) là gii phương trình đo hàm (gradient) bng 0! Tt nhiên đó là
khi vic tính đo hàm và vic gii phương trình đo hàm bng 0 không quá phc tp. Tht may mn, vi các mô hình tuyn tính, hai vic này là kh thi. Đo hàm theo w ca hàm mt mát là: ∂ L(w) ¯ T (Xw ¯ − y) =X ∂ w
14
3 Linear Regression
Các bn có th tham kho bng đo hàm theo vector hoc ma trn ca mt hàm s trong mc D.2 ca tài liu này. Đn đây tôi xin quay li câu hi phn Sai s d đoán phía trên v vic ti sao không dùng tr tuyt đi mà li dùng bình phương. Câu tr li là hàm bình phương có đo hàm ti mi nơi, trong khi hàm tr tuyt đi thì không (đo hàm không xác đnh ti 0).
Phương trình đo hàm bng 0 tương đương vi: ¯ T Xw ¯ =X ¯ T y b X
(3.4)
¯ T y b nghĩa là đt X ¯ T y bng b ). (ký hiu X ¯ T X ¯ kh nghch (non-singular hay inversable) thì phương trình Nu ma trn vuông A X (4) có nghim duy nht: w = A− b. 1
Vy nu ma trn A không kh nghch (có đnh thc bng 0) thì sao? Nu các bn vn nh các kin thc v h phương trình tuyn tính, trong trưng hp này thì hoc phương trinh (3.4) vô nghim, hoc là nó có vô s nghim. Khi đó, chúng ta s dng khái nim gi nghch đo A† (đc là A dagger trong ting Anh). (Gi nghch đo (pseudo inverse) là trưng hp tng quát ca nghch đo khi ma trn không kh nghch hoc thm chí không vuông. Trong khuôn kh bài vit này, tôi xin phép đưc lưc b phn này, nu các bn thc s quan tâm, tôi s vit mt bài khác ch nói v gi nghch đo. Xem thêm: Least Squares, Pseudo-Inverses, PCA & SVD .)
Vi khái nim gi nghch đo, đim ti ưu ca bài toán Linear Regression có dng: ¯ T X ¯ )† X ¯ T y w = A† b = (X
(3.5)
3.3 Ví d trên Python 3.3.1 Bài toán
Trong phn này, tôi s chn mt ví d đơn gin v vic gii bài toán Linear Regression trong Python. Tôi cũng s so sánh nghim ca bài toán khi gii theo phương trình (3.5) và nghim tìm đưc khi dùng thư vin scikit-learn ca Python. (Đây là thư vin Machine Learning đưc s dng rng rãi trong Python ). Trong ví d này, d liu đu vào ch có 1 giá tr (1 chiu) đ thun tin cho vic minh ho trong mt phng. Chúng ta có 1 bng d liu v chiu cao và cân nng ca 15 ngưi như trong Bng 3.1. Bài toán đt ra là: liu có th d đoán cân nng ca mt ngưi da vào chiu cao ca h không? (Trên thc t, tt nhiên là không, vì cân nng còn ph thuc vào nhiu yu t khác na, th tích chng hn ). Vì blog này nói v các thut toán Machine Learning đơn gin nên tôi s gi s rng chúng ta có th d đoán đưc.
3.3 Ví d trên Python
15
Table 3.1: Bng d liu v chiu cao và cân nng ca 15 ngưi Chiu cao (cm) Cân nng (kg) Chiu cao (cm) Cân nng (kg) 147 150 153 155 158 160 163 165
49 50 51 52 54 56 58 59
168 170 173 175 178 180 183
60 72 63 64 66 67 68
Chúng ta có th thy là cân nng s t l thun vi chiu cao (càng cao càng nng), nên có th s dng Linear Regression model cho vic d đoán này. Đ kim tra đ chính xác ca model tìm đưc, chúng ta s gi li ct 155 và 160 cm đ kim th, các ct còn li đưc s dng đ hun luyn (train) model. 3.3.2 Hin th d liu trên đ th
Trưc tiên, chúng ta cn có hai thư vin numpy cho đi s tuyn tính và matplotlib cho vic v hình. # To support both python 2 and python 3 2 from __future__ import division, print_function, unicode_literals 3 import numpy as np 4 import matplotlib.pyplot as plt 1
Tip theo, chúng ta khai báo và biu din d liu trên mt đ th. # height (cm) 2 X = np.array([[147, 150, 153, 158, 163, 165, 168, 170, 173, 175, 178, 180, 183]]).T 3 # weight (kg) 4 y = np.array([[ 49, 50, 51, 54, 58, 59, 60, 62, 63, 64, 66, 67, 68]]).T 5 # Visualize data 6 plt.plot(X, y, ’ro’) 7 plt.axis([140, 190, 45, 75]) 8 plt.xlabel(’Height (cm)’) 9 plt.ylabel(’Weight (kg)’) 10 plt.show() 1
T đ th trong Hình 3.1 ta thy rng d liu đưc sp xp gn như theo 1 đưng thng, vy mô hình Linear Regression nhiu kh năng s cho kt qu tt: (cân nng) = w_1*(chiu cao) + w_0
16
3 Linear Regression
Fig. 3.1: Phân b ca d liu trong ví d có dng đưng thng 3.3.3 Nghim theo công thc
Tip theo, chúng ta s tính toán các h s w_1 và w_0 da vào công thc (5). Chú ý: gi nghch đo ca mt ma trn A trong Python s đưc tính bng numpy.linalg.pinv(A), pinv là t vit tt ca pseudo inverse . # Building Xbar 2 one = np.ones((X.shape[0], 1)) 3 Xbar = np.concatenate((one, X), axis = 1) 1
4
# Calculating weights of the fitting line A = np.dot(Xbar.T, Xbar) 7 b = np.dot(Xbar.T, y) 8 w = np.dot(np.linalg.pinv(A), b) 9 print(’ w = ’, w) 10 # Preparing the fitting line 11 w_0 = w[0][0] 12 w_1 = w[1][0] 13 x0 = np.linspace(145, 185, 2) 14 y0 = w_0 + w_1*x0 5 6
15
# Drawing the fitting line plt.plot(X.T, y.T, ’ro’) # data 18 plt.plot(x0, y0) # the fitting line 19 plt.axis([140, 190, 45, 75]) 20 plt.xlabel(’Height (cm)’) 21 plt.ylabel(’Weight (kg)’) 22 plt.show() 16 17
1 2
w = [[-33.73541021] [ 0.55920496]]
T đ th bên trên ta thy rng các đim d liu màu đ nm khá gn đưng thng d đoán màu xanh. Vy mô hình Linear Regression hot đng tt vi tp d liu training . Bây gi,
3.3 Ví d trên Python
17
Fig. 3.2: Minh ha nghim ca ví d chúng ta s dng mô hình này đ d đoán cân nng ca hai ngưi có chiu cao 155 và 160 cm mà chúng ta đã không dùng khi tính toán nghim. 1 2
y1 = w_1*155 + w_0 y2 = w_1*160 + w_0
3 4 5
print( ’Predict weight of person 155 cm: %.2f (kg), real number: 52 (kg)’ print( ’Predict weight of person 160 cm: %.2f (kg), real number: 56 (kg)’
%(y1) ) %(y2) )
Predict weight of person 155 cm: 52.94 (kg), real number: 52 (kg) 2 Predict weight of person 160 cm: 55.74 (kg), real number: 56 (kg) 1
Chúng ta thy rng kt qu d đoán khá gn vi s liu thc t. 3.3.4 Nghim theo thư vin scikit-learn
Tip theo, chúng ta s s dng thư vin scikit-learn ca Python đ tìm nghim. 1
from sklearn import datasets, linear_model
2
# fit the model by Linear Regression regr = linear_model.LinearRegression(fit_intercept=False) # fit_intercept = False for calculating the bias 5 regr.fit(Xbar, y) 3 4
6
# Compare two results 8 print( ’Solution found by scikit-learn 9 print( ’Solution found by (5): ’, w.T) 7
1 2
: ’, regr.coef_ )
Solution found by scikit-learn : [[ -33.73541021 0.55920496]] Solution found by (5): [[ -33.73541021 0.55920496 ]]
18
3 Linear Regression
Chúng ta thy rng hai kt qu thu đưc như nhau! ( Nghĩa là tôi đã không mc li nào trong cách tìm nghim phn trên ) Source code Jupyter Notebook cho bài này.
3.4 Tho lun 3.4.1 Các bài toán có th gii bng Linear Regression
Hàm s y ≈ f (x) = wT x là mt hàm tuyn tính theo c w và x. Trên thc t, Linear Regression có th áp dng cho các mô hình ch cn tuyn tính theo w. Ví d: y ≈ w 1 x1 + w2 x2 + w3 x21 + w4 sin(x2 ) + w5 x1 x2 + w0
là mt hàm tuyn tính theo w và vì vy cũng có th đưc gii bng Linear Regression. Vi mi d liu đu vào x = [x ; x ], chúng ta tính toán d liu mi x˜ = [x , x , x , sin(x ), x x ] (đc là x tilde trong ting Anh) ri áp dng Linear Regression vi d liu mi này. 1
2
1
2
2 1
2
1
2
Xem thêm ví d v Quadratic Regression (Hi Quy Bc Hai).
Fig. 3.3: Quadratic Regression (Ngun: Quadratic Regression)
3.4.2 Hn ch ca Linear Regression
Hn ch đu tiên ca Linear Regression là nó rt nhy cm vi nhiu (sensitive to noise). Trong ví d v mi quan h gia chiu cao và cân nng bên trên, nu có ch mt cp d liu nhiu (150 cm, 90kg) thì kt qu s sai khác đi rt nhiu (Xem Hình 3.4).
3.5 Tài liu tham kho
19
Fig. 3.4: Linear Regression rt nhy cm vi nhiu Vì vy, trưc khi thc hin Linear Regression, các nhiu ( outlier ) cn phi đưc loi b. Bưc này đưc gi là tin x lý (pre-processing). Hn ch th hai ca Linear Regression là nó không biu din đưc các mô hình phc tp. Mc dù trong phn trên, chúng ta thy rng phương pháp này có th đưc áp dng nu quan h gia outcome và input không nht thit phi là tuyn tính, nhưng mi quan h này vn đơn gin nhiu so vi các mô hình thc t. Hơn na, chúng ta s t hi: làm th nào đ xác đnh đưc các hàm x , sin(x ), x x như trên?! 2 1
2
1
2
3.4.3 Các phương pháp ti ưu
Linear Regression là mt mô hình đơn gin, li gii cho phương trình đo hàm bng 0 cũng khá đơn gin. Trong hu ht các trưng hp, chúng ta không th gii đưc phương trình đo hàm bng 0.
Nhưng có mt điu chúng ta nên nh, còn tính đưc đo hàm là còn có cơ hi .
3.5 Tài liu tham kho 1. Linear Regression - Wikipedia 2. Simple Linear Regression Tutorial for Machine Learning 3. Least Squares, Pseudo-Inverses, PCA & SVD
4 K-means Clustering
4.1 Gii thiu Trong bài trưc, chúng ta đã làm quen vi thut toán Linear Regression - là thut toán đơn gin nht trong Supervised learning. Bài này tôi s gii thiu mt trong nhng thut toán cơ bn nht trong Unsupervised learning - thut toán K-means clustering (phân cm K-means). Trong thut toán K-means clustering, chúng ta không bit nhãn (label) ca tng đim d liu. Mc đích là làm th nào đ phân d liu thành các cm (cluster) khác nhau sao cho d liu trong cùng mt cm có tính cht ging nhau . Ví d: Mt công ty mun to ra nhng chính sách ưu đãi cho nhng nhóm khách hàng khác
nhau da trên s tương tác gia mi khách hàng vi công ty đó (s năm là khách hàng; s tin khách hàng đã chi tr cho công ty; đ tui; gii tính; thành ph; ngh nghip; ...). Gi s công ty đó có rt nhiu d liu ca rt nhiu khách hàng nhưng chưa có cách nào chia toàn b khách hàng đó thành mt s nhóm/cm khác nhau. Nu mt ngưi bit Machine Learning đưc đt câu hi này, phương pháp đu tiên anh (ch) ta nghĩ đn s là K-means Clustering. Vì nó là mt trong nhng thut toán đu tiên mà anh y tìm đưc trong các cun sách, khóa hc v Machine Learning. Và tôi cũng chc rng anh y đã đc blog
Machine Learning cơ bn. Sau khi đã phân ra đưc tng nhóm, nhân viên công ty đó có th la chn ra mt vài khách hàng trong mi nhóm đ quyt đnh xem mi nhóm tương ng vi nhóm khách hàng nào. Phn vic cui cùng này cn s can thip ca con ngưi, nhưng lưng công vic đã đưc rút gn đi rt nhiu. Ý tưng đơn gin nht v cluster (cm) là tp hp các đim gn nhau trong mt không gian nào đó (không gian này có th có rt nhiu chiu trong trưng hp thông tin v mt đim d liu là rt ln). Hình bên dưi là mt ví d v 3 cm d liu (t gi rôi s vit gn là cluster ). Gi s mi cluster có mt đim đi din ( center ) màu vàng. Và nhng đim xung quanh mi center thuc vào cùng nhóm vi center đó. Mt cách đơn gin nht, xét mt đim bt kỳ, ta xét xem đim đó gn vi center nào nht thì nó thuc v cùng nhóm vi center đó.
4.2 Phân tích toán hc
21
Ti đây, chúng ta có mt bài toán thú v: Trên mt vùng bin hình vuông ln có ba đo hình vuông, tam giác, và tròn màu vàng như hình trên. Mt đim trên bin đưc gi là thuc lãnh hi ca mt đo nu nó nm gn đo này hơn so vi hai đo kia . Hãy xác đnh ranh gii lãnh hi ca các đo.
Hình dưi đây là mt hình minh ha cho vic phân chia lãnh hi nu có 5 đo khác nhau đưc biu din bng các hình tròn màu đen: Chúng ta thy rng đưng phân đnh gia các lãnh hi là các đưng thng (chính xác hơn thì chúng là các đưng trung trc ca các cp đim gn nhau). Vì vy, lãnh hi ca mt đo s là mt hình đa giác. Cách phân chia này trong toán hc đưc gi là Voronoi Diagram. Trong không gian ba chiu, ly ví d là các hành tinh, thì (tm gi là) lãnh không ca mi hành tinh s là mt đa din. Trong không gian nhiu chiu hơn, chúng ta s có nhng th (mà tôi gi là) siêu đa din (hyperpolygon). Quay li vi bài toán phân nhóm và c th là thut toán K-means clustering, chúng ta cn mt chút phân tích toán hc trưc khi đi ti phn tóm tt thut toán phn dưi. Nu bn không mun đc quá nhiu v toán, bn có th b qua phn này. ( Tt nht là đng b qua, bn s tic đy ).
4.2 Phân tích toán hc Mc đích cui cùng ca thut toán phân nhóm này là: t d liu đu vào và s lưng nhóm chúng ta mun tìm, hãy ch ra center ca mi nhóm và phân các đim d liu vào các nhóm tương ng. Gi s thêm rng mi đim d liu ch thuc vào đúng mt nhóm. 4.2.1 Mt s ký hiu toán hc
Gi s có N đim d liu là X = [x , x , . . . , xN ] ∈ Rd×N và K < N là s cluster chúng ta mun phân chia. Chúng ta cn tìm các center m , m , . . . , mK ∈ Rd× và label ca mi đim d liu. 1
2
1
1
2
Lưu ý v ký hiu toán hc: trong các bài vit ca tôi, các s vô hưng đưc biu din bi các ch cái vit dng không in đm, có th vit hoa, ví d x1 , N , y , k . Các vector đưc biu din bng các ch cái thưng in đm, ví d m, x1 . Các ma trn đưc biu din bi các ch vit hoa in đm, ví d X, M, Y. Lưu ý này đã đưc nêu bài
Linear Regression. Tôi xin đưc không nhc li trong các bài tip theo.
22
4 K-means Clustering
Vi mi đim d liu xi đt yi = [yi , yi , . . . , yiK ] là label vector ca nó, trong đó nu xi = k . Điu này có nghĩa là có đúng mt đưc phân vào cluster k thì yik = 1 và yij = 0, ∀ j phn t ca vector yi là bng 1 (tương ng vi cluster ca xi ), các phn t còn li bng 0. Ví d: nu mt đim d liu có label vector là [1, 0, 0, . . . , 0] thì nó thuc vào cluster 1, là [0 , 1, 0, . . . , 0] thì nó thuc vào cluster 2, . . . . Cách mã hóa label ca d liu như th này đưc goi là biu din one-hot . Chúng ta s thy cách biu din one-hot này rt ph bin trong Machine Learning các bài tip theo. 1
1
Ràng buc ca yi có th vit dưi dng toán hc như sau: K
yik ∈ 0 , 1,
yik = 1
(1)
(4.1)
k=1
4.2.2 Hàm mt mát và bài toán ti ưu
Nu ta coi center mk là center (hoc representative) ca mi cluster và ưc lưng tt c các đim đưc phân vào cluster này bi mk , thì mt đim d liu xi đưc phân vào cluster k s b sai s là ( xi − mk ). Chúng ta mong mun sai s này có tr tuyt đi nh nht nên (ging như trong bài Linear Regression) ta s tìm cách đ đi lưng sau đây đt giá tr nh nht:
xi − mk 22
Hơn na, vì xi đưc phân vào cluster k nên trên s đưc vit li là:
= k . yik = 1, yij = 0, ∀ j
2 2
yik xi − mk =
K
(4.2)
Khi đó, biu thc bên
yij xi − m j 22
(4.3)
yij xi − m j 22
(4.4)
j =1
(Hy vng ch này không quá khó hiu ) Sai s cho toàn b d liu s là: L(Y, M) =
N K i=1 j =1
Trong đó Y = [y ; y ; . . . ; yN ], M = [m , m , . . . mK ] ln lưt là các ma trn đưc to bi label vector ca mi đim d liu và center ca mi cluster. Hàm s mt mát trong bài toán K-means clustering ca chúng ta là hàm L(Y, M) vi ràng buc như đưc nêu trong phương trình (1). 1
2
1
2
Tóm li, chúng ta cn ti ưu bài toán sau: Y , M = arg min Y,M
N K i=1 j =1
yij xi − m j 22
(2)
(4.5)
4.2 Phân tích toán hc
subject to:
yij ∈ 0 , 1 ∀i, j ;
K
yij = 1 ∀i
23
(4.6)
j =1
(subject to nghĩa là tha mãn điu kin ). Nhc li khái nim arg min: Chúng ta bit ký hiu min là giá tr nh nht ca hàm s , arg min chính là giá tr ca bin s đ hàm s đó đt giá tr nh nht đó . Nu f (x) =
x2 − 2x +1 = (x − 1)2 thì giá tr nh nht ca hàm s này bng 0, đt đưc khi x = 1. Trong ví d này min x f (x) = 0 và arg minx f (x) = 1. Thêm ví d khác, nu x 1 = 0, x2 = 10, x3 = 5 thì ta nói arg mini xi = 1 vì 1 là ch s đ xi đt giá tr nh nht (bng 0 ). Bin s vit bên
dưi min là bin s cúng ta cn ti ưu. Trong các bài toán ti ưu, ta thưng quan tâm ti arg min hơn là min . 4.2.3 Thut toán ti ưu hàm mt mát
Bài toán (2) là mt bài toán khó tìm đim ti ưu vì nó có thêm các điu kin ràng buc. Bài toán này thuc loi mix-integer programming (điu kin bin là s nguyên) - là loi rt khó tìm nghim ti ưu toàn cc (global optimal point, tc nghim làm cho hàm mt mát đt giá tr nh nht có th). Tuy nhiên, trong mt s trưng hp chúng ta vn có th tìm đưc phương pháp đ tìm đưc nghim gn đúng hoc đim cc tiu. (Nu chúng ta vn nh chương trình toán ôn thi đi hc thì đim cc tiu chưa chc đã phi là đim làm cho hàm s đt giá tr nh nht ).
Mt cách đơn gin đ gii bài toán (2) là xen k gii Y và M khi bin còn li đưc c đnh. Đây là mt thut toán lp, cũng là k thut ph bin khi gii bài toán ti ưu. Chúng ta s lt lưt gii quyt hai bài toán sau đây: C đnh M, tìm Y Gi s đã tìm đưc các centers, hãy tìm các label vector đ hàm mt mát đt giá tr nh nht. Điu này tương đương vi vic tìm cluster cho mi đim d liu.
Khi các centers là c đnh, bài toán tìm label vector cho toàn b d liu có th đưc chia nh thành bài toán tìm label vector cho tng đim d liu xi như sau: yi = arg min yi
subject to:
K
yij xi − m j 22
(3)
(4.7)
j =1
yij ∈ 0 , 1 ∀ j ;
K j =1
yij = 1
(4.8)
24
4 K-means Clustering
Vì ch có mt phn t ca label vector dưi dng đơn gin hơn:
yi bng 1 nên
bài toán (3) có th tip tc đưc vit
j = arg min xi − m j 22 j
(4.9)
Vì xi − m j chính là bình phương khong cách tính t đim xi ti center m j , ta có th kt lun rng mi đim xi thuc vào cluster có center gn nó nht ! T đó ta có th d dàng suy ra label vector ca tng đim d liu. 2 2
C đnh Y, tìm M Gi s đã tìm đưc cluster cho tng đim, hãy tìm center mi cho mi cluster đ hàm mt mát đt giá tr nh nht.
Mt khi chúng ta đã xác đnh đưc label vector cho tng đim d liu, bài toán tìm center cho mi cluster đưc rút gn thành: m j = arg min mj
N
yij xi − m j 22 .
(4.10)
i=1
Ti đây, ta có th tìm nghim bng phương pháp gii đo hàm bng 0, vì hàm cn ti ưu là mt hàm liên tc và có đo hàm xác đnh ti mi đim. Và quan trng hơn, hàm này là hàm convex (li) theo m j nên chúng ta s tìm đưc giá tr nh nht và đim ti ưu tương ng. Sau này nu có dp, tôi s nói thêm v ti ưu li (convex optimization) - mt mng cc kỳ quan trng trong toán ti ưu .
Đt l(m j ) là hàm bên trong du arg min, ta có đo hàm:
∂l(m j ) yij (m j − xi ) =2 ∂ m j N
(4.11)
i=1
Gii phương trình đo hàm bng 0 ta có: m j
N i=1
yij =
N
yij xi
(4.12)
i=1
N yij xi ⇒ m j = i N =1
i=1 yij
(4.13)
Nu đ ý mt chút, chúng ta s thy rng mu s chính là phép đm s lưng các đim d liu trong cluster j ( Bn có nhn ra không? ). Còn t s chính là tng các đim d liu trong
4.3 Ví d trên Python
25
cluster j . (Nu bn đc vn nh điu kin ràng buc ca các yij thì s có th nhanh chóng nhìn ra điu này ). Hay nói mt cách đơn gin hơn nhiu: cluster j .
m j là
trung bình cng ca các đim trong
Tên gi K-means clustering cũng xut phát t đây. 4.2.4 Tóm tt thut toán
Ti đây tôi xin đưc tóm tt li thut toán (đc bit quan trng vi các bn b qua phn toán hc bên trên ) như sau: Đu vào: D liu X và s lưng cluster cn tìm K . Đu ra: Các center M và label vector cho tng đim d liu Y.
1. Chn K đim bt kỳ làm các center ban đu. 2. Phân mi đim d liu vào cluster có center gn nó nht. 3. Nu vic gán d liu vào tng cluster bưc 2 không thay đi so vi vòng lp trưc nó thì ta dng thut toán. 4. Cp nht center cho tng cluster bng cách ly trung bình cng ca tt các các đim d liu đã đưc gán vào cluster đó sau bưc 2. 5. Quay li bưc 2. Chúng ta có th đm bo rng thut toán s dng li sau mt s hu hn vòng lp. Tht vy, vì hàm mt mát là mt s dương và sau mi bưc 2 hoc 3, giá tr ca hàm mt mát b gim đi. Theo kin thc v dãy s trong chương trình cp 3: nu mt dãy s gim và b chn dưi thì nó hi t! Hơn na, s lưng cách phân nhóm cho toàn b d liu là hu hn nên đn mt lúc nào đó, hàm mt mát s không th thay đi, và chúng ta có th dng thut toán ti đây. Chúng ta s có mt vài tho lun v thut toán này, v nhng hn ch và mt s phương pháp khc phc. Nhưng trưc ht, hãy xem nó th hin như th nào trong mt ví d c th dưi đây.
4.3 Ví d trên Python 4.3.1 Gii thiu bài toán
Đ kim tra mc đ hiu qu ca mt thut toán, chúng ta s làm mt ví d đơn gin (thưng đưc gi là toy example ). Trưc ht, chúng ta chn center cho tng cluster và to d liu cho tng cluster bng cách ly mu theo phân phi chun có kỳ vng là center ca cluster đó và ma trn hip phương sai (covariance matrix) là ma trn đơn v.
26
4 K-means Clustering
Trưc tiên, chúng ta cn khai báo các thư vin cn dùng. Chúng ta cn numpy và matplotlib như trong bài Linear Regression cho vic tính toán ma trn và hin th d liu. Chúng ta cũng cn thêm thư vin scipy.spatial.distance đ tính khong cách gia các cp đim trong hai tp hp mt cách hiu qu. import numpy as np 2 import matplotlib.pyplot as plt 3 from scipy.spatial.distance import cdist 4 np.random.seed(11) 1
Tip theo, ta to d liu bng cách ly các đim theo phân phi chun có kỳ vng ti các đim có ta đ (2, 2), (8, 3) và (3, 6), ma trn hip phương sai ging nhau và là ma trn đơn v. Mi cluster có 500 đim. ( Chú ý rng mi đim d liu là mt hàng ca ma trn d liu. means = [[2, 2], [8, 3], [3, 6]] cov = [[1, 0], [0, 1]] 3 N = 500 4 X0 = np.random.multivariate_normal(means[0], cov, N) 5 X1 = np.random.multivariate_normal(means[1], cov, N) 6 X2 = np.random.multivariate_normal(means[2], cov, N) 1 2
7 8 9
X = np.concatenate((X0, X1, X2), axis = 0) K = 3
10 11
original_label = np.asarray([0]*N + [1]*N + [2]*N).T
4.3.2 Hin th d liu trên đ th
Chúng ta cn mt hàm kmeans_display đ hin th d liu. Sau đó hin th d liu theo nhãn ban đu. 1 2 3 4 5
def kmeans_display(X, label): K = np.amax(label) + 1 X0 = X[label == 0, :] X1 = X[label == 1, :] X2 = X[label == 2, :]
6
plt.plot(X0[:, 0], X0[:, 1], ’b^’, markersize = 4, alpha = .8) plt.plot(X1[:, 0], X1[:, 1], ’go’, markersize = 4, alpha = .8) plt.plot(X2[:, 0], X2[:, 1], ’rs’, markersize = 4, alpha = .8)
7 8 9 10 11 12 13
plt.axis(’equal’) plt.plot() plt.show()
14 15
kmeans_display(X, original_label)
Trong đ th trên, mi cluster tương ng vi mt màu. Có th nhn thy rng có mt vài đim màu đ b ln sang phn cluster màu xanh.
4.3 Ví d trên Python
27
4.3.3 Các hàm s cn thit cho K-means clustering
Vit các hàm: 1. kmeans_init_centers đ khi to các centers ban đu. 2. kmeans_asign_labels đ gán nhán mi cho các đim khi bit các centers. 3. kmeans_update_centers đ cp nht các centers mi da trên d liu va đưc gán nhãn. 4. has_converged đ kim tra điu kin dng ca thut toán. 1 2 3
def kmeans_init_centers(X, k): # randomly pick k rows of X as initial centers return X[np.random.choice(X.shape[0], k, replace=False)]
4 5 6 7 8 9
def kmeans_assign_labels(X, centers): # calculate pairwise distances btw data and centers D = cdist(X, centers) # return index of the closest center return np.argmin(D, axis = 1)
10 11 12 13 14 15 16 17 18
def kmeans_update_centers(X, labels, K): centers = np.zeros((K, X.shape[1])) for k in range(K): # collect all points assigned to the k-th cluster Xk = X[labels == k, :] # take average centers[k,:] = np.mean(Xk, axis = 0) return centers
19 20 21 22 23
def has_converged(centers, new_centers): # return True if two sets of centers are the same return (set([tuple(a) for a in centers]) == set([tuple(a) for a in new_centers]))
Phn chính ca K-means clustering: 1 2 3 4 5 6 7 8 9 10 11 12
def kmeans(X, K): centers = [kmeans_init_centers(X, K)] labels = [] it = 0 while True: labels.append(kmeans_assign_labels(X, centers[-1])) new_centers = kmeans_update_centers(X, labels[-1], K) if has_converged(centers[-1], new_centers): break centers.append(new_centers) it += 1 return (centers, labels, it)
Áp dng thut toán va vit vào d liu ban đu, hin th kt qu cui cùng. (centers, labels, it) = kmeans(X, K) 2 print ’Centers found by our algorithm:’ 3 print centers[-1] 1
4 5
kmeans_display(X, labels[-1])
28
4 K-means Clustering
Centers found by our algorithm: [[ 1.97563391 2.01568065] [ 8.03643517 3.02468432] [ 2.99084705 6.04196062]] T kt qu này chúng ta thy rng thut toán K-means clustering làm vic khá thành công, các centers tìm đưc khá gn vi kỳ vng ban đu. Các đim thuc cùng mt cluster hu như đưc phân vào cùng mt cluster (tr mt s dim màu đ ban đu đã b phân nhm vào cluster màu xanh da tri, nhưng t l là nh và có th chp nhn đưc). Dưi đây là hình nh đng minh ha thut toán qua tng vòng lp, chúng ta thy rng thut toán trên hi t rt nhanh, ch cn 6 vòng lp đ có đưc kt qu cui cùng:
Các bn có th xem thêm các trang web minh ha thut toán K-means cluster ti: 1. Visualizing K-Means Clustering 2. Visualizing K-Means Clustering - Standford 4.3.4 Kt qu tìm đưc bng thư vin scikit-learn
Đ kim tra thêm, chúng ta hãy so sánh kt qu trên vi kt qu thu đưc bng cách s dng thư vin scikit−learn. from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=3, random_state=0).fit(X) 3 print ’Centers found by scikit-learn:’ 4 print kmeans.cluster_centers_ 5 pred_label = kmeans.predict(X) 6 kmeans_display(X, pred_label) 1 2
Centers found by scikit-learn: [[ 8.0410628 3.02094748] [ 2.99357611 6.03605255] [ 1.97634981 2.01123694]] Tht may mn (cho tôi ), hai thut toán cho cùng mt đáp s! Vi cách th nht, tôi mong mun các bn hiu rõ đưc thut toán K-means clustering làm vic như th nào. Vi cách th hai, tôi hy vng các bn bit áp dng thư vin sn có như th nào.
4.4 Tho lun 4.4.1 Hn ch
Có mt vài hn ch ca thut toán K-means clustering:
4.4 Tho lun
29
Chúng ta cn bit s lưng cluster cn clustering
Đ ý thy rng trong thut toán nêu trên, chúng ta cn bit đi lưng K là s lưng clusters. Trong thc t, nhiu trưng hp chúng ta không xác đnh đưc giá tr này. Có mt s phương pháp giúp xác đnh s lưng clusters, tôi s dành thi gian nói v chúng sau nu có dp. Bn đc có th tham kho Elbow method - Determining the number of clusters in a data set. Nghim cui cùng ph thuc vào các centers đưc khi to ban đu
Tùy vào các center ban đu mà thut toán có th có tc đ hi t rt chm, ví d: hoc thm chí cho chúng ta nghim không chính xác (ch là local minimum - đim cc tiu - mà không phi giá tr nh nht): Có mt vài cách khc phc đó là: •
Chy K-means clustering nhiu ln vi các center ban đu khác nhau ri chn cách có hàm mt mát cui cùng đt giá tr nh nht.
•
K-means++ -Improve initialization algorithm - wiki.
•
Bn nào mun tìm hiu sâu hơn có th xem bài báo khoa hc Cluster center initialization algorithm for K-means clustering.
Các cluster cn có só lưng đim gn bng nhau
Dưi đây là mt ví d vi 3 cluster vi 20, 50, và 1000 đim. Kt qu cui cùng không chính xác. Các cluster cn có dng hình tròn
Tc các cluster tuân theo phân phi chun và ma trn hip phương sai là ma trn đưng chéo có các đim trên đưng chéo ging nhau. Dưi đây là 1 ví d khi 1 cluster có dng hình dt. Khi mt cluster nm phía trong 1 cluster khác
Đây là ví d kinh đin v vic K-means clustering không th phân cm d liu. Mt cách t nhiên, chúng ta s phân ra thành 4 cm: mt trái, mt phi, ming, xunh quanh mt. Nhưng vì mt và ming nm trong khuôn mt nên K-means clustering không thc hin đưc:
30
4 K-means Clustering
Mc dù có nhng hn ch, K-means clustering vn cc kỳ quan trng trong Machine Learning và là nn tng cho nhiu thut toán phc tp khác sau này. Chúng ta cn bt đu t nhng th đơn gin. Simple is best!
4.5 Tài liu tham kho 1. Clustering documents using k-means 2. Voronoi Diagram - Wikipedia 3. Cluster center initialization algorithm for K-means clustering 4. Visualizing K-Means Clustering 5. Visualizing K-Means Clustering - Standford