Thực hiện Linear Regression với Scikit-learn

5804

Bài viết được sự cho phép của tác giả Kien Dang Chung

Video trong bài viết

Trong bài trước, bạn đã được giới thiệu lý thuyết về Hồi quy tuyến tính (Linear Regression), bạn cũng đã hiểu thuật toán này hoạt động như thế nào, giờ là lúc chúng ta áp dụng nó vào trong bài toán thực tế: Dự đoán doanh thu phim thông qua ngân sách.

  460 khóa học online miễn phí về Programming & Computer Science nên bắt đầu trong tháng 7! (phần 1)
  Computer Science là gì? Học những gì và ra trường làm gì?

Scikit-learn thư viện cần thiết cho Machine Learning

Scikit-learn có lẽ là thư viện phổ biến nhất trong lĩnh vực machine learning, với thư viện này công việc của chúng ta chỉ là cung cấp dữ liệu và mọi thuật toán machine learning đã được xây dựng sẵn trong bộ thư viện này sẽ mang về cho bạn kết quả như mong muốn.

Để sử dụng thuật toán Linear Regression đã được cài đặt sẵn trong Scikit-learn, chúng ta thực hiện import thư viện này vào chương trình:

from sklearn.linear_model import LinearRegression

Bộ thư viện Scikit-learn rất là đồ sộ, do chúng ta đã tìm hiểu về thuật toán Linear Regression nên chúng ta chỉ import phần liên quan đến thuật toán này mà thôi. Để thực hiện thuật toán Hồi quy tuyến tính trên các dữ liệu X, y đã được bóc tách và mô phỏng trong bài trước, chúng ta thực hiện đoạn code trong Python:

regression = LinearRegression()
regression.fit(X, y)

Biến regression chứa một đối tượng LinearRegression trong bộ thư viện Scikit-learn và tiếp theo là thực hiện phương thức fit() trên đối tượng này. Fit() thực hiện tính toán tối ưu hóa các tham số θ0 và θ1, phương thức này trả về một model. Sau khi thực hiện phương thức này, chúng ta đã có một đối tượng chứa đầy đủ thông tin kết quả, ví dụ chúng ta cần lấy về giá trị của các tham số θ0 và θ1:

# theta_1
regression.coef_

# theta_0
regression.intercept_ 

Giá trị tham số có được từ hồi quy tuyến tính

Với hai tham số θ0θ0 và θ1θ1 là đủ để chúng ta vẽ ra đường thẳng mô tả mối quan hệ giữa ngân sách và doanh thu trong làm phim ảnh. Thực hiện vẽ đường thẳng này với matplotlib:

plt.figure(figsize=(10,6))
plt.scatter(X, y, alpha=0.3)

# Adding the regression line here:
plt.plot(X, regression.predict(X), color='red', linewidth=3)

plt.title('Film Cost vs Global Revenue')
plt.xlabel('Production Budget $')
plt.ylabel('Worldwide Gross $')
plt.ylim(0, 3000000000)
plt.xlim(0, 450000000)
plt.show()

Đoạn code này tận dụng những gì đã code để vẽ lên biểu đồ các điểm (ngân sách, doanh thu).

Đường thẳng quan hệ có được từ Linear Regression

Dự đoán và đánh giá kết qủa

Với kết quả các tham số θ1 (độ dốc) và θ0 (điểm cắt trục y), chúng ta có thể dự đoán được doanh thu của một phim với ngân sách cho trước như sau:

Doanh_thu = -7,236,192.7 + 3.1115 x Ngân_sách

Với công thức này, một phim có ngân sách 50 triệu USD sẽ có doanh thu là 148 triệu USD, gần gấp 3. Trong phương pháp này cũng có những điểm bất bình thường, ví dụ khi ngân sách = 0 thì doanh thu phim tính được là -7,236,192.7 USD, một điều không thể khi tôi không bỏ tiền ra thì một ai đó có thể lấy của tôi hơn 7 triệu đô. Ngoài ra cũng có những trường hợp rất đặc biệt như phim Avatar chẳng hạn, với chi phí cỡ 450 triệu đô và thu về gần 3 tỉ đô.

Để đánh giá kết quả khi áp dụng Linear Regression chúng ta có một phương thức là score(), phương thức này trả về một hệ số xác định cho R^2. Trong đó, R^2 được tính bằng công thức 1 – u/v với:

  • u = ((y_true – y_pred)^2).sum() là tổng bình phương các độ lệch.
  • v = ((y_true – y_true.mean())^2).sum()

Giá trị tốt nhất là 1.0, giá trị này có thể âm.

Lời kết

Như vậy chúng ta đã hoàn thành dự án đầu tiên mở màn cho việc học tập nghiên cứu về Trí tuệ nhân tạo nói chung hay Machine learning nói riêng. Với dự án dự đoán doanh thu phim từ tổng chi phí sản xuất, chúng ta đã được làm quen với các quy trình cần thiết khi thực hiện một bài toán bằng các công cụ khoa học dữ liệu. Chúng ta cũng đã làm quen với thuật toán đầu tiên Linear Regression (Hồi quy tuyến tính), qua đó cũng nắm bắt được cách dùng một số thư viện như Matplotlib hay scikit-learn trong Python. Trong bài tiếp theo, chúng ta sẽ thực hiện tổng quát hóa thuật toán Linear Regression với nhiều tham số đầu vào hơn và chính thức kết thúc dự án 1 để chuyển sang những dự án rất thú vị đang chờ phía trước.

Trong quá trình học tập, có bất kỳ câu hỏi, thắc mắc hoặc đơn giản là trao đổi những suy nghĩ của mình, bạn đừng ngại hãy để lại comment trên từng bài viết, tôi và các bạn đang học khác sẽ giúp bạn.

Bài viết gốc được đăng tải tại allaravel.com

Có thể bạn quan tâm:

Xem thêm Việc làm IT hấp dẫn trên TopDev