[Machine Learning] Làm thế nào để đánh giá một mô hình Máy học?

Lời nói đầu

Câu lạc bộ AI – khoa Khoa học Máy tính UIT rất hân hạnh chào mừng quý bạn đọc đã trở lại với chuỗi bài viết về Machine Learning. Sự ủng hộ cũng như những góp ý, nhận xét từ quý bạn đọc luôn là nguồn động lực to lớn giúp CLB ngày càng hoàn thiện và phát triển hơn.
Ở bài viết đầu tiên, chúng ta đã được giới thiệu về Machine Learning Workflow và làm quen với khái niệm đánh giá mô hình (evaluation) . Trong bài viết này, CLB AI sẽ đồng hành cùng với bạn đọc tìm hiểu sâu hơn về chủ đề đánh giá mô hình – một bước rất quan trọng trong bất kỳ dự án Machine Learning nào.

Bài viết này gồm 5 phần như sau:

  1. Tổng quan về đánh giá mô hình (evaluation)
  2. Nên chia dataset như thế nào cho hợp lý?
  3. Các khái niệm, độ đo khi đánh giá mô hình
  4. Underfitting và Overfitting
  5. Các phương pháp xử lý và ngăn ngừa Overfitting

Còn chần chờ gì nữa, hãy đến ngay với phần đầu tiên nhé!

1. Tổng quan về đánh giá mô hình (Evaluation)

Trong thực tế, một bài toán Machine Learning có thể được giải quyết bởi nhiều phương pháp, cho ra những mô hình khác nhau. Đứng trước nhiều sự lựa chọn, làm cách nào để chúng ta có thể chọn ra mô hình phù hợp nhất cho bài toán đang giải quyết? Khi đó, chúng ta cần phải đánh giá “hiệu năng” của mô hình trên dữ liệu mới (evaluate model performance on unseen data)

Đánh giá mô hình giúp ta trả lời những câu hỏi sau:

  1. Mô hình đã được huấn luyện thành công hay chưa?
  2. Mức độ thành công của mô hình tốt đến đâu?
  3. Khi nào nên dừng quá trình huấn luyện?
  4. Khi nào nên cập nhật mô hình?

One algorithm isn’t the best across all data sets or for all use cases. To find the best solution, you need to conduct many experiments, evaluate machine learning algorithms, and tune their hyperparameters.” – Jerome Boyer (IBM, Distinguished Engineer)

Việc đánh giá mô hình thường được thực hiện trên dữ liệu mà mô hình chưa từng được học – trên validation set và test set (sẽ được đề cập chi tiết hơn ở phần 2). Những bài toán khác nhau sẽ có những tiêu chí đánh giá khác nhau, vì vậy cần phải xác định rõ thứ tự ưu tiên của các tiêu chí cho việc đánh giá mô hình. Bên cạnh đó, đối với những tiêu chí phụ thuộc vào nhau, tức nếu cải thiện “hiệu năng” ở tiêu chí A thì tiêu chí B sẽ có “hiệu năng” thấp, cần phải đánh đổi (tradeoff) giữa các tiêu chí, thì chúng ta cần sử dụng các độ đo (metric) nhằm thuận tiện hơn cho việc đánh giá mô hình (chi tiết về các độ đo sẽ được đề cập ở phần 3)


2. Nên chia dataset như thế nào cho hợp lý?

Một bộ dữ liệu có 3 chức năng: huấn luyện mô hình, tinh chỉnh mô hình (fine-tuning) và đánh giá mô hình. Tùy thuộc vào tính chất của bộ dữ liệu (số điểm dữ liệu lớn hay nhỏ, bộ dữ liệu có cân bằng hay không, v.v) nên có nhiều cách để phân chia bộ dữ liệu. Ở bài viết này, mình chia bộ dữ liệu thành 3 phần: training setvalidation set và test set, cùng với việc giải thích ý nghĩa của từng set.

Nguồn: https://medium.com/@Ana_Caballero_H/splitting-data-folders-into-training-validation-and-testing-folders-using-shuffling-with-python-63cabcd997dd

Các mô hình Machine Learning được huấn luyện dựa trên dữ liệu. Càng nhiều dữ liệu tốt được “feed” vào mô hình, dự đoán của mô hình càng chính xác. Vì vậy, phần lớn dữ liệu trong dataset được sử dụng để huấn luyện mô hình, và phần dữ liệu này được gọi là training set.

Mặt khác, cần có một phần dữ liệu dùng để đánh giá việc “học” của mô hình, khi đó chúng ta cần đến test set. Dữ liệu trong test set phải là dữ liệu mới, chưa từng được “học” hay “thấy” bởi mô hình, và sát với dữ liệu thực tế. Test set đóng vai trò như một mẫu (sample), với tổng thể (population) là dữ liệu thực tế của bài toán đang giải quyết, hay dữ liệu trong test set có cùng “phân phối” (distribution) với dữ liệu thực tế. Do đó, kết quả của mô hình thể hiện trên test set là một thước đo tin cậy cho “hiệu năng” thực tế của mô hình. Giả sử bạn muốn nhận diện biển số xe trong ảnh chụp ban đêm, thì test set lúc này nên là ảnh được chụp vào ban đêm (cùng phân phối với dữ liệu thực tế) thay vì những ảnh được chụp trong điều kiện ánh sáng tốt. Lúc này, kết quả của mô hình trên test set sẽ đáng tin cậy hơn khi test set chứa ảnh không sát với thực tế bài toán cần giải quyết.

Vậy liệu việc chia dataset thành 2 phần training set và test set là hợp lý? Trong quá trình huấn luyện mô hình, sẽ có trường hợp xảy ra tình trạng mô hình bị overfit với dữ liệu huấn luyện (chi tiết về overfitting sẽ được bàn ở phần 4). Nói đơn giản, overfitting là hiện tượng mô hình thể hiện tốt khi được đánh giá trên training set nhưng thể hiện không tốt trên test set. Do đó, chúng ta cần hiệu chỉnh mô hình (tinh chỉnh các hyperparameter) nhằm cải thiện kết quả đánh giá trên test set. Đến đây, chúng ta cần một tập dữ liệu mà mô hình chưa được “học” hay “thấy” bao giờ, với mục đích “cảnh báo sớm” về những vấn đề mà mô hình có thể gặp phải khi tiếp xúc với dữ liệu thực tế (như underfitting hay overfitting). Vì vậy, tập dữ liệu này phải cùng “phân phối” với test set hay dữ liệu thực tế, và nó được gọi là validation set hay development set (dev set). Một câu hỏi được đặt ra: Liệu có thể sử dụng test set với vai trò như validation set hay không? Việc sử dụng test set để hiệu chỉnh mô hình không được khuyến khích trong thực tế nhằm giữ tính “unseen” cho test set. Nếu mô hình được cải thiện từ test set nhằm “fit” hơn với chính test set thì vô hình chung mô hình có xu hướng overfit với test set, làm giảm độ tin cậy của kết quả đánh giá trên test set.

If the test set is locked away, but you still want to measure performance on unseen data as a way of selecting a good hypothesis, then divide the available data (without the test set) into a training set and a validation set.” – Stuart Russell and Peter Norvig, page 709, Artificial Intelligence: A Modern Approach, 2009 (3rd edition)

Hãy nhìn một số sự việc ngoài thực tế dưới góc nhìn của train, validation và test set:
Các bạn học sinh đang chăm chỉ trau dồi kiến thức để chuẩn bị cho kỳ thi THPTQG, lúc này những tài liệu các bạn đang học được xem như training set. Trong quá trình học, các bạn thử giải lại những bài tập đã được học từ tài liệu cũng như thử sức với những đề thi ở các năm trước – validation set. Một số bạn chưa thể giải được bài tập trong tài liệu, cũng như các đề thi cũ, tức đang underfit . Các bạn khác có thể giải quyết tốt các dạng bài đã được làm qua, nhưng thể hiện không tốt trên các đề thi cũ, chúng ta gọi đây là hiện tượng overfitting. Trong trường hợp này, các đề thi cũ – validation set giúp các bạn bị overfit sớm nhận ra những vùng kiến thức bản thân còn thiếu để kịp thời bổ sung (trước khi quá muộn). Việc học và luyện đề được lặp đi lặp lại cho đến khi kết quả giải đề được tốt. Đến đây, các bạn có thể thử sức với đề minh họa của Bộ Giáo dục và Đào tạo – đề sát với đề thi thật, đóng vai trò như test set.

Ngoài ra, các bạn có thể đọc thêm về các phương pháp chia dataset khác như Hold-out/Repeated Hold-out (thường được sử dụng khi dataset lớn), Statified sampling (dùng cho imbalanced dataset), Cross-ValidationBoostrap Sampling, v.v…


3. Các khái niệm, độ đo khi đánh giá mô hình

Nguồn: https://www.kdnuggets.com/2018/06/right-metric-evaluating-machine-learning-models-2.html

Accuracy

Accuracy (độ chính xác) chỉ đơn giản đánh giá mô hình thường xuyên dự đoán đúng đến mức nào. Độ chính xác là tỉ lệ giữa số điểm dữ liệu được dự đoán đúng và tổng số điểm dữ liệu.

accuracy = \frac{\#correct\ predictions}{\#total\ data\ points}

Tuy nhiên, một mô hình có độ chính xác cao chưa hẳn đã tốt. Accuracy lộ rõ hạn chế khi được sử dụng trên bộ dữ liệu không cân bằng (imbalanced dataset). Chúng ta có một ví dụ sau:

Một ngân hàng muốn phát triển hệ thống phát hiện các giao dịch bất thường. Ngân hàng có thể cung cấp cho bạn bộ dataset gồm 1.000.000 giao dịch, trong đó có 1000 giao dịch bất thường. Dễ dàng thấy rằng, chỉ cần mô hình luôn dự đoán mọi giao dịch đều bình thường thì mô hình đã có độ chính xác 99.9%. Tuy nhiên, trên thực tế mô hình của bạn không thể phát hiện được các giao dịch bất thường. Ở đây, tập dữ liệu của chúng ta đang bị mất cân bằng (imbalance), nên việc dựa vào độ chính xác để đánh giá mô hình không mang lại nhiều kết quả tích cực.

Confusion Matrix

Nhược điểm của Accuracy là chỉ cho ta biết độ chính xác khi dự báo của mô hình, nhưng không thể hiện mô hình đang dự đoán sai như thế nào, vì vậy chúng ta cần một phương pháp đánh giá khác – Confusion Matrix. Confusion matrix là một kỹ thuật đánh giá hiệu năng của mô hình cho các bài toán phân lớp. Confusion matrix là một ma trận thể hiện số lượng điểm dữ liệu thuộc vào một class và được dự đoán thuộc vào class.

“A confusion matrix (or confusion table) shows a more detailed breakdown of correct and incorrect classifications for each class” – Alice Zheng, Evaluating Machine Learning Models – A Beginner’s Guide to Key Concepts and Pitfalls

Confusion matrix cung cấp thêm thông tin về tỉ lệ phân lớp đúng giữa các lớp, hay giúp phát hiện các lớp có tỉ lệ phân lớp nhầm cao nhờ vào các khái niệm True (False) Positive (Negative)

Đối với bài toán phân loại, chúng ta thường quan tâm đối tượng cần phân loại có thuộc lớp X, hay có thuộc tính X hay không. Ví dụ, với bài toán phân loại thư rác, ta quan tâm một email có phải là thư rác hay không, tức X = spam. Chúng ta gọi lớp X là Positive class, lớp còn lại là Negative class.

  • True Positive (TP): đối tượng ở lớp Positive, mô hình phân đối tượng vào lớp Positive (dự đoán đúng)
  • True Negative (TN): đối tượng ở lớp Negative, mô hình phân đối tượng vào lớp Negative (dự đoán đúng)
  • False Positive (FP): đối tượng ở lớp Negative, mô hình phân đối tượng vào lớp Positive (dự đoán sai) – Type I Error
  • False Negative (FN): đối tượng ở lớp Positive, mô hình phân đối tượng vào lớp Negative (dự đoán sai) – Type II Error

Hãy cùng mình xem xét qua một ví dụ để có thể hiểu hơn những khái niệm trên nhé. Giả sử chúng ta cần dự đoán kết quả xét nghiệm COVID-19 của 1000 người nghi nhiễm. Dưới đây là kết quả dự đoán của mô hình:

  • Mô hình dự đoán có 30 ca dương tính, trong khi thực tế có 13 người nhiễm COVID-19
  • Mô hình dự đoán có 970 ca âm tính, nhưng thực tế trong 970 ca đó có 20 ca dương tính

Chúng ta có thể biểu diễn kết quả dự đoán của mô hình bằng confusion matrix như sau:

  • True Positive TP = 13: có 13 người nhiễm COVID-19 được mô hình dự đoán đúng
  • False Positive FP = 17: có 17 người âm tính với COVID-19, nhưng được mô hình dự đoán dương tính
  • True Negative TN = 950: 950 trường hợp âm tính được mô hình phân loại chính xác
  • False Negative FN = 20: có 20 trường hợp dương tính với COVID-19 nhưng bị mô hình phân loại sai

Cần chú ý rằng, True/False thể hiện cho tính chính xác khi phân loại của mô hình, có nghĩa rằng khi bạn thấy True đồng nghĩa với việc mô hình phân loại đúng và ngược lại. Positive/Negative là lớp mà đối tượng được mô hình xếp vào, khi bạn thấy Positive, có nghĩa rằng mô hình của bạn phân đối tượng vào lớp Positive và ngược lại. Hi vọng những chú ý nho nhỏ này sẽ giúp bạn dễ nhớ các khái niệm trên hơn :>

Precision và Recall

Với những thông tin có được từ Confusion matrix, chúng ta có thể định lượng độ hiệu quả của mô hình qua nhiều thang đo khác nhau. Precision và Recall là hai thang đo quan trọng trong số đó.

Precision trả lời cho câu hỏi: trong số các điểm dữ liệu được mô hình phân loại vào lớp Positive, có bao nhiêu điểm dữ liệu thực sự thuộc về lớp Positive. Mặt khác, Recall giúp chúng ta biết được có bao nhiêu điểm dữ liệu thực sự ở lớp Positive được mô hình phân lớp đúng trong mọi điểm dữ liệu thực sự ở lớp Positive.

Precision và Recall có giá trị trong [0,1], hai giá trị này càng gần với 1 thì mô hình càng chính xác. Precision càng cao đồng nghĩa với các điểm được phân loại càng chính xác. Recall càng cao cho thể hiện cho việc ít bỏ sót các điểm dữ liệu đúng.

Precision answers the question, “Out of the items that the ranker/classifier predicted to be relevant, how many are truly relevant?” Whereas, recall answers the question, “Out of all the items that are truly relevant, how many are found by the ranker/classifier?”
– Alice Zheng, Evaluating Machine Learning Models – A Beginner’s Guide to Key Concepts and Pitfalls

Nguồn: https://medium.com/@shrutisaxena0617/precision-vs-recall-386cf9f89488

Hãy trở lại với ví dụ về xét nghiệm COVID-19, precision và recall của mô hình trong ví dụ này là:

precision=\frac{TP}{TP+FP}=\frac{13}{13+17}=0.43
recall=\frac{TP}{TP+FN}=\frac{13}{13+20}=0.39

Có thể thấy rằng precision và recall của mô hình này còn thấp, tức độ chính xác của mô hình chưa cao.

Trong số 30 trường hợp được chẩn đoán dương tính, chỉ có 13 trường hợp thực sự nhiễm COVID-19 (khoảng 43%, được thể hiện qua precision). Việc kết quả xét nghiệm chưa đủ tin cậy (trong trường hợp này là phân lớp sai – “báo động nhầm”) khiến các cơ sở y tế phải xét nghiệm bằng các phương pháp khác có độ chính xác cao hơn (như xét nghiệm RealTime-PCR), gây lãng phí thời gian và tiền bạc, đồng thời ảnh hưởng trực tiếp đến đời sống của các trường hợp có kết quả xét nghiệm chưa chính xác.

Với giá trị recall = 0.39, ta có thể hiểu rằng trong số 33 trường hợp thật sự dương tính với COVID-19, mô hình chỉ phát hiện ra 13 trường hợp (khoảng 39%). Trong thực tế, những đối tượng nhiễm bệnh bị bỏ sót bởi mô hình luôn có khả năng trở thành nguồn lây nhiễm cho cộng đồng. Có thể dễ dàng nhận ra rằng việc cải thiện Recall là tối cần thiết!!!

F1-Score:

Một mô hình tốt khi cả Precision và Recall đều cao, thể hiện cho mô hình ít phân loại nhầm giữa các lớp cũng như tỉ lệ bỏ sót các đối tượng thuộc lớp cần quan tâm là thấp. Tuy nhiên, hai giá trị Precision và Recall thường không cân bằng với nhau (giá trị này tăng thì giá trị kia thường có xu hướng giảm). Để đánh giá cùng lúc cả Precision và Recall, ta sử dụng độ đo F-Score

F_\beta = (1 + \beta ^2)\frac{precision.recall}{\beta^2.precision+recall}

Tham số β quyết định mức độ coi trọng giữa Precision và Recall

  • β > 1: Recall được coi trọng hơn Precision
  • β < 1: Precision được coi trọng hơn Recall
  • β = 1: Precision và Recall được coi trọng ngang nhau

Việc quyết định nên ưu tiên Precision hay Recall phụ thuộc vào từng bài toán. Ví dụ, với bài toán xác định một khu vực có bom mìn hay không, việc bỏ sót bom mìn cho hậu quả nghiêm trọng hơn so với khi báo động một khu vực an toàn là có bom, vì vậy cần ưu tiên Recall hơn Precision. Mặt khác, việc bỏ sót spam mail có vẻ không tệ nếu so sánh với khi phân loại nhầm một email quan trọng thành spam mail, do đó ở bài toán này, Precision nên được cân nhắc ưu tiên.

Với những bài toán mà Precision và Recall được cân nhắc ngang nhau, ta chọn β = 1, khi đó ta đang sử dụng F1-Score. F1-Score là kỳ vọng harmonic (harmonic mean) của Precision và Recall.

F_1 = \frac{2}{\frac{1}{Recall}+\frac{1}{Precision}} = 2\times\frac{Precision\times Recall}{Precision+Recall}

F1-score lớn khi cả 2 giá trị Precision và Recall đều lớn. Ngược lại, chỉ cần 1 giá trị nhỏ sẽ làm cho F1-Score nhỏ.

ROC curve

Trong các bài toán phân lớp, các thuật toán phân lớp thường dự đoán điểm số hay xác suất thuộc về một lớp của dữ liệu đầu vào. Điều này giúp ta biết được mức độ chắc chắn của mô hình khi phân lớp. Sau khi dự đoán xác suất hay điểm số, cần phải chuyển các giá trị đó về các nhãn của các lớp. Việc chuyển từ xác suất, điểm số sang các nhãn được quyết định bởi một “ngưỡng” (threshold).

Hãy xem xét thuật toán Logistic Regression (đã được trình bày ở các bài viết trước). Đầu ra của Logistic Regression là giá trị của hàm sigmoid:

S(x)=\frac{1}{1+e^{−x}}

Giá trị của S(x) nằm trong [0,1], thể hiện xác suất điểm dữ liệu đầu vào thuộc về lớp positive. Để quy đổi xác suất về nhãn của lớp, ta cần xác định giá trị threshold. Giá trị threshold mặc định là 0.5, tức là:

  • Nếu S(x)>threshold(0.5), đầu ra của mô hình bằng 1
  • Nếu S(x)<threshold(0.5), đầu ra của mô hình bằng 0

Vấn đề được đặt ra rằng đôi khi default threshold = 0.5 không là “ngưỡng” phân loại tốt nhất, điều này xảy ra khi các lớp của bài toán không cân bằng (dự đoán một căn bệnh hiếm gặp với xác suất xảy ra cực thấp), hay mức độ ưu tiên của một loại sai lầm cao hơn loại sai lầm còn lại, v.v…

“… almost all classifiers generate positive or negative predictions by applying a threshold to a score. The choice of this threshold will have an impact in the trade-offs of positive and negative errors.” – Page 53, Learning from Imbalanced Data Sets, 2018.

Vì vậy, đôi khi ta cần phải thay đổi threshold để mô hình đạt được kết quả mong muốn. ROC curve là một công cụ để chọn ra threshold phù hợp cho mô hình.

Với mỗi giá trị threshold, ta thu được hai giá trị được biểu diễn trên ROC curve:

  • True Positive Rate (hay Sensitivity – Recall): là độ nhạy của mô hình, cho biết mức độ dự đoán chính xác trong lớp positive. TPR là thương của số điểm dữ liệu được dự đoán đúng thuộc lớp positive với số điểm dữ liệu thuộc lớp positive.
TPR = \frac{TP}{TP+FN}
  • False Positive Rate: là xác suất mắc Type II Error
FPR=1−Specificity
  • Trong đó, Specificity cho biết mức độ dự đoán chính xác trong lớp negative.
Specificity=\frac{TN}{TN+FP}

Các điểm màu cam đại diện cho mỗi threshold, ứng với trục tung là giá trị TPR và trục hoành là giá trị FPR. Nối các điểm màu cam lại với nhau ta được ROC curve. Đường đứt đoạn màu xanh đại diện cho kết quả của “no skill model” – mô hình dự đoán bằng cách random kết quả. Cần lưu ý rằng, giá trị FPR càng thấp thì xác suất mắc Type II Error thấp, vì vậy các điểm ở bên trái nên được cân nhắc hơn nếu ta cần giảm thiểu False Negative (Type II Error). Mặt khác, các điểm nằm càng cao thì có TPR càng lớn, đồng nghĩa với việc mô hình có giá trị Recall lớn. Tùy thuộc vào bài toán để lựa chọn một điểm – ứng với một threshold phù hợp.


Area Under the ROC curve (AUC):

AUC là phần diện tích bên dưới ROC curve, dùng để đánh giá hiệu năng phân loại của các mô hình với nhau. Mô hình có AUC càng lớn (ROC curve càng gần góc cao bên trái) thì cho kết quả càng chính xác. Ngược lại, mô hình có ROC curve càng tiến tới đường chéo 45 độ (đường gạch đứt màu xanh ở hình trên), tức AUC càng thấp thì kết quả càng tệ. AUC càng cao thì mô hình càng dễ phân loại đúng cho cả lớp positive và negative.


Mean Absolute Error:

Mean Absolute Error (MAE) là độ đo để đánh giá các mô hình hồi quy. MAE được định nghĩa là trung bình tổng trị tuyệt đối sai số giữa đầu ra dự đoán và kết quả thực:

MAE có miền giá trị từ [0,+∞]. Trên cùng tập dữ liệu, MAE càng nhỏ thì có độ chính xác càng cao.

from sklearn.metrics import mean_absolute_error #gọi thư viện để tính MAE
#giả sử y_true là vector lưu kết quả chính xác
#       y_pred là vector lưu dự đoán
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mean_absolute_error(y_true, y_pred)
#Theo công thức ta nhận được kết quả là 1/4 * (abs(3-2.5) + abs(-0.5-0.0) + abs(2-2) + abs(7-8)) = 0.5
 0.5 

Mean Squared Error:

Mean Squared Error (MSE) là độ đo để đánh giá các mô hình hồi quy. MSE được định nghĩa là trung bình tổng bình phương sai số giữa đầu ra dự đoán và kết quả thực:

MSE có miền giá trị từ [0,+∞]. Trên cùng tập dữ liệu, MSE càng nhỏ thì có độ chính xác càng cao. Tuy nhiên, vì lấy bình phương sai số nên đơn vị của MSE khác với đơn vị của kết quả dự đoán.

Dưới đây là code mẫu việc sử dụng thư viện để tính MSE

from sklearn.metrics import mean_squared_error 
# sklearn có thư viện giúp tính RMSE một cách dễ dàng
# tương tự như trên, y_true là vector lưu kết quả chính xác
#                    y_pred là vector lưu dự đoán
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mean_squared_error(y_true, y_pred)
# Theo công thức ta nhận được kết quả là 1/4 * ( (3-2.5)^2 + (-0.5-0.0)^2 + (2-2)^2) + (7-8)^2 ) # = 0.375
0.375

Root Mean Squared Error:

Bên cạnh MAE và MSE, Root Mean Squared Error (RMSE) cũng là độ đo để đánh giá các mô hình hồi quy. RMSE được định nghĩa là căn bậc 2 trung bình tổng bình phương sai số giữa đầu ra dự đoán và kết quả thực:

RMSE có miền giá trị từ [0,+∞]. Trên cùng tập dữ liệu, MSE càng nhỏ thì có độ chính xác càng cao. Việc lấy căn bậc 2 giúp RMSE có cùng đơn vị với kết quả dự đoán, đồng thời làm giá trị RMSE không quá lớn khi số lượng điểm dữ liệu lớn.



# Để tính RMSE ta làm tương tự như MSE, chỉ thay đổi tham số trong việc gọi hàm
from sklearn.metrics import mean_squared_error 
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mean_squared_error(y_true, y_pred, squared=False) 
# khi set squared = False, hàm sẽ trả về giá trị RMSE
# Theo công thức, RMSE sẽ trả về sqrt(MSE), ứng với hai vector trên sẽ thì RMSE sẽ là           # sqrt(0.375) = 0.612
0.6123724356957945

4. Underfitting và Overfitting:

Outlier:

Điểm ngoại lai/dị biệt/nhiễu (outlier/noise) là những điểm dữ liệu có giá trị khác thường so với các điểm dữ liệu khác.

Nguồn: Data Science Foundation

Nhiều thuật toán Machine Learning nhạy cảm với nhiễu. Nhiễu trong dữ liệu huấn luyện khiến cho mô hình “học” sai, dẫn đến một số hậu quả như thời gian huấn luyện sẽ dài hơn, giảm độ chính xác của mô hình và cho kết quả không tốt.

Nhiễu có thể là kết quả của những sai sót trong quá trình thu thập dữ liệu. Có thể chia nhiễu thành 2 loại cơ bản:

  • Global Outlier: là điểm dữ liệu khác hoàn toàn với toàn bộ các điểm dữ liệu khác trong dataset. Ví dụ: Một vài điểm dữ liệu có giá trị thuộc tính tuổi người lớn hơn 200 thì những điểm dữ liệu đó được xem là global outliers.
  • Contextual Outlier: là điểm dữ liệu khác biệt khi so với một phần dữ liệu trong dataset, nhưng là bình thường khi so với phần dữ liệu khác. Ví dụ: Doanh số bán hàng của một thương hiệu trong các đợt khuyến mãi có thể tăng đột biến so với ngày thường, nhưng không có sự chênh lệch lớn khi so giữa các đợt khuyến mãi với nhau.

Chúng ta nên làm gì khi gặp phải nhiễu? Sẽ thật không công bằng khi loại bỏ một điểm dữ liệu chỉ vì nó là nhiễu, đặc biệt khi nó là dữ liệu đúng và có thể chứa nhiều thông tin giá trị.


Bias và Variance:

  • Bias: là sai số giữa giá trị dự đoán trung bình của mô hình và giá trị thực tế.
    High bias: sai số lớn, mô hình đơn giản, tuy nhiên kết quả dự đoán chính xác không cao
    Low bias: sai số nhỏ, mô hình phức tạp, kết quả dự đoán tốt
  • Variance: là sai số thể hiện mức độ “nhạy cảm” của mô hình với những biến động trong dữ liệu huấn luyện
    Low-variance: mô hình ít biến thiên theo sự thay đổi của dữ liệu huấn luyện
    High-variance: mô hình biến thiên mạnh, bám sát theo sự thay đổi của dữ liệu huấn luyện
    Mô hình có variance cao thường thể hiện rất tốt trên tập dữ liệu huấn luyện, nhưng không cho kết quả khả quan trên tập dữ liệu kiểm thử

Underfitting và Overfitting:

  • Underfitting: là hiện tượng mà mô hình có high bias và low varriance, cho kết quả dự đoán không tốt trên cả tập huấn luyện và tập kiểm thử. Underfitting thường dễ được phát hiện vì cho kết quả tệ trên tập huấn luyện.
  • Overfitting: là hiện tượng mà mô hình có low bias và high variance, lúc này mô hình trở nên phức tạp, bám sát theo dữ liệu huấn luyện. Mô hình cho kết quả rất tốt trên dữ liệu đã được học, nhưng cho kết quả tệ trên dữ liệu chưa từng gặp bao giờ. Vấn đề này xảy ra khi mô hình cố gắng fit tất cả các điểm dữ liệu huấn luyện, bao gồm cả nhiễu.


Có thể thấy rằng, hiện tượng Underfitting có thể xem như mô hình “học dốt”, còn Overfitting cho biết rằng mô hình đang “học vẹt”.

 Nguồn: GeeksforGeeks


Nhận biết Underfitting và Overfitting:

  • Underfitting xảy ra khi sai số dự đoán của mô hình trên cả tập huấn luyện và tập kiểm thử đều cao.
  • Overfitting xảy ra khi sai số dự đoán của mô hình trên tập huấn luyện thấp, nhưng trên tập kiểm thử thì cao

Cần chú ý rằng “Test Error” ở hình dưới nên được hiểu là sai số dự đoán trên Validation set :> 

Nguồn: https://www.analyticsvidhya.com/blog/2020/02/underfitting-overfitting-best-fitting-machine-learning/


5. Các phương pháp xử lý và ngăn ngừa Overfitting:

Cả hai hiện tượng Underfitting và Overfitting đều khiến mô hình cho kết quả không tốt. Tuy nhiên trong thực tế, Overfitting xuất hiện phổ biến hơn và cần được quan tâm. Để giải quyết vấn đề này, hiện nay có các kỹ thuật như sau:

Sử dụng Cross-Validation:

Cross-validation là một kỹ thuật tốt để ngăn ngừa Overfitting.

Ý tưởng của Cross-validation khá đơn giản: Chia tập dữ liệu huấn luyện thành nhiều phần để tạo nên các tập train-test nhỏ và sử dụng các tập train-set này để hiệu chỉnh các hyperparameter của mô hình.

Với kỹ thuật k-fold cross-validation, ta chia tập train ban đầu thành k phần tương đương nhau, mỗi phần được gọi là một fold. Sau đó, sử dụng k-1 folds để huấn luyện mô hình, fold còn lại (được gọi là holdout fold) được sử dụng như validation set.

Nguồn: https://elitedatascience.com/overfitting-in-machine-learning


Huấn luyện mô hình với nhiều dữ liệu hơn:

Việc tăng dữ liệu huấn luyện mô hình giúp tăng cơ hội mô hình phát hiện “true pattern”, đồng thời giảm ảnh hưởng của nhiễu lên mô hình. Tất nhiên, việc tăng cường dữ liệu chỉ hiệu quả khi dữ liệu tăng cường “clean”, không chứa nhiễu. Bên cạnh đó, việc thu thập dữ liệu chưa bao giờ là dễ dàng.

“We don’t have better algorithms, we just have more data. More data beats clever algorithm, but better data beats more data.” — Peter Norvig, Director of Research, Google


Regularization:

Regularization là các phương pháp làm tăng một ít bias để đánh đổi lại việc giảm variance. Có các kỹ thuật regularization sau:

Early Stopping: Huấn luyện mô hình cho đến khi không có sự gia tăng đáng kể độ chính xác của mô hình trên validation set.

Regularized Loss Function: thêm một đa thức regularization R(θ) vào Loss function

J_r(θ)=J(θ)+λ∗R(θ)

L2 Regularization (weight decay) được sử dụng phổ biến với

R(θ)=||θ||^2_2

Dropout: được sử dụng trong Deep Learning. Trong quá trình huấn luyện, luôn có một số lượng node ngẫu nhiên được tạm thời bỏ quả, giúp cho kiến trúc mạng trở nên đơn giản hơn

Điểm chung của các kỹ thuật Regularization là nhằm làm nhỏ đi trọng số của mô hình, giúp mô hình trở nên ít phức tạp nhằm tránh hiện tượng overfitting.

Regularization allows complex models to be trained on data sets of limited size without severe over-fitting, essentially by limiting the effective model complexity. – Christopher M.Bishop – Pattern recognition and machine learning


Lời kết

Như vậy là qua bài viết này, mình đã giới thiệu cho mọi người về khái niệm Evaluation, cách chia tập dữ liệu, các độ đo đánh giá mô hình. Qua bài viết này, hi vọng các bạn sẽ có cái nhìn rõ nét hơn về một bước rất quan trọng trong quy trình xây dựng một mô hình Machine Learning

CLB AI rất mong nhận được những góp ý từ quý bạn đọc. Những nhận xét của các bạn luôn được lắng nghe, tiếp thu nhằm giúp CLB AI cải thiện chất lượng bài viết để mang đến các bạn sinh viên những kiến thức về Machine Learning một cách chính xác và dễ hiểu nhất. Chân thành cảm ơn sự quan tâm của các bạn!

Thuận Bùi – KHDL2019


References:


Leave a Reply

Your email address will not be published. Required fields are marked *