Nhu cầu về nhân lực ngành Machine Learning (Deep Learning) đang ngày một cao, kéo theo đó nhu cầu học Machine Learning trên thế giới và ở Việt Nam ngày một lớn. Cá nhân tôi cũng muốn hệ thống lại kiến thức của mình về lĩnh vực này để chuẩn bị cho tương lai (đây là một trong những mục tiêu của tôi trong năm 2017).
Vũ Hữu Tiệp Machine Learning Theo blog: http://machinelearningcoban.com (Đang trình xây dựng) First Edition March 4, 2017 Contents Giới thiệu 1.1 Mục đích viết Blog 1.2 Tham khảo thêm Phân nhóm thuật toán Machine Learning 2.1 Phân nhóm dựa phương thức học 2.2 Phân nhóm dựa chức 2.3 Tài liệu tham khảo 10 Linear Regression 11 3.1 Giới thiệu 11 3.2 Phân tích toán học 12 3.3 Ví dụ Python 14 3.4 Thảo luận 18 3.5 Tài liệu tham khảo 19 K-means Clustering 20 4.1 Giới thiệu 20 4.2 Phân tích toán học 21 4.3 Ví dụ Python 25 VI Contents 4.4 Thảo luận 28 4.5 Tài liệu tham khảo 30 Index 31 Giới thiệu Những năm gần đây, AI - Artificial Intelligence (Trí Tuệ Nhân Tạo), cụ thể Machine Learning (Học Máy Máy Học - Với từ chuyên ngành, dùng song song tiếng Anh tiếng Việt, nhiên ưu tiên tiếng Anh thuận tiện việc tra cứu) lên chứng cách mạng công nghiệp lần thứ tư (1 - động nước, - lượng điện, - công nghệ thông tin) Trí Tuệ Nhân Tạo len lỏi vào lĩnh vực đời sống mà không nhận Xe tự hành Google Tesla, hệ thống tự tag khuôn mặt ảnh Facebook, trợ lý ảo Siri Apple, hệ thống gợi ý sản phẩm Amazon, hệ thống gợi ý phim Netflix, máy chơi cờ vây AlphaGo Google DeepMind, , vài ứng dụng AI/Machine Learning (Xem thêm Jarvis - trợ lý thông minh cho nhà Mark Zuckerberg.) Machine Learning tập AI Theo định nghĩa Wikipedia, Machine learning is the subfield of computer science that "gives computers the ability to learn without being explicitly programmed" Nói đơn giản, Machine Learning lĩnh vực nhỏ Khoa Học Máy Tính, có khả tự học hỏi dựa liệu đưa vào mà không cần phải lập trình cụ thể Bạn Nguyễn Xuân Khánh đại học Maryland viết sách Machine Learning tiếng Việt thú vị, bạn tham khảo Machine Learning gì? Những năm gần đây, mà khả tính toán máy tính nâng lên tầm cao lượng liệu khổng lồ thu thập hãng công nghệ lớn, Machine Learning tiến thêm bước tiến dài lĩnh vực đời gọi Deep Learning (Học Sâu) Deep Learning giúp máy tính thực thi việc tưởng chừng vào 10 năm trước: phân loại ngàn vật thể khác ảnh, tự tạo thích cho ảnh, bắt chước giọng nói chữ viết người, giao tiếp với người, hay chí sáng tác văn hay âm nhạc (Xem thêm Inspirational Applications of Deep Learning) Mối quan hệ Artificial Intelligence, Machine Learning, Deep Learning cho Hình 1.1 Giới thiệu Fig 1.1: Mối quan hệ AI, Machine Learning Deep Learning Nguồn: What’s the Difference Between Artificial Intelligence, Machine Learning, and Deep Learning? 1.1 Mục đích viết Blog Nhu cầu nhân lực ngành Machine Learning (Deep Learning) ngày cao, kéo theo nhu cầu học Machine Learning giới Việt Nam ngày lớn Cá nhân muốn hệ thống lại kiến thức lĩnh vực để chuẩn bị cho tương lai (đây mục tiêu năm 2017) Tôi cố gắng từ thuật toán Machine Learning kèm theo ví dụ mã nguồn viết Tôi viết 1-2 tuần (việc viết công thức toán code blog thực tốn nhiều thời gian nghĩ) Đồng thơi, mong muốn nhận phản hồi bạn đọc để qua thảo luận, bạn nắm bắt thuật toán Khi chuẩn bị viết, giả định bạn đọc có chút kiến thức Đại Số Tuyến Tính (Linear Algebra), Xác Suât Thống Kê (Probability and Statistics) có kinh nghiệm lập trình Python Nếu bạn chưa có nhiều kinh nghiệm lĩnh vực này, đừng lo lắng sử dụng vài kỹ thuật Hãy để lại câu hỏi bạn phần Comment bên bài, thảo luận thêm với bạn Trong blog này, giới thiệu nhóm thuật toán Machine learning Mời bạn theo dõi 1.2 Tham khảo thêm 1.2 Tham khảo thêm 1.2.1 Các khóa học Tiếng Anh Machine Learning với thầy Andrew Ng Coursera (Khóa học tiếng Machine Learning ) Deep Learning by Google Udacity (Khóa học nâng cao Deep Learning với Tensorflow) Machine Learning mastery (Các thuật toán Machine Learning bản) Tiếng Việt Lưu ý: Các khóa học chưa tham gia, đưa để bạn tham khảo Machine Learning 1/2017 Nhập môn Machine Learning, Tech Master- Cao Thanh Hà POSTECH() 1.2.2 Các trang Machine Learning tiếng Việt khác Machine Learning Xử Lý Ngôn Ngữ Tự Nhiên - Nhóm Đông Du Nhật Bản Machine Learning cho người bắt đầu - Ông Xuân Hồng JAIST Machine Learning book for Vietnamese - Nguyễn Xuân Khánh University of Maryland Phân nhóm thuật toán Machine Learning Có hai cách phổ biến phân nhóm thuật toán Machine learning Một dựa phương thức học (learning style), hai dựa chức (function) (của thuật toán) 2.1 Phân nhóm dựa phương thức học Theo phương thức học, thuật toán Machine Learning thường chia làm nhóm: Supervise learning, Unsupervised learning, Semi-supervised lerning Reinforcement learning Có số cách phân nhóm Semi-supervised learning Reinforcement learning 2.1.1 Supervised Learning (Học có giám sát) Supervised learning thuật toán dự đoán đầu (outcome) liệu (new input) dựa cặp (input, outcome) biết từ trước Cặp liệu gọi (data label ), tức (dữ liệu, nhãn) Supervised learning nhóm phổ biến thuật toán Machine Learning Một cách toán học, Supervised learning chúng có tập hợp biến đầu vào X = {x1 , x2 , , xN } tập hợp nhãn tương ứng Y = {y1 , y2 , , yN }, xi , yi vector Các cặp liệu biết trước (xi , yi ) ∈ X × Y gọi tập training data (dữ liệu huấn luyện) Từ tập traing data này, cần tạo hàm số ánh xạ phần tử từ tập X sang phần tử (xấp xỉ) tương ứng tập Y: yi ≈ f (xi ), ∀i = 1, 2, , N Mục đích xấp xỉ hàm số f thật tốt để có liệu x mới, tính nhãn tương ứng y = f (x) Ví dụ 1: nhận dạng chữ viết tay (Hình 2.1), ta có ảnh hàng nghìn ví dụ chữ số viết nhiều người khác Chúng ta đưa ảnh vào 2.1 Phân nhóm dựa phương thức học thuật toán cho biết ảnh tương ứng với chữ số Sau thuật toán tạo (sau học) mô hình, tức hàm số mà đầu vào ảnh đầu chữ số, nhận ảnh mà mô hình chưa nhìn thấy bao giờ, dự đoán ảnh chứa chữ số Fig 2.1: MNIST: sở liệu chữ số viết tay (Nguồn: Simple Neural Network implementation in Ruby) Ví dụ giống với cách học người nhỏ Ta đưa bảng chữ cho đứa trẻ cho chúng chữ A, chữ B Sau vài lần dạy trẻ nhận biết đâu chữ A, đâu chữ B sách mà chúng chưa nhìn thấy Ví dụ 2: Thuật toán dò khuôn mặt ảnh phát triển từ lâu Thời gian đầu, facebook sử dụng thuật toán để khuôn mặt ảnh yêu cầu người dùng tag friends - tức gán nhãn cho khuôn mặt Số lượng cặp liệu (khuôn mặt, tên người) lớn, độ xác lần tự động tag lớn Ví dụ 3: Bản thân thuật toán dò tìm khuôn mặt ảnh thuật toán Supervised learning với training data (dữ liệu học) hàng ngàn cặp (ảnh, mặt người) (ảnh, mặt người) đưa vào Chú ý liệu phân biệt mặt người mặt ngưòi mà không phân biệt khuôn mặt người khác Thuật toán supervised learning tiếp tục chia nhỏ thành hai loại chính: Classification (Phân loại) Một toán gọi classification label input data chia thành số hữu hạn nhóm Ví dụ: Gmail xác định xem email có phải spam hay không; hãng tín dụng xác định xem khách hàng có khả toán nợ hay không Ba ví dụ phía chia vào loại Phân nhóm thuật toán Machine Learning Regression (Hồi quy) (tiếng Việt dịch Hồi quy, không thích cách dịch thân không hiểu nghĩa gì) Nếu label không chia thành nhóm mà giá trị thực cụ thể Ví dụ: nhà rộng x m2 , có y phòng ngủ cách trung tâm thành phố z km có giá bao nhiêu? Gần Microsoft có ứng dụng dự đoán giới tính tuổi dựa khuôn mặt Phần dự đoán giới tính coi thuật toán Classification, phần dự đoán tuổi coi thuật toán Regression Chú ý phần dự đoán tuổi coi Classification ta coi tuổi số nguyên dương không lớn 150, có 150 class (lớp) khác 2.1.2 Unsupervised Learning (Học không giám sát) Trong thuật toán này, outcome hay nhãn mà có liệu đầu vào Thuật toán unsupervised learning dựa vào cấu trúc liệu để thực công việc đó, ví dụ phân nhóm (clustering) giảm số chiều liệu (dimention reduction) để thuận tiện việc lưu trữ tính toán Một cách toán học, Unsupervised learning có liệu vào X mà nhãn Y tương ứng Những thuật toán loại gọi Unsupervised learning không giống Supervised learning, câu trả lời xác cho liệu đầu vào Giống ta học, thầy cô giáo cho ta biết chữ A hay chữ B Cụm không giám sát đặt tên theo nghĩa Các toán Unsupervised learning tiếp tục chia nhỏ thành hai loại: Clustering (phân nhóm) Một toán phân nhóm toàn liệu X thành nhóm nhỏ dựa liên quan liệu nhóm Ví dụ: phân nhóm khách hàng dựa hành vi mua hàng Điều giống việc ta đưa cho đứa trẻ nhiều mảnh ghép với hình thù màu sắc khác nhau, ví dụ tam giác, vuông, tròn với màu xanh đỏ, sau yêu cẩu trẻ phân chúng thành nhóm Mặc dù không cho trẻ biết mảnh tương ứng với hình màu nào, nhiều khả chúng phân loại mảnh ghép theo màu hình dạng 2.1 Phân nhóm dựa phương thức học Association Là toán muốn khám phá quy luật dựa nhiều liệu cho trước Ví dụ: khách hàng nam mua quần áo thường có xu hướng mua thêm đồng hồ thắt lưng; khán giả xem phim Spider Man thường có xu hướng xem thêm phim Bat Man, dựa vào tạo hệ thống gợi ý khách hàng (Recommendation System), thúc đẩy nhu cầu mua sắm 2.1.3 Semi-Supervised Learning (Học bán giám sát) Các toán có lượng lớn liệu X phần chúng gán nhãn gọi Semi-Supervised Learning Những toán thuộc nhóm nằm hai nhóm nêu bên Một ví dụ điển hình nhóm có phần ảnh văn gán nhãn (ví dụ ảnh người, động vật văn khoa học, trị) phần lớn ảnh/văn khác chưa gán nhãn thu thập từ internet Thực tế cho thấy nhiều toàn Machine Learning thuộc vào nhóm việc thu thập liệu có nhãn tốn nhiều thời gian có chi phí cao Rất nhiều loại liệu chí cần phải có chuyên gia gán nhãn (ảnh y học chẳng hạn) Ngược lại, liệu chưa có nhãn thu thập với chi phí thấp từ internet 2.1.4 Reinforcement Learning (Học Củng Cố) Reinforcement learning toán giúp cho hệ thống tự động xác định hành vi dựa hoàn cảnh để đạt lợi ích cao (maximizing the performance) Hiện tại, Reinforcement learning chủ yếu áp dụng vào Lý Thuyết Trò Chơi (Game Theory), thuật toán cần xác định nưóc để đạt điểm số cao Ví dụ 1: AlphaGo (Hình 2.2) gần tiếng với việc chơi cờ vây thắng người Cờ vây xem có độ phức tạp cao với tổng số nước xấp xỉ 10761 , so với cờ vua 10120 tổng số nguyên tử toàn vũ trụ khoảng 1080 !! Vì vậy, thuật toán phải chọn nước tối ưu số hàng nhiều tỉ tỉ lựa chọn, tất nhiên, áp dụng thuật toán tương tự IBM Deep Blue) (IBM Deep Blue thắng người môn cờ vua 20 năm trước) Về bản, AlphaGo bao gồm thuật toán thuộc Supervised learning Reinforcement learning Trong phần Supervised learning, liệu từ ván cờ người chơi với đưa vào để huấn luyện Tuy nhiên, mục đích cuối AlphaGo chơi người mà phải chí thắng người Vì vậy, sau học xong ván cờ người, AlphaGo tự chơi với với hàng triệu ván chơi để tìm nước tối ưu Thuật toán phần tự chơi xếp vào loại Reinforcement learning (Xem thêm Google DeepMind’s AlphaGo: How it works) 3.3 Ví dụ Python 17 Fig 3.2: Minh họa nghiệm ví dụ sử dụng mô hình để dự đoán cân nặng hai người có chiều cao 155 160 cm mà không dùng tính toán nghiệm y1 = w_1*155 + w_0 y2 = w_1*160 + w_0 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) Predict weight of person 160 cm: 55.74 (kg), real number: 56 (kg) Chúng ta thấy kết dự đoán gần với số liệu thực tế 3.3.4 Nghiệm theo thư viện scikit-learn Tiếp theo, sử dụng thư viện scikit-learn Python để tìm nghiệm from sklearn import datasets, linear_model # fit the model by Linear Regression regr = linear_model.LinearRegression(fit_intercept=False) # fit_intercept = False for calculating the bias regr.fit(Xbar, y) # Compare two results print( ’Solution found by scikit-learn print( ’Solution found by (5): ’, w.T) : ’, regr.coef_ ) Solution found by scikit-learn : [[ -33.73541021 0.55920496]] Solution found by (5): [[ -33.73541021 0.55920496 ]] 18 Linear Regression Chúng ta thấy hai kết thu nhau! (Nghĩa không mắc lỗi cách tìm nghiệm phần trên) Source code Jupyter Notebook cho 3.4 Thảo luận 3.4.1 Các toán giải Linear Regression Hàm số y ≈ f (x) = wT x hàm tuyến tính theo w x Trên thực tế, Linear Regression áp dụng cho mô hình cần tuyến tính theo w Ví dụ: y ≈ w1 x1 + w2 x2 + w3 x21 + w4 sin(x2 ) + w5 x1 x2 + w0 hàm tuyến tính theo w giải Linear Regression Với ˜ = [x1 , x2 , x21 , sin(x2 ), x1 x2 ] liệu đầu vào x = [x1 ; x2 ], tính toán liệu x (đọc x tilde tiếng Anh) áp dụng Linear Regression với liệu Xem thêm ví dụ Quadratic Regression (Hồi Quy Bậc Hai) Fig 3.3: Quadratic Regression (Nguồn: Quadratic Regression) 3.4.2 Hạn chế Linear Regression Hạn chế Linear Regression nhạy cảm với nhiễu (sensitive to noise) Trong ví dụ mối quan hệ chiều cao cân nặng bên trên, có cặp liệu nhiễu (150 cm, 90kg) kết sai khác nhiều (Xem Hình 3.4) 3.5 Tài liệu tham khảo 19 Fig 3.4: Linear Regression nhạy cảm với nhiễu Vì vậy, trước thực Linear Regression, nhiễu (outlier ) cần phải loại bỏ Bước gọi tiền xử lý (pre-processing) Hạn chế thứ hai Linear Regression không biễu diễn mô hình phức tạp Mặc dù phần trên, thấy phương pháp áp dụng quan hệ outcome input không thiết phải tuyến tính, mối quan hệ đơn giản nhiều so với mô hình thực tế Hơn nữa, tự hỏi: làm để xác định hàm x21 , sin(x2 ), x1 x2 trên?! 3.4.3 Các phương pháp tối ưu Linear Regression mô hình đơn giản, lời giải cho phương trình đạo hàm đơn giản Trong hầu hết trường hợp, giải phương trình đạo hàm Nhưng có điều nên nhớ, tính đạo hàm có hội 3.5 Tài liệu tham khảo Linear Regression - Wikipedia Simple Linear Regression Tutorial for Machine Learning Least Squares, Pseudo-Inverses, PCA & SVD K-means Clustering 4.1 Giới thiệu Trong trước, làm quen với thuật toán Linear Regression - thuật toán đơn giản Supervised learning Bài giới thiệu thuật toán Unsupervised learning - thuật toán K-means clustering (phân cụm K-means) Trong thuật toán K-means clustering, nhãn (label) điểm liệu Mục đích làm thể để phân liệu thành cụm (cluster) khác cho liệu cụm có tính chất giống Ví dụ: Một công ty muốn tạo sách ưu đãi cho nhóm khách hàng khác dựa tương tác khách hàng với công ty (số năm khách hàng; số tiền khách hàng chi trả cho công ty; độ tuổi; giới tính; thành phố; nghề nghiệp; ) Giả sử công ty có nhiều liệu nhiều khách hàng chưa có cách chia toàn khách hàng thành số nhóm/cụm khác Nếu người biết Machine Learning đặt câu hỏi này, phương pháp anh (chị) ta nghĩ đến K-means Clustering Vì thuật toán mà anh tìm sách, khóa học Machine Learning Và anh đọc blog Machine Learning bản Sau phân nhóm, nhân viên công ty lựa chọn vài khách hàng nhóm để định xem nhóm tương ứng với nhóm khách hàng Phần việc cuối cần can thiệp người, lượng công việc rút gọn nhiều Ý tưởng đơn giản cluster (cụm) tập hợp điểm gần không gian (không gian có nhiều chiều trường hợp thông tin điểm liệu lớn) Hình bên ví dụ cụm liệu (từ rôi viết gọn cluster ) Giả sử cluster có điểm đại diện (center ) màu vàng Và điểm xung quanh center thuộc vào nhóm với center Một cách đơn giản nhất, xét điểm bất kỳ, ta xét xem điểm gần với center thuộc nhóm với center 4.2 Phân tích toán học 21 Tới đây, có toán thú vị: Trên vùng biển hình vuông lớn có ba đảo hình vuông, tam giác, tròn màu vàng hình Một điểm biển gọi thuộc lãnh hải đảo nằm gần đảo so với hai đảo Hãy xác định ranh giới lãnh hải đảo Hình hình minh họa cho việc phân chia lãnh hải có đảo khác biểu diễn hình tròn màu đen: Chúng ta thấy đường phân định lãnh hải đường thẳng (chính xác chúng đường trung trực cặp điểm gần nhau) Vì vậy, lãnh hải đảo hình đa giác Cách phân chia toán học gọi Voronoi Diagram Trong không gian ba chiều, lấy ví dụ hành tinh, (tạm gọi là) lãnh không hành tinh đa diện Trong không gian nhiều chiều hơn, có thứ (mà gọi là) siêu đa diện (hyperpolygon) Quay lại với toán phân nhóm cụ thể thuật toán K-means clustering, cần chút phân tích toán học trước tới phần tóm tắt thuật toán phần Nếu bạn không muốn đọc nhiều toán, bạn bỏ qua phần (Tốt đừng bỏ qua, bạn tiếc đấy) 4.2 Phân tích toán học Mục đích cuối thuật toán phân nhóm là: từ liệu đầu vào số lượng nhóm muốn tìm, center nhóm phân điểm liệu vào nhóm tương ứng Giả sử thêm điểm liệu thuộc vào nhóm 4.2.1 Một số ký hiệu toán học Giả sử có N điểm liệu X = [x1 , x2 , , xN ] ∈ Rd×N K < N số cluster muốn phân chia Chúng ta cần tìm center m1 , m2 , , mK ∈ Rd×1 label điểm liệu Lưu ý ký hiệu toán học: viết tôi, số vô hướng biểu diễn chữ viết dạng không in đậm, viết hoa, ví dụ x1 , N, y, k Các vector biểu diễn chữ thường in đậm, ví dụ m, x1 Các ma trận biểu diễn chữ viết hoa in đậm, ví dụ X, M, Y Lưu ý nêu Linear Regression Tôi xin không nhắc lại 22 K-means Clustering Với điểm liệu xi đặt yi = [yi1 , yi1 , , yiK ] label vector nó, xi phân vào cluster k yik = yij = 0, ∀j = k Điều có nghĩa có phần tử vector yi (tương ứng với cluster xi ), phần tử lại Ví dụ: điểm liệu có label vector [1, 0, 0, , 0] thuộc vào cluster 1, [0, 1, 0, , 0] thuộc vào cluster 2, Cách mã hóa label liệu goi biểu diễn one-hot Chúng ta thấy cách biểu diễn one-hot phổ biến Machine Learning Ràng buộc yi viết dạng toán học sau: K yik ∈ 0, 1, yik = (1) (4.1) k=1 4.2.2 Hàm mát toán tối ưu Nếu ta coi center mk center (hoặc representative) cluster ước lượng tất điểm phân vào cluster mk , điểm liệu xi phân vào cluster k bị sai số (xi − mk ) Chúng ta mong muốn sai số có trị tuyệt đối nhỏ nên (giống Linear Regression) ta tìm cách để đại lượng sau đạt giá trị nhỏ nhất: xi − mk 2 (4.2) Hơn nữa, xi phân vào cluster k nên yik = 1, yij = 0, ∀j = k Khi đó, biểu thức bên viết lại là: K yik xi − mk 22 yij xi − mj = 2 (4.3) j=1 (Hy vọng chỗ không khó hiểu) Sai số cho toàn liệu là: N K L(Y, M) = 2 yij xi − mj (4.4) i=1 j=1 Trong Y = [y1 ; y2 ; ; yN ], M = [m1 , m2 , mK ] ma trận tạo label vector điểm liệu center cluster Hàm số mát toán K-means clustering hàm L(Y, M) với ràng buộc nêu phương trình (1) Tóm lại, cần tối ưu toán sau: N K yij xi − mj Y, M = arg Y,M i=1 j=1 2 (2) (4.5) 4.2 Phân tích toán học 23 K subject to: yij ∈ 0, ∀i, j; yij = ∀i (4.6) j=1 (subject to nghĩa thỏa mãn điều kiện) Nhắc lại khái niệm arg min: Chúng ta biết ký hiệu giá trị nhỏ hàm số, arg giá trị biến số để hàm số đạt giá trị nhỏ Nếu f (x) = x2 − 2x + = (x − 1)2 giá trị nhỏ hàm số 0, đạt x = Trong ví dụ minx f (x) = arg minx f (x) = Thêm ví dụ khác, x1 = 0, x2 = 10, x3 = ta nói arg mini xi = số để xi đạt giá trị nhỏ (bằng 0) Biến số viết bên biến số cúng ta cần tối ưu Trong toán tối ưu, ta thường quan tâm tới arg min 4.2.3 Thuật toán tối ưu hàm mát Bài toán (2) toán khó tìm điểm tối ưu có thêm điều kiện ràng buộc Bài toán thuộc loại mix-integer programming (điều kiện biến số nguyên) - loại khó tìm nghiệm tối ưu toàn cục (global optimal point, tức nghiệm làm cho hàm mát đạt giá trị nhỏ có thể) Tuy nhiên, số trường hợp tìm phương pháp để tìm nghiệm gần điểm cực tiểu (Nếu nhớ chương trình toán ôn thi đại học điểm cực tiểu chưa phải điểm làm cho hàm số đạt giá trị nhỏ nhất) Một cách đơn giản để giải toán (2) xen kẽ giải Y M biến lại cố định Đây thuật toán lặp, kỹ thuật phổ biến giải toán tối ưu Chúng ta lật lượt giải hai toán sau đây: Cố định M, tìm Y Giả sử tìm centers, tìm label vector để hàm mát đạt giá trị nhỏ Điều tương đương với việc tìm cluster cho điểm liệu Khi centers cố định, toán tìm label vector cho toàn liệu chia nhỏ thành toán tìm label vector cho điểm liệu xi sau: K yij xi − mj yi = arg yi 2 (3) (4.7) yij = (4.8) j=1 K subject to: yij ∈ 0, ∀j; j=1 24 K-means Clustering Vì có phần tử label vector yi nên toán (3) tiếp tục viết dạng đơn giản hơn: (4.9) j = arg xi − mj 22 j Vì xi − mj 22 bình phương khoảng cách tính từ điểm xi tới center mj , ta kết luận điểm xi thuộc vào cluster có center gần nhất! Từ ta dễ dàng suy label vector điểm liệu Cố định Y, tìm M Giả sử tìm cluster cho điểm, tìm center cho cluster để hàm mát đạt giá trị nhỏ Một xác định label vector cho điểm liệu, toán tìm center cho cluster rút gọn thành: N yij xi − mj 22 mj = arg mj (4.10) i=1 Tới đây, ta tìm nghiệm phương pháp giải đạo hàm 0, hàm cần tối ưu hàm liên tục có đạo hàm xác định điểm Và quan trọng hơn, hàm hàm convex (lồi) theo mj nên tìm giá trị nhỏ điểm tối ưu tương ứng Sau có dịp, nói thêm tối ưu lồi (convex optimization) - mảng quan trọng toán tối ưu Đặt l(mj ) hàm bên dấu arg min, ta có đạo hàm: ∂l(mj ) =2 ∂mj N yij (mj − xi ) (4.11) i=1 Giải phương trình đạo hàm ta có: N mj N yij = i=1 ⇒ mj = yij xi (4.12) i=1 N i=1 yij xi N i=1 yij (4.13) Nếu để ý chút, thấy mẫu số phép đếm số lượng điểm liệu cluster j (Bạn có nhận không? ) Còn tử số tổng điểm liệu 4.3 Ví dụ Python 25 cluster j (Nếu bạn đọc nhớ điều kiện ràng buộc yij nhanh chóng nhìn điều này) Hay nói cách đơn giản nhiều: mj trung bình cộng điểm cluster j Tên gọi K-means clustering xuất phát từ 4.2.4 Tóm tắt thuật toán Tới xin tóm tắt lại thuật toán (đặc biệt quan trọng với bạn bỏ qua phần toán học bên trên) sau: Đầu vào: Dữ liệu X số lượng cluster cần tìm K Đầu ra: Các center M label vector cho điểm liệu Y Chọn K điểm làm center ban đầu Phân điểm liệu vào cluster có center gần Nếu việc gán liệu vào cluster bước không thay đổi so với vòng lặp trước ta dừng thuật toán Cập nhật center cho cluster cách lấy trung bình cộng tất các điểm liệu gán vào cluster sau bước Quay lại bước Chúng ta đảm bảo thuật toán dừng lại sau số hữu hạn vòng lặp Thật vậy, hàm mát số dương sau bước 3, giá trị hàm mát bị giảm Theo kiến thức dãy số chương trình cấp 3: dãy số giảm bị chặn hội tụ! Hơn nữa, số lượng cách phân nhóm cho toàn liệu hữu hạn nên đến lúc đó, hàm mát thay đổi, dừng thuật toán Chúng ta có vài thảo luận thuật toán này, hạn chế số phương pháp khắc phục Nhưng trước hết, xem thể ví dụ cụ thể 4.3 Ví dụ Python 4.3.1 Giới thiệu toán Để kiểm tra mức độ hiểu thuật toán, làm ví dụ đơn giản (thường gọi toy example) Trước hết, chọn center cho cluster tạo liệu cho cluster cách lấy mẫu theo phân phối chuẩn có kỳ vọng center cluster ma trận hiệp phương sai (covariance matrix) ma trận đơn vị 26 K-means Clustering Trước tiên, cần khai báo thư viện cần dùng Chúng ta cần numpy matplotlib Linear Regression cho việc tính toán ma trận hiển thị liệu Chúng ta cần thêm thư viện scipy.spatial.distance để tính khoảng cách cặp điểm hai tập hợp cách hiệu import numpy as np import matplotlib.pyplot as plt from scipy.spatial.distance import cdist np.random.seed(11) Tiếp theo, ta tạo liệu cách lấy điểm theo phân phối chuẩn có kỳ vọng điểm có tọa độ (2, 2), (8, 3) (3, 6), ma trận hiệp phương sai giống ma trận đơn vị Mỗi cluster có 500 điểm (Chú ý điểm liệu hàng ma trận liệu means = [[2, 2], [8, 3], [3, 6]] cov = [[1, 0], [0, 1]] N = 500 X0 = np.random.multivariate_normal(means[0], cov, N) X1 = np.random.multivariate_normal(means[1], cov, N) X2 = np.random.multivariate_normal(means[2], cov, N) X = np.concatenate((X0, X1, X2), axis = 0) K = 10 11 original_label = np.asarray([0]*N + [1]*N + [2]*N).T 4.3.2 Hiển thị liệu đồ thị Chúng ta cần hàm kmeans_display để hiển thị liệu Sau hiển thị liệu theo nhãn ban đầu def kmeans_display(X, label): K = np.amax(label) + X0 = X[label == 0, :] X1 = X[label == 1, :] X2 = X[label == 2, :] 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) 10 11 12 13 plt.axis(’equal’) plt.plot() plt.show() 14 15 kmeans_display(X, original_label) Trong đồ thị trên, cluster tương ứng với màu Có thể nhận thấy có vài điểm màu đỏ bị lẫn sang phần cluster màu xanh 4.3 Ví dụ Python 27 4.3.3 Các hàm số cần thiết cho K-means clustering Viết hàm: kmeans_init_centers để khởi tạo centers ban đầu kmeans_asign_labels để gán nhán cho điểm biết centers kmeans_update_centers để cập nhật centers dữa liệu vừa gán nhãn has_converged để kiểm tra điều kiện dừng thuật toán 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)] 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])) Phần K-means clustering: 10 11 12 def kmeans(X, K): centers = [kmeans_init_centers(X, K)] labels = [] it = 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 += return (centers, labels, it) Áp dụng thuật toán vừa viết vào liệu ban đầu, hiển thị kết cuối (centers, labels, it) = kmeans(X, K) print ’Centers found by our algorithm:’ print centers[-1] kmeans_display(X, labels[-1]) 28 K-means Clustering Centers found by our algorithm: [[ 1.97563391 2.01568065] [ 8.03643517 3.02468432] [ 2.99084705 6.04196062]] Từ kết thấy thuật toán K-means clustering làm việc thành công, centers tìm gần với kỳ vọng ban đầu Các điểm thuộc cluster phân vào cluster (trừ số diểm màu đỏ ban đầu bị phân nhầm vào cluster màu xanh da trời, tỉ lệ nhỏ chấp nhận được) Dưới hình ảnh động minh họa thuật toán qua vòng lặp, thấy thuật toán hội tụ nhanh, cần vòng lặp để có kết cuối cùng: Các bạn xem thêm trang web minh họa thuật toán K-means cluster tại: Visualizing K-Means Clustering Visualizing K-Means Clustering - Standford 4.3.4 Kết tìm thư viện scikit-learn Để kiểm tra thêm, so sánh kết với kết thu cách sử dụng thư viện scikit−learn from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=3, random_state=0).fit(X) print ’Centers found by scikit-learn:’ print kmeans.cluster_centers_ pred_label = kmeans.predict(X) kmeans_display(X, pred_label) Centers found by scikit-learn: [[ 8.0410628 3.02094748] [ 2.99357611 6.03605255] [ 1.97634981 2.01123694]] Thật may mắn (cho tôi), hai thuật toán cho đáp số! Với cách thứ nhất, mong muốn bạn hiểu rõ thuật toán K-means clustering làm việc Với cách thứ hai, hy vọng bạn biết áp dụng thư viện sẵn có 4.4 Thảo luận 4.4.1 Hạn chế Có vài hạn chế thuật toán K-means clustering: 4.4 Thảo luận 29 Chúng ta cần biết số lượng cluster cần clustering Để ý thấy thuật toán nêu trên, cần biết đại lượng K số lượng clusters Trong thực tế, nhiều trường hợp không xác định giá trị Có số phương pháp giúp xác định số lượng clusters, dành thời gian nói chúng sau có dịp Bạn đọc tham khảo Elbow method - Determining the number of clusters in a data set Nghiệm cuối phụ thuộc vào centers khởi tạo ban đầu Tùy vào center ban đầu mà thuật toán có tốc độ hội tụ chậm, ví dụ: chí cho nghiệm không xác (chỉ local minimum - điểm cực tiểu - mà giá trị nhỏ nhất): Có vài cách khắc phục là: • Chạy K-means clustering nhiều lần với center ban đầu khác chọn cách có hàm mát cuối đạt giá trị nhỏ • K-means++ -Improve initialization algorithm - wiki • Bạn muốn tìm hiểu sâu xem báo khoa học Cluster center initialization algorithm for K-means clustering Các cluster cần có só lượng điểm gần Dưới ví dụ với cluster với 20, 50, 1000 điểm Kết cuối không xác Các cluster cần có dạng hình tròn Tức cluster tuân theo phân phối chuẩn ma trận hiệp phương sai ma trận đường chéo có điểm đường chéo giống Dưới ví dụ cluster có dạng hình dẹt Khi cluster nằm phía cluster khác Đây ví dụ kinh điển việc K-means clustering phân cụm liệu Một cách tự nhiên, phân thành cụm: mắt trái, mắt phải, miệng, xunh quanh mặt Nhưng mắt miệng nằm khuôn mặt nên K-means clustering không thực được: 30 K-means Clustering Mặc dù có hạn chế, K-means clustering quan trọng Machine Learning tảng cho nhiều thuật toán phức tạp khác sau Chúng ta cần thứ đơn giản Simple is best! 4.5 Tài liệu tham khảo Clustering documents using k-means Voronoi Diagram - Wikipedia Cluster center initialization algorithm for K-means clustering Visualizing K-Means Clustering Visualizing K-Means Clustering - Standford Index Association problems, Classification problems, Clustering problems, Regression problems, Reinforcement Learning, Linear Regression, 11 Semi-Supervised Learning, Supervised Learning, pseudo inverse, 14 Unsupervised Learning, ... Deep Learning với Tensorflow) Machine Learning mastery (Các thuật toán Machine Learning bản) Tiếng Việt Lưu ý: Các khóa học chưa tham gia, đưa để bạn tham khảo Machine Learning 1/2017 Nhập môn Machine. .. Artificial Intelligence, Machine Learning, and Deep Learning? 1.1 Mục đích viết Blog Nhu cầu nhân lực ngành Machine Learning (Deep Learning) ngày cao, kéo theo nhu cầu học Machine Learning giới Việt... môn Machine Learning, Tech Master- Cao Thanh Hà POSTECH() 1.2.2 Các trang Machine Learning tiếng Việt khác Machine Learning Xử Lý Ngôn Ngữ Tự Nhiên - Nhóm Đông Du Nhật Bản Machine Learning cho