Disclaimer:
- Mình chỉ dịch ý, diễn đạt theo ý hiểu của mình, để đem đến một văn phong gần gũi với người đọc Việt hơn. Đôi chỗ mình sẽ chèn thêm các chú giải cần thiết để bạn không phải tra cứu thêm mà vẫn hiểu hết bài viết (mình hi vọng vậy). Các chú giải sẽ được đặt trong ngoặc, in nghiêng ngay cạnh thuật ngữ, hoặc mình để trong một textbox riêng giống như disclaimer này nếu thấy cần thiết.
- Với các thuật ngữ chuyên ngành, mình sẽ sử dụng linh hoạt cả tiếng Anh và tiếng Việt để tránh lặp từ quá nhiều.
- Hi vọng nhận được sự ủng hộ và góp ý của các bạn! Enjoy!
Trong phần 2, tác giả sẽ giới thiệu các phương pháp Machine Learning cổ điển mà ai học ML cũng cần biết. Gọi là cổ điển, nhưng đến thời điểm hiện tại, chúng vẫn được sử dụng rất rộng rãi trong nhiều lĩnh vực từ tài chính đến y tế, xã hội. Bắt đầu thôi nào!
Những phương pháp ML đầu tiên hoàn toàn bắt nguồn từ Thống kê học vào những năm 50 của thế kỷ trước. Chúng giúp giải quyết các bài toán thuần tuý như: tìm kiếm quy luật trong các con số, đánh giá quan hệ của các điểm dữ liệu, và tính toán hướng của các véc tơ.
Giải thích: Trong chương trình toán phổ thông, chúng ta đã học về toạ độ của véc tơ trong không gian 3 chiều (x,y,z). Trong khoa học dữ liệu, một véc tơ hiểu theo nghĩa rộng là một điểm dữ liệu trong không gian n chiều, với n "đặc trưng". Ví dụ, với bài toán dự đoán giá ô tô dựa trên 4 đặc trưng là:  Hãng xe, số km đã đi được, số năm tuổi, số vết xước ; ta có thể "đóng gói" thông tin của mỗi điểm dữ liệu đầu vào dưới dạng một véc tơ 4 chiều (Hãng xe, số km đã đi được, số năm tuổi, số vết xước). Làm việc với véc tơ sẽ thuận tiện cho việc tính toán hơn rất nhiều.
Ngày nay, 50% Internet được xây dựng dựa trên những thuật toán này. Khi bạn đọc xong một bài báo và phía dưới trang hiện ra một danh sách các bài báo khác để “đọc thêm”, hay khi ngân hàng khoá thẻ của bạn ở một cây ATM giữa đồng không mông quạnh, khả năng cao đó là do những anh chàng thuật toán này “điều khiển” đấy.

Đọc thêm:

Những công ty công nghệ lớn là “fan cứng” của các mạng neuron (vì chúng thường đem lại độ chính xác cao so với các thuật toán ML cổ điển). Rõ ràng. Với họ, tăng thêm 2% độ chính xác là tăng thêm 2 tỉ đô vào doanh thu. Nhưng khi bạn là công ty nhỏ, điều đó không có ý nghĩa cho lắm. Tôi biết có những đội ngũ dành hẳn 1 năm cho 1 thuật toán gợi ý người dùng cho trang thương mại điện tử của họ, trước khi nhận ra rằng 99% lượng truy cập lại đến từ các công cụ tìm kiếm. Thuật toán của họ gần như vô dụng. Phần lớn người dùng thậm chí không vào trang chủ của họ.
Nói thêm về thuật toán gợi ý người dùng: 
Khi bạn xem một món hàng trên Tiki, trang web sẽ đề xuất các món hàng khác thường được mua cùng; hoặc khi bạn xem hết một clip trên Youtube sẽ luôn có các clip liên quan khác xuất hiện ở dưới để kích thích bạn xem nhiều hơn. Đằng sau các trang web này chính là các thuật toán gợi ý người dùng (recommendation algorithm).
Các thuật toán học máy cổ điển thường được chia làm hai loại: học giám sát (supervised learning) và học không giám sát (unsupervised learning).


Học giám sát 

Với trường hợp thứ nhất, máy móc sẽ được huấn luyện bởi một người giám sát (aka một giáo viên), người đã phân loại (dán nhãn) sẵn một tập dữ liệu, ví dụ một kho ảnh với nhãn là chó (với ảnh chó) và mèo (với ảnh mèo). Máy móc chỉ việc học từ những ví dụ đó. Từng cái một. Chó rồi đến mèo.
Học không giám sát nghĩa là máy móc nhận được một kho ảnh động vật chưa được dán nhãn, và chúng phải tự phân loại con nào với con nào. Sẽ không có người huấn luyện nào ở đây cả, máy móc sẽ phải tự tìm ra các quy luật để phân loại ảnh. Chúng ta sẽ nói về các phương pháp này sau.
Rõ ràng, máy móc sẽ học nhanh hơn nếu có người huấn luyện, nên học giám sát thường được sử dụng trong các nhiệm vụ thực tế nhiều hơn. Có hai loại nhiệm vụ chính: phân loại (classification) – dự đoán xem một thứ gì đó sẽ được xếp vào nhóm nào, và hồi quy (regression) – dự đoán một điểm cụ thể trên trục số.

Classification


“Là phân nhóm đồ vật dựa vào một hay nhiều đặc điểm đã biết trước. Ví dụ phân loại những chiếc tất dựa vào màu sắc, các tài liệu dựa vào ngôn ngữ, hay âm nhạc dựa vào thể loại.”


Ngày nay các thuật toán phân loại thường được sử dụng cho:
- Lọc spam
- Phát hiện ngôn ngữ
- Tìm kiếm các tài liệu tương đồng với nhau
- Phân tích cảm xúc (sentiment analysis)
- Nhận dạng chữ và số viết tay

 Những thuật toán phổ biến: Naive Bayes, Cây quyết định (Decision Tree), Hồi quy logistic, K-lân cận (K-Nearest Neighbours), Máy véc tơ hỗ trợ (Support Vector Machine).

Machine Learning chủ yếu là các bài toán phân loại. Máy móc ở đây giống như một em bé đang học phân loại đồ chơi vậy: đây là một con robot, kia là một chiếc ô tô, kìa là một con robot ô tô…

Trong việc phân loại, máy móc luôn luôn cần một người huấn luyện. Dữ liệu đầu vào cần phải được dán nhãn, kèm theo những đặc trưng (features) để máy móc có thể học từ chúng. Mọi thứ đều có thể được phân loại – từ người dùng dựa trên sở thích của họ (giống như những gì thuật toán NewsFeed của Facebook đang làm), hay các bài báo dựa trên ngôn ngữ và chủ đề (cái này rất quan trọng với các công cụ tìm kiếm như Google), đến âm nhạc dựa trên thể loại (playlist trên Spotify chẳng hạn), và kể cả email của bạn.

Ví dụ: Phân loại rượu và bia


Giải thích về classification:
Con người chúng ta vốn thông minh. Chúng ta có thể nhận diện được mọi thứ xung quanh, miễn là ta đã từng biết đến chúng. Ví dụ, khi bạn nhìn thấy một con chó, bạn có thể dễ dàng nhận ra đó là một con chó chứ không phải con mèo. Vì sao? Vì bộ lông, cái mũi, hành động, tiếng sủa (kêu) của nó rất khác một con mèo. Nhưng khi mới sinh ra thì sao? Bạn chỉ biết nó là một thứ gì đó đang ngoe nguẩy cái đuôi, và bố mẹ bảo với bạn đó là một con chó, hay một con mèo. Và từ bé đến lớn, bạn đã nhìn thấy hàng trăm (hoặc hàng ngàn) con chó và con mèo khác như thế rồi. Nói theo cách của ML, bạn đã vô thức được huấn luyện để phân biệt được mèo và chó dựa trên nhiều ví dụ trước đây, và những ví dụ đó đều được "gán nhãn" cho bạn bởi bố mẹ, bạn bè hay những người xung quanh bạn. Máy móc cũng vậy, để học được khả năng phân loại, chúng phải được huấn luyện bởi những dữ liệu gán nhãn sẵn. Chẳng qua thay vì mất hàng năm tháng như chúng ta, chúng chỉ mất một vài giây để học thôi.  Câu hỏi là, chúng học như thế nào?
- Bước 1: Xác định những đặc trưng. Như mình đã đề cập ở phần 1, những đặc trưng là những yếu tố mà máy tính phải xem xét khi "học". Nó phụ thuộc vào bài toán, nhiệm vụ, ngữ cảnh... Và đối với các thuật toán học máy cổ điển, chính con người chúng ta là người dạy máy tính phải học những đặc trưng nào. Ví dụ với việc phân loại chó và mèo, các đặc trưng sẽ là bộ lông, cái mũi, tiếng sủa (kêu)... như mình đã nói ở trên.
Giờ chúng ta xem xét ví dụ tác giả đưa ra trong bài viết gốc, phân loại rượu với bia (xem ảnh minh hoạ phía trên). Với con người thì việc này rất dễ dàng, chỉ việc nhìn màu, ngửi mùi, uống thử là xong. Nhưng máy móc không "ngửi" và không "uống" được ("nhìn" thì giờ đã làm được rồi), vậy nên chúng sẽ dựa vào những đặc trưng khác:  "nồng độ cồn" và "khả năng nhảy múa giỏi hơn người khác sau khi uống vào của thân chủ" chẳng hạn (lol).
- Bước 2: lựa chọn thuật toán. Mỗi thuật toán sẽ đem lại một kết quả khác nhau. "Kết quả" ở ví dụ này chính là một đường thẳng phân chia rạch ròi 2 nhóm rượu và bia trên đồ thị 2d biểu diễn 2 đặc trưng như hình trên. Nghĩa là sau khi đã học xong, máy tính sẽ trả về kết quả là một phương trình đường thẳng giữa trục x và y, giả sử là x+y-5=0. Như vậy, "quy luật" sẽ là: tất cả những điểm nằm " phía trên" đường phân loại (có x+y-5>0) sẽ được xếp vào nhóm (class) rượu, những điểm nằm "phía dưới" đường phân loại (có x+y-5<0) sẽ được xếp vào nhóm bia, nếu nằm trực tiếp trên đường phân loại thì không xếp nhóm.
- Bước 3: Đưa ra kết luận với một điểm dữ liệu mới. Giả sử có một loại đồ uống mới không nằm trong tập dữ liệu dùng để huấn luyện, có "nồng độ cồn" = 10 độ và "khả năng nhảy múa" = 3, máy tính sẽ tính toán: 10+3-5=8>0 => xếp đồ uống này vào nhóm rượu.
Đó là với bài toán chỉ có 2 đặc trưng. Nếu số đặc trưng từ 3 trở lên, chúng ta sẽ minh hoạ các điểm dữ liệu trong không gian 3 chiều trở lên, khi đó, các đường phân chia sẽ trở thành các mặt phẳng/ siêu mặt phẳng phân chia (thử tưởng tượng với không gian 3 chiều, bạn sẽ hình dung ra ngay).
Để ý rằng với một tập dữ liệu đầu vào cố định, ta có thể vẽ được vô số những đường phân chia như trên. Vậy điều chúng ta quan tâm là đường nào "tốt nhất" theo một tiêu chuẩn nào đó? Now, ladies and gentlemen, welcome to support vector machine!

Support Vector Machine

Máy hỗ trợ vectơ (Support Vector Machine - SVM) là phương pháp phổ biến nhất trong những thuật toán phân loại cổ điển. Nó đã từng được dùng để phân loại mọi thứ trên đời: con người dựa trên mặt mũi, tài liệu dựa trên các nhóm khác nhau...
Minh hoạ cho đoạn giải thích về SVM ở dưới đây (vẫn là hình trên, nhưng up lại để các bạn tiện theo dõi :D)

Đọc thêm:

Để giải thích cho ý tưởng đằng sau SVM, mình xin mượn cách giải thích từ bài viết dưới đây:
Nếu ta định nghĩa mức độ hạnh phúc của một class tỉ lệ thuận với khoảng cách gần nhất từ một điểm của class đó tới đường/mặt phân chia,...chúng ta cần một đường phân chia sao cho khoảng cách từ điểm gần nhất của mỗi class (...) tới đường phân chia là như nhau, như thế thì mới công bằng. Khoảng cách như nhau này được gọi là margin (lề).
Trong hình minh hoạ trên, margin là khoảng cách từ 1 trong 2 đường xám đến đường xanh (hoặc đỏ).
Ở hai hình bên tay phải, margin của 2 class đã bằng nhau, như vậy đã có công bằng rồi, chúng ta cần văn minh nữa. Công bằng mà cả hai đều kém hạnh phúc như nhau thì chưa phải là văn minh cho lắm.
Nhìn sang hình bên trái, dễ nhận thấy margin của cả 2 class đã rộng hơn nhiều. Việc margin rộng hơn sẽ mang lại hiệu ứng phân lớp tốt hơn vì sự phân chia giữa hai classes là rạch ròi hơn.
Bài toán tối ưu trong Support Vector Machine (SVM) chính là bài toán đi tìm đường phân chia sao cho margin là lớn nhất. Đây cũng là lý do vì sao SVM còn được gọi là Maximum Margin Classifier.
Trong thực tế, SVM được sử dụng nhiều trong các bài toán nhận dạng chữ viết tay, phân loại ảnh, phân loại spam, phân tích dữ liệu y sinh... nói chung là cái quái gì nó cũng phân loại được.
Đọc xong về SVM, có thể bạn đã gật gù vì đã "hiểu sơ sơ", nhưng cũng có thể bạn thấy "chưa đã" lắm vì vẫn chưa hiểu được tận gốc phần toán đằng sau cách hoạt động của nó. Vì phần đó cần nhiều kiến thức toán cao cấp mới hiểu được, nên để phù hợp tiêu chí của loạt bài viết này là dễ hiểu, ít toán, không code, mình xin phép bỏ qua.
Tuy nhiên, ngay sau đây sẽ là một thuật toán đã từng "làm mưa làm gió" trong việc lọc spam, phân tích văn bản... mà mình hứa sẽ đi đến cùng để bạn hiểu tận gốc rễ thuật toán này. Đó là Naive Bayes (hay còn gọi là Bayes ngây thơ).

Naive Bayes

Trong việc phân loại spam, thuật toán Naive Bayes đã từng rất phổ biến. Máy tính sẽ đếm số lần xuất hiện của từ “Viagra” trong email spam và email thường, sau đó nhân với một vài xác suất ( sử dụng định lý Bayes), rồi cộng tổng lại. Tèn ten, ta có Machine Learning.



Giải thích về Naive Bayes: 
Để hiểu được cách hoạt động của Naive Bayes, bạn cần biết một vài kiến thức căn bản về xác suất.
Chúng ta xét ví dụ: dữ liệu của bạn gồm 500 email, trong đó có 100 email spam, 400 email ko spam. Trong 100 email spam có 80 email chứa từ “Viagra”, trong 400 email ko spam có 40 email chứa từ “Viagra”.
1. Trước tiên là xác suất có điều kiện, kí hiệu là P(A|B), được hiểu là: giả sử sự kiện B xảy ra, thì xác suất để sự kiện A xảy ra là gì?  
Vậy giả sử một email là spam, thì xác suất để nó chứa từ “Viagra” là 80/100 =0.8, hay P(“Viagra”|Spam)=0.8.
Cần phân biệt xác suất có điều kiện với xác suất thông thường. Ví dụ, xác suất để một email xuất hiện từ “Viagra” là gì (chưa biết email đó có phải spam hay ko)? Xác suất này bằng tổng số email có chứa “Viagra” chia cho tổng số tất cả các email: (80+40)/500=6/25, hay P("Viagra")= 6/25.
2. Một khái niệm nữa là xác suất hợp (joint probability): kí hiệu P(A,B), là xác suất để 2 sự kiện A và B đồng thời xảy ra (chú ý nó khác với xác suất có điều kiện nha).
3. Định lý Bayes: đây là một định lý rất nổi tiếng trong xác suất thống kê. Định lý này được phát biểu dưới dạng toán học như sau:

Trong đó:
- P (A|B) là xác suất để sự kiện A xảy ra, với điều kiện là sự kiện B xảy ra.
- P(B|A) là xác suất để sự kiện B xảy ra, với điều kiện là A xảy ra.
- P(A), P(B) lần lượt là xác suất để sự kiện A và B xảy ra nói chung.
Áp dụng định lý Bayes để trả lời câu hỏi: Giả sử một email có chứa từ “Viagra”, vậy xác suất để nó là một email Spam là bao nhiêu?
4. Cuối cùng, ta cần một giả thiết  nữa: xác suất để xuất hiện từ A và từ B trong một email là độc lập có điều kiện với nhau. Hiểu điều này như thế nào?
 Giả sử 1 email là spam, thì xác suất để xuất hiện từ A và xác suất để xuất hiện từ B ko liên quan đến nhau, hay độc lập với nhau. Giả thiết này được biểu diễn dưới dạng  toán học như sau: 
Rõ ràng thực tế sẽ không như vậy. Nếu một email spam có từ “Viagra”, khả năng cao là nó cũng chứa “sex”, "thời gian","quan hệ".. Nghĩa là xác suất xuất hiện của chúng ko hề độc lập với nhau. Nhưng Naive Bayes lại giả sử như vậy, rõ là ngây thơ nhỉ? Thế nên thuật toán này mới được gọi là Naive Bayes ("naive" là ngây thơ đó).
Tuy nhiên, bằng một cách nào đó, sự ngây thơ này khiến cho thuật toán hoạt động rất hiệu quả, mà hiệu quả thì người ta dùng thôi.
5. Có đủ kiến thức cần thiết rồi, giờ ta sẽ đi vào câu hỏi chính: Naive Bayes hoạt động như thế nào?
Giả sử ta có một tập dữ liệu đầu vào là 4 email "siêu ngắn" được gán nhãn như sau:
Tất nhiên, trong thực tế email sẽ ko ngắn và đơn giản vậy  :D
Nhiệm vụ của máy tính là xác định xem email E dưới đây có phải spam hay ko:
"Giảm giá khoá học".
Bằng trực giác thì chúng ta dễ dàng nhận ra đó là một email spam. Nhưng với máy móc thì sao, chúng sẽ "học" điều đó như thế nào?
- Bước 1: Thống kê tần suất xuất hiện của mỗi từ khoá: 


Từ bảng này, ta có thể suy ra xác suất xuất hiện mỗi từ, có và ko có điều kiện. Ví dụ:
- Xác suất xuất hiện từ "Marketing" trong một email nói chung là 1/11, hay P("Marketing)=1/11
 - Xác suất xuất hiện từ "Marketing" trong môt email, giả sử email đó là spam, lại là 1/6, hay P("Marketing"|Spam)=1/6.
- Bước 2: Tính P(Spam|E) P(Not spam|E) và so sánh. Class nào lớn hơn thì xác định email E thuộc class đó. Hiểu nôm na là, với điều kiện email đó là email E, nếu xác suất để email đó là spam lớn hơn xác suất để email đó không phải spam, thì xếp email đó vào lớp "spam", và ngược lại. Để tính hai xác suất trên, chúng ta áp dụng định lý Bayes:
Dấu "=" thứ nhất là vì định lý Bayes, dấu "=" thứ ba là vì ta có giả sử ở 4.
Hoàn toàn tương tự: 
Do P(E) là một số dương nên dễ thấy P(Spam|E) > P(Not spam|E), nên thuật toán sẽ xếp email E vào lớp "Spam".
Vâỵ là chỉ với vài phép tính đơn giản và một chút kiến thức về xác suất, chúng ta đã có một thuật toán Machine Learning để phân loại email rồi. Tất nhiên trong thực tế email sẽ có nhiều từ hơn rất nhiều, và thuật toán cũng cần được điều chỉnh bởi một vài thủ thuật nhỏ (ví dụ, nếu email mới có chứa từ "x" chưa xuất hiên bao giờ trong tập dữ liệu đầu vào, thì P("x"|Spam) = P("x" |Not spam) = 0, cần giải quyết trường hợp này). Nhưng, cơ bản là vậy.
Sau khi Naive Bayes được ứng dụng vào các bộ lọc spam, những kẻ spam đã học được cách đối phó bằng cách thêm vào rất nhiều những từ "tốt" ở cuối email (ý là những từ thường thấy trong các email không spam, điều đó sẽ làm tăng P(E|Non-spam) lên, khiến thuật toán phân loại bị sai). Phương pháp đó được gọi là đầu độc Bayes (Bayesian poisoning). Thuật toán Naive Bayes đi vào lịch sử như là một phương pháp rất dễ hiểu và là thuật toán đầu tiên có thể đưa vào sử dụng, nhưng ngày nay thì các thuật toán khác đã được sử dụng cho việc lọc spam (điển hình là SVM).
Một ví dụ khác của việc phân loại nhé. Giả sử bạn cần vay một ít tiền. Làm sao để ngân hàng biết được bạn sẽ trả lại nó hay không? Không có cách nào để biết chắc chắn cả. Nhưng ngân hàng lại có hồ sơ của những người đã từng vay tiền trước đó. Họ có dữ liệu về độ tuổi, giáo dục, nghề nghiệp, và mức lương, và quan trọng nhất là, thực tế những người đó đã trả lại tiền. Hoặc không.
Sử dụng những dữ liệu này, họ có thể huấn luyện máy tính để tìm ra các quy luật, từ đó đưa ra câu trả lời. Ko có vấn đề gì với việc tìm ra câu trả lời cả. Vấn đề nằm ở chỗ, các ngân hàng ko thể tin tưởng máy móc một cách mù quáng được. Sẽ ra sao nếu như có một sai sót hệ thống, một vụ tấn công mạng, hay một sửa đổi nào đó đến từ ông nhân viên IT kì cựu khi ông ta đang say rượu?
 Để giải quyết điều đó, chúng ta có Cây quyết định (Decision Tree).
Để biết Decision Tree "thần kỳ" như thế nào, hãy xem xét ví dụ sau đây:
Giả sử ngân hàng X có dữ liệu của 5 khách hàng đã vay vốn trong quá khứ như sau:

Sau khi được huấn luyện bởi thuật toán Decision Tree, máy tính sẽ cho ra kết quả là một mô hình ra quyết định dạng cây như thế này:

Như vậy từ kết quả của Decision Tree, nhân viên phân tích dữ liệu của ngân hàng có thể dễ dàng kết luận là không cho khách hàng mới kia vay. Decision Tree khác với các thuật toán phân loại khác ở chỗ, máy tính ko chỉ trả về kết quả là class "Có" hoặc "Không", như với Naive Bayes và SVM, mà nó trả về một mô hình để trợ giúp con người ra quyết định. Do đó nó giảm thiểu sai sót sinh ra do lỗi hệ thống.
Vậy với Decision Tree, máy tính đã được huấn luyện như thế nào? Mình sẽ dành hẳn phần 3 để chia sẻ về thuật toán thú vị này.
Một ứng dụng rất hữu ích của classification là anomaly detection (phát hiện điểm bất thường. Để detect anomaly thì dữ liệu đầu vào phải được gán nhãn "bình thường" hay "bất thường"). Ngày nay nó được sử dụng trong y học - trong MRI ( chụp cộng hưởng từ - một trong những phương pháp chụp chiếu để chuẩn đoán tình hình bệnh, bên cạnh siêu âm, chụp X-quang, chụp cắt lớp CT...), máy tính sẽ đánh dấu tất cả các vùng đáng nghi ngờ hoặc những sai lệch của bài kiểm tra. Thị trường chứng khoán sử dụng chúng để phát hiện các hành vi bất thường của người giao dịch để tìm ra tay trong của công ty. Khi dạy máy tính cái gì là đúng, chúng ta cũng đồng thời dạy chúng cái gì là sai.
Ngày nay, các mạng neuron thường được ưa chuộng dùng hơn cho các bài toán phân loại. Ừ thì đó là lí do chúng được tạo ra mà.
Một quy tắc bất thành văn là dữ liệu càng phức tạp, thuật toán càng phức tạp theo. Với chữ, số, bảng biểu, tôi sẽ dùng các cách tiếp cận truyền thống. Vì những mô hình đó đơn giản hơn, nên chúng học nhanh hơn và hoạt động rõ ràng hơn. Với ảnh, video và những thứ phức tạp big data các kiểu, tôi sẽ dùng các mạng neuron.
Chỉ 5 năm trước thôi, bạn có thể tìm thấy một công cụ phân loại khuôn mặt dựa vào SVM. Ngày nay, các mạng neurons đã được huấn luyện sẵn xuất hiện nhan nhản. Với việc phân loại spam thì không có gì thay đổi, chúng ta vẫn dùng thuật toán SVM. Không có một lí do nào đủ thuyết phục để chuyển sang dùng cái khác cả.                                             
Thậm chí cả website của tôi cũng có một bộ lọc spam ở comment dựa vào SVM đấy (Spiderum chắc chưa cần :D).


Regression (Hồi quy)



"Vẽ một đường đi qua các điểm sau đây. Vâng, và ta có machine learning."

Ngày nay, hồi quy được sử dụng để:
- Dự đoán giá cổ phiếu
- Phân tích nhu cầu mua và doanh số bán
- Chuẩn đoán y học
- Mọi sự tương quan giữa số và thời gian
Nói một cách nôm na, hồi quy là chúng ta dự đoán ra một con số chứ không phải nhóm của dữ liệu nữa. Ví dụ giá ô tô dựa trên số km đã đi được, mật độ giao thông dựa trên các mốc thời gian trong ngày, lượng cầu cổ phiếu dựa trên tình hình tăng trưởng của công ty... Hồi quy là sự lựa chọn tuyệt vời khi dữ liệu thay đổi theo thời gian.

Giải thích về Linear Regression:
Giả sử bạn có một tập dữ liệu cân nặng và chiều cao của 6 nam giới Việt Nam như sau:

Đây là dữ liệu mình tự tạo ra để minh hoạ thôi 
Chúng ta sẽ thử mô tả các điểm dữ liệu trên đồ thị 2D nhé:
Ta kí hiệu 6 điểm dữ liệu bằng 6 véc tơ (cân nặng, chiều cao):

Từ hình vẽ, bạn có thể dễ dàng nhận ra quy luật: cân nặng càng tăng thì chiều cao càng tăng, đúng không? Máy tính làm tốt hơn con người ở chỗ, chúng ko chỉ nhận ra điều đó, mà còn xây dựng được một mô hình dự đoán chiều cao dựa trên cân nặng, hay nói cách khác, một phương trình đường thẳng: y=ax+b, và máy tính làm điều đó chỉ trong tích tắc.
Để ý rằng, sẽ có vô số các đường thẳng như vậy. Cái chúng ta cần là một đường thẳng "phù hợp" nhất với các điểm dữ liệu đã có.

Đường thẳng này mô tả đúng xu hướng của chiều cao và cân nặng: cùng tăng cùng giảm, nhưng có vẻ chưa "phù hợp" lắm với các điểm dữ liệu đầu vào
- Sai số (residuals): Nhận thấy rằng ko có đường thẳng nào đi qua được tất cả các điểm trên. Vậy nên mục tiêu của máy tính là tìm ra đường thẳng có sai số nhỏ nhất.  Sai số (residual) của một điểm là khoảng cách từ điểm dữ liệu thực tế tới điểm dữ liệu được dự đoán bởi mô hình:
Data value là dữ liệu thực tế, predicted value là giá trị được dự đoán bởi mô hình đường thẳng:

Để đo lường sai số của một phương trình đường thẳng với tất cả các điểm dữ liệu, ta có một khái niệm hàm mất mát (loss_function):

Vì các giá trị x1,y1..., x6,y6 đã biết trước, nên ta có thể viết lại J dưới dạng  hàm số của 2 biến a và b. Nhiệm vụ của máy tính là tìm các hệ số a,b để hàm này đạt giá trị nhỏ nhất (hiển nhiên, sai số càng nhỏ thì càng tốt).
- Tại sao lại là (y1-y'1)^2 mà ko phải chỉ là (y1-y'1)? Vì chúng ta muốn đo độ lớn của các sai số, nên dùng phép bình phương để các số âm và các số dương ko triệt tiêu lẫn nhau đó.
Nhắc lại kiến thức toán phổ thông: Để tìm min, max của một hàm y= f(x) trên một khoảng nhất định, ta làm gì? Tính ĐẠO HÀM. Và tại những giá trị x mà f'(x)=0, hàm số đạt cực trị. Bạn thấy quen chứ? Linear Regression cũng sử dụng tính chất đó để tìm min của hàm số J thôi, điều khác biệt ở đây là J là một hàm nhiều biến (trong trường hợp này là 2 biến a,b), thay vì hàm 1 biến như trong các bài tập toán cấp 3. Bạn nhớ đạo hàm của x^2 là gì ko? Là 2x. Tương tự, đạo hàm của (y1-y^1)^2 sẽ là 2 x cái gì đó đúng ko? Vậy nên, số (1/2) ở đầu dùng để khử thừa số 2 trong phép tính đạo hàm đó.
Vậy rốt cuộc với Linear Regression, máy tính đã học như thế nào?
- Bước 1: Chọn ngẫu nhiên 1 giá trị a và b, giả sử là a0 và b0. Tính giá trị hàm mất mát với các điểm dữ liệu đầu vào và các giá trị a0, b0 đã chọn.
- Bước 2: Tính đạo hàm của hàm mất mát với a0, b0 (Kí hiệu là J'). Nếu J'>0, giảm J đi một chút, nếu J'<0, tăng J lên một chút. Mục đích là để J' tiến dần về 0.
Lặp lại bước 2 cho đến khi nào J'=0 thì thôi. Khi đó, các giá trị a,b thoả mãn J'=0 chính là hệ số của phương trình đường thẳng "tốt nhất" cần tìm, vì khi đó J đạt giá trị nhỏ nhất.
Bạn có thể thấy Linear Regression thực chất là logic lặp và logic nếu - thì: nếu xảy ra cái này thì làm việc này, nếu xảy ra cái kia thì làm việc kia. Tèn ten, ta lại có một mô hình Machine Learning.

LỜI KẾT:
Trong bài viết này, mình đã cùng các bạn tìm hiểu về các thuật toán học máy cổ điển, được phân loại theo 2 nhiệm vụ chính: classification và regression. Với mỗi thuật toán , mình cố gắng giải thích bằng ví dụ minh hoạ nhiều nhất có thể để giảm thiểu lượng kiến thức toán càng nhiều càng tốt. Qua đó, mình muốn truyền tải một thông điệp: đằng sau Machine Learning là đơn giản là các công thức toán, đạo hàm, vi phân và logic nếu-thì: nếu xảy ra cái này thì thực hiện cái kia, cùng với logic lặp: hãy lặp lại việc này cho đến khi nào đạt được một điều kiện nhất định thì dừng lại. Đó, không có gì đao to búa lớn cả :D
Phần 3 mình sẽ chia sẻ chi tiết về Decision Tree và các ứng dụng của thuật toán hay ho này. Nếu bạn thấy hữu ích hãy upvote để ủng hộ mình nhé :D 
Nguồn tham khảo: Wikipedia, blog Machine Learning cơ bản