Chủ Nhật, 21 tháng 4, 2019

[Thuật toán linear regression] và bài toán dự đoán điểm thi

Trong bài viết ngày hôm nay, mình sẽ cùng các bạn giới thiệu về thuật toán linear regression và áp dụng vào bài toán dự đoán điểm thi.
Bài viết này yêu cầu các bạn cần có một chút kiến thức về lập trình python và hiểu về thuật toán linear regression. Với thuật toán linear regression, bạn có thể đọc bài viết ở link tham khảo phía cuối bài viết này của anh Vũ Hữu Tiệp. Còn đối với python, bạn cũng đừng quá lo lắng vì mình sẽ giải thích từng đoạn code để các bạn có thể hiểu. Trong thời gian tới, mình sẽ cố gắng viết một khóa học python để các bạn có thể học tốt hơn. Rất mong nhận được sự ủng hộ của các bạn.
Đây là một bài viết trong chuyên mục machine learning.
Bài viết này sẽ gồm 3 phần chính:
  1. Giới thiệu về bài toán và dữ liệu
  2. Triển khai code giải quyết bài toán
  3. Đánh giá và kết quả

Phát biểu bài toán linear regression

Bài toán mình đưa ra là cho một tập dữ liệu điểm sinh viên bao gồm các trường: điểm thi lần 1, điểm thi lần 2, điểm thi lần 3 và điểm thi lần cuối cùng. Các bạn có thể hiểu là 3 lần thi đầu là thi định kỳ( điểm nằm trong đoạn 0 – 100) và lần thi cuối cùng là thi kết thúc môn (điểm nằm trong đoạn 0 – 200). Mục tiêu của chúng ta cần giải quyết là dựa vào dữ liệu đã có, xây dựng mô hình học máy cho phép dự đoán điểm thi lần cuối của một sinh viên khi đã biết điểm 3 lần thi trước đó.
Vậy input của chúng ta là điểm thi của các thí sinh ở 3 lần đầu, và outcome là điểm ở lần final
Đây là hình ảnh mô tả dữ liệu, dữ liệu mình lưu trữ ở file .csv, mình sẽ cung cấp cho các bạn ở cuối bài

Tập dữ liệu điểm thi của các sinh viên khác nhau

Triển khai code giải quyết bài toán linear regression

Đầu tiên, ta cần import các thư viện cần thiết.
  • thư viện numpy để tính toán và thao tác với ma trận
  • thư viện pandas để thao tác đọc file .csv
  • thư viện sklearn có thể dùng để giải quyết bài toán này, ở đây mình dùng để so sánh với kết quả tự tính

Một số hàm sẽ được sử dụng trong bài toán

Đọc dữ liệu từ file .csv trả về một dataframe (cái này tương tự data_table trong C#).
Bạn có thể sử in ra csv_df, kết quả sẽ như hình sau

Kết quả khi in dataframe vừa đọc vào

Hàm tiếp theo, chuyển dataframe về ma trận và tách riêng input, outcome
Sau bước này, input và outcome lần lượt là các ma trận.
Tiếp theo là hàm tìm các hệ số w, ở đây do input có 3 tham số, nên chúng ta cần tìm w0, w1, w2, w3.
Hàm tương đương sử dụng thư viện sklearn để đối chiếu kết quả
Hàm tiếp theo là hàm tìm sai số của mô hình
Sau khi có các hàm trên, chúng ta tiến hành gọi lần lượt ở hàm main để kiểm tra kết quả. Tuy nhiên, chúng ta cần 2 dòng code để biến ma trận input thành input bar bằng cách thêm một cột giá trị 1 vào trước.

Đánh giá kết quả mô hình linear regression

Đối chiếu kết quả giữa mô hình tự tính và mô hình sử dụng thư viện sklearn
Kết quả cho thấy là giống nhau.
Tính toán giá trị mất mát và hiển thị sự sai khác giữa kết quả dự đoán và kết quả thực tế trên tập dữ liệu huấn luyện. Outcome là kết quả thật sự, và Predict là kết quả dự đoán của mô hình. Ở đây giá trị mất mát trên tập huấn luyện xấp xỉ 71,72.

Kết quả dự đoán so với kết quả trên thực tế

Chúng ta có thể dự đoán cho một dữ liệu chưa biết, bằng cách sử dụng hàm sau
Và thử xem kết quả với một dữ liệu chưa biết ở hàm main
Kết quả:
Hi vọng bài viết của mình đem lại sự hữu ích cho tất cả các bạn, nếu có bất kỳ câu hỏi hay thắc mắc nào bạn có thể để lại bình luận. Mình sẽ giải thích sớm nhất có thể cho các bạn.
Và cuối cùng, để tải toàn bộ source code và dữ liệu của bài hướng dẫn, bạn đọc hãy truy cập vào link này: https://github.com/NguyenVanHieuBlog/predict-student-score