Lời mở đầu
Chắc bạn đã nghe nói về Machine Learning (hoặc “Data Mining”, or “Big data”, or “Data Analysis”, or “Data Science”, or “Cloud Computing”) nhưng bạn không thực sự hiểu nó là cái gì? OK hãy đọc loạt bài này.
Machine Learning được sử dụng ở hầu hết mọi chỗ, nơi mà có những bản ghi dữ liệu được ghi nhận thì đều có thể đem Machine Learning ra để ốp vào. Ví dụ, ML được ngân hàng sử dụng để phát hiện gian lận hoặc rủi ro, ML được máy chủ email dùng để xác định thư rác, ML được bác sĩ sử dụng trong việc chẩn đoán, các nhà sinh học sử dụng ML để phân tích DNA, ML được google/bing/yahoo sử dụng dể trả lời các truy vấn của bạn.
Mục tiêu của seri này là giúp bạn hiểu một chút về ML và có những hình dung trong các kĩ thuật sử dụng nó. Thay vì viết lý thuyết, nội dung ở đây sẽ chỉ toàn ví dụ mà thôi, bạn không cần là nhà khoa học, không cần phải có hiểu biết về máy tính và toán.
Định nghĩa
Machine Learning hay Data Mining hay bất cứ từ đồng nghĩa nào, rút cục cũng là những chương trình có tính sáng tạo, để đưa ra những dự đoán, giúp đỡ người dùng hiểu các hiện tượng phức tạp. Nghe có vẻ đã bắt đầu phức tạp. Ok, hãy trở lại đơn giản, bằng một khái nhiệm quan trọng nhất của Machine Learning: Phân lớp (hoặc phân loại).
Bài toán phân lớp (classification)
Trong machine learning có hai khai niệm: Phân nhóm và phân lớp (clustering và classification), ngắn gọn thì bài toán clustering: Có một hỗn hợp X phần tử, phải phân chia thành n nhóm, ta không biết trước n, càng không biết trước tên nhóm, còn bài toán classification là có sẵn 100 thằng ở m nhóm, m nhóm này cho trước, biết tên của từng nhóm, giờ có một thằng mới, xếp nó vào nhóm nào?
Ví dụ về hoa Irises, chẳng biết là hoa gì, thôi gọi là hoa phượng đi cho dễ.
Chúng ta sẽ quan sát một bông hoa phượng, đo chiều dài, chiều rộng của cánh hoa và đài hoa, vậy là mỗi bông hoa sẽ có 4 thuộc tính: Chiều dài cánh hoa, chiều rộng cánh hoa, chiều dài đài hoa, chiều rộng đài hoa.
Danh sách các bông hoa với 4 thuộc tính gọi là một “Hoa phượng dataset”, ví dụ thế này:
Giả sử rằng chúng ta có 149 bông hoa, với đầy đủ 4 thuộc tính, và được phân lớp sẵn, kiểu vừa đo kích thước cánh hoa vừa đọc biển treo trên cây, biết cây đó trồng ở đâu, loài nào. Làm tới bông hoa thứ 150 thì mệt quá, đo xong 4 thuộc tính thì có một em xinh tươi sexy đi qua nên chúng ta chạy theo ngắm mà quên luôn ghi loài của bông hoa.
Ok, giả sử có 3 loại phượng là phượng tím, phượng đỏ, phượng Hải Phòng (cứ giả sử Hải Phòng được bón nhiều phân nên phượng đột biến khác với phượng đỏ bình thường). Vấn đề của chúng ta là căn cứ vào kích thước của đài hoa, cánh hoa, xác định bông thứ 150 thuộc loài phượng nào?
Dĩ nhiên, trong thực tế, bài toán phân lớp không chỉ được sử dụng để xác định loài hoa. Các ngân hàng đang sử dụng nó để phân loại khách hàng (Ví dụ, là khách hàng này sẽ là người trả nợ thẻ tín dụng đúng hạn). Bệnh viện đang sử dụng nó để phân loại bệnh nhân (Ví dụ, là bệnh nhân này vẫn sẽ có sức khỏe tốt trong ngày mai). Các hãng bảo hiểm đang sử dụng nó để phân loại khách hàng (Ví dụ, xác suất bao nhiêu cho khách hàng này để có một tai nạn xe hơi). Nhưng phân loại cũng có thể được sử dụng ở một mức độ sâu hơn. Ví dụ, máy ảnh của bạn sử dụng phân loại để tìm khuôn mặt trong ảnh. Dịch vụ bưu chính sử dụng phân loại để nhận biết nhận chỉ bằng văn bản. Thương nhân đang sử dụng phân loại để dự đoán thị trường. Các nhà khoa học thời tiết sử dụng phân loại để dự đoán thời tiết. Các nhà khoa học dược phẩm sử dụng phân loại để dự báo tác động của các phân tử, vv
Sự khác biệt chính giữa các ví dụ này là các thuộc tính. Ví dụ, đối với các khách hàng ngân hàng, các thuộc tính sẽ được thu nhập hàng tháng, số điểm tín dụng, địa chỉ hoặc số lần sử dụng thẻ tín dụng trong tuần trước. Đối với các bệnh nhân trong bệnh viện, các thuộc tính sẽ là giới tính, nhịp tim và những huyết áp. Đối với những hình ảnh hoặc cho các dịch vụ bưu chính, các thuộc tính sẽ là mỗi điểm ảnh màu.
Trở lại với câu chuyện hoa phượng: Hãy nhớ rằng, chúng ta có một danh sách các bông hoa phượng mô tả bởi chiều dài và chiều rộng của cánh hoa và đài hoa (đó gọi là các thuộc tính) của chúng. Ngoài ra, chúng ta biết loài của 149 bông, chỉ còn thiếu bông cuối cùng mà thằng đi làm khảo sát bỏ quên vì gái (ok chúng ta sẽ gọi bông chưa biết loài này là “bông hóa bí ẩn”), và chúng ta muốn tìm ra bông hoa bí ẩn này thuộc loài nào. Đối với nhiệm vụ này, ta giả sử các thuộc tính của bông hoa sẽ là biểu hiện của các loài, nói cách khác cùng loài thì có số đo gần giống nhau.
Giải pháp thứ nhất: Tìm bông giống hệt
Đơn giản là tìm bông nào có cả 4 số đo giống với bông hoa bí ẩn, thế là bông hoa bí ẩn có cùng loại với bông hoa đó. Rất đơn giản đúng không, nhưng đời không như mơ như thế, số đo cực kì hiếm giống nhau hoàn toàn, chúng sẽ khác, nhiều hoặc ít, nhưng sẽ khác.
Giải pháp thứ hai: Tìm thằng hàng xóm gần nhất (1-nearest neighbors)
Thay vì tìm bông hoa có các số đo giống hệt bông hoa bí ẩn, chúng ta tìm bông hoa gần giống nhất, tức là các số đo gần tương tự nhau, nhiều khả năng hai bông hoa có kích thước tương tự nhau thì sẽ cùng loài.
Vấn đề bây giờ chuyển thành “như thế nào là gần giống nhất”, có tới 4 số đo, làm thế nào để biết một bông hoa “gần” bông bí ẩn hơn? Các nhà khoa học thông thái đã nghĩ ra một thứ gọi là “khoảng cách” (distance) giữa hai bông hoa. Nếu “khoảng cách” giữa hai bông hoa là xa, chúng khác loài, nếu “khoảng cách” giữa hai bông hoa là nhỏ, chúng cùng loài. Có rất nhiều cách để định nghĩa các “khoảng cách”, ở ví dụ hoa phượng này, chúng ta sẽ dùng “khoảng cách” thông dụng nhất: Khoảng cách Ơ-cờ-lít (The Euclidean distance), nghe có vẻ rất kinh, nhưng cứ coi như nó là khoảng cách bình thường, đường chim bay ấy thôi.
Nhưng thuộc tính của hoa phượng không phải là điểm trên bản đồ, chấm mà đo thế nào được? Để tính khoảng cách giữa các bông hoa phượng, chúng ta sẽ dùng bình phương và căn bậc 2.
Khoảng cách của hai bông đầu tiên là:
Khoảng cách của bông đầu tiên với bông thứ 3 là:
Giá trị thứ hai là 3.7, nhỏ hơn 3.9, thế là bông hoa thứ ba gần bông thứ nhất hơn bông thứ 2.
Giờ có vẻ khá rõ ràng rồi, chúng ta sẽ tính khoảng cách giữa bông hoa bí ẩn với 149 bông đã biết loài, bông bí ẩn “gần” với bông nào nhất, suy ra bông bí ẩn cùng loài luôn.
Giải pháp 3: K thằng hàng xóm gần nhất (The k-nearest neighbors)
Về cơ bản, “1-nearest neighbors” làm việc rất tốt, nhưng thi thoảng, nó lại cho ra kết quả rất tệ. Nguyên nhân có thể do sự sai lệch của thuộc tính, đo nhầm hoặc gì đó, đáng ra hoa phượng tím có đài hoa dài 1cm thì số liệu lại thành 10cm, bông hoa có thuộc tính sai trở thành bông hoa “gần” nhất, kết quả ắt sẽ sai tè le.
Giải pháp của các nhà khoa học thần thánh là: Thay vì tìm một thằng gần nhất, họ tìm luôn 5 thằng gần nhất. Nếu tất cả 5 thằng gần nhất cùng một loại, dễ quá, bông hoa bí ẩn cũng là loại đó luôn. Nhưng nếu 5 thằng gần nhất thuộc vài loại khác nhau, thì loại nào có số lượng nhiều nhất trong 5 thằng gần nhất đó, sẽ được tính là loại của bông hoa bí ẩn.
Ví dụ trong ảnh, 5 bông gần bông bí ẩn nhất là: 1 tím, 1 xanh, 3 hồng, suy ra bông bí ẩn sẽ là loại hồng. Và thuật toán sử dụng ở đây sẽ được gọi là “5-nearest neighbors”
Bạn có thể sẽ hỏi: Ơ sao lại là 5, sao không phải là 10, 20, 50? Ok, đó đúng là vấn đề, chọn k là số bao nhiêu để ra kết quả chính xác là định mệnh của bạn :)) Thế nên thuật toán mới có tên k-nearest neighbors.
Bài viết lược dịch và thêm mắm muối từ: http://blog.mathieu.guillame-bert.com/2015/07/12/introduction-to-machine-learning/
Hiện chưa hiểu phần 3 nên chưa dịch :))
Hay đấy, rất dễ hiểu 😀 Nhớ ngày trước lúc làm đề tài tốt nghiệp tao làm về phân lớp, lấy dữ liệu của Yahoo, Google rồi áp dụng Bayes các kiểu cũng điên cuồng lắm =))
Đa ta lời động viên quý giá :))
Béo nhà em cũng làm về mấy cái này, có giảng giải cho em nhưng chưa hiểu lắm. Đọc bài này vẫn chưa cảm thấy thông thái nhưng ít nhất cũng làm em hiểu những gì Béo nói hơn :))
À cách viết có vẻ Tây hơn rồi đó ạ 😉
Rất vui nhận dc sự hưởng ứng của các bạn :)) Loan ếch đọc bài gốc có hiểu hơn không?
Em chưa đọc bản gốc (cũng chưa có ý định sẽ đọc). Nhu cầu hiểu tới thế này là ổn rồi ạ :))