Hi các bạn, bận quá nên thời gian ra bài viết lâu quá mong mọi người thông cảm. Hôm nay mình trở lại và giới thiệu cho các bạn thuật toán cơ bản nhất Machine Learning. Đây chắc chắn là thuật toán dễ nhất của Machine Learning. Nếu bạn muốn nhập môn machine learning chắc chắn sẽ phải học thuật toán này. Để cho các bạn hình dung cụ thể về thuật toán nhất có thể, mình sẽ giới thiệu về bài toán Dự đoán giá nhà sử dụng thuật toán Linear Regression.

I. Thuật toán Linear Regression là gì ?

Linear Regression là thuật toán dễ nhất machine learning. Trên mạng có rất nhiều định nghĩa nhưng mình xin định nghĩa theo cách hiểu của mình như sau : Hồi quy tuyến tính hay Linear Regression là một thuật toán nhằm mục đích đi tìm các hệ số của một phương trình:

Linear Regression

Với đầu vào là những hàng trong dữ liệu chứa các giá trị x1, x2 , .. xn và giá trị y => Nhiệm vụ của thuật toán sẽ dựa vào giá trị đầu vào và tìm ra được các hệ số anpha0 , anpha1 , … anpha n. Nghe có vẻ thuật toán khá đơn giản. Nhưng bài toán này đối với con người là một cái gì đó cực khó.

Tất nhiên thuật toán machine learning thì cần Loss Function (Hàm mất mát). Theo blog.vietnamlab.vn thì công thức như sau:

Sau Loss Function là công thức tìm ra những anpha mới phù hợp hơn cho phương trình khi đi qua từng dòng của dữ liệu. Cũng theo blog.vietnamlab.vn thì công thức như sau :

Sơ sơ lý thuyết nhiêu đây thôi , tiếp theo mình sẽ đến phần thực hành dự đoán giá nhà bằng thuật toán này. Để áp dụng thuật toán này bạn cần đưa hết tất cả các thông số ví dụ như ngày mua , tọa độ ngôi nhà … về dạng số để đưa vào thuật toán.

II. Dự Đoán Giá Nhà Với Linear Regression

1.Môi trường làm việc và xử lý data

Vì bài này liên quan đến tính toán và vẽ hình thường xuyên nên mình sẽ sử dụng google colab làm nơi lập trình. Bạn nào chưa biết rõ về google colab có thể tham khảo tại : https://hongtin.net/ai/cach-dung-google-colab-va-thu-vien-numpy-phuc-vu-cho-machine-learning-phan-1-2/

Đầu tiên các bạn tạo một project google colab mới. Cách tạo mình đã nói ở link phía trên. Hoặc các bạn truy cập trực tiếp link : https://colab.research.google.com/ đăng nhập tài khoản google và chọn sổ tay mới.

Tiếp theo các bạn sẽ tải dự liệu sử dụng cho việc dự đoán về. Dữ liệu này mình tìm thấy trên kaggle. Các bạn chạy lệnh này trên google colab sẽ tải dữ liệu về với pandas và xem dữ liệu có gì:

import pandas as pd
data = pd.read_csv("https://raw.githubusercontent.com/sonrasa2k/hongtin_dudoangianha/master/Real%20estate.csv")
data

Để xem một cách tổng quát hơn về dữ liệu , ta dùng lệnh:

data.describe()

Ở đây chúng ta có count là tổng số dòng data của mỗi cột. mean là giá trịn trung bình của mỗi côt … các bạn chịu khó nhìn sẽ rõ.Dữ liệu có các thuộc tính như ngày mua , tuổi của ngôi nhà, …. và giá tiền.

Kế tiếp chúng ta thử vẽ đồ thị xem sự phân bố của giá nhà trong dữ liệu , ta dùng thư viện matplotlib :

import matplotlib.pyplot as plt
x = data["No"]
y = data[['Y house price of unit area']]
plt.plot(x,y,'go')

Rất chi là lộn xộn, thử hỏi làm sao máy nó dự đoán được ta? Chúng ta tiếp tục với phần quan trong nhất đó là dùng thuật toán Linear Regression để cho máy phân tích và học để dự đoán.

Để hỗ trợ cho việc áp dụng thuật toán, mình sẽ sử dụng thư viện scikit-learn.

Chúng ta 2 dữ liệu là X_train và Y_train . X là dữ liệu đầu vào , Y là kết quả dự đoán ở đây là giá nhà.

names = ['X1 transaction date','X2 house age','X3 distance to the nearest MRT station','X4 number of convenience stores','X5 latitude','X6 longitude']
X_train = data[names]
X_train
Y_train= data['Y house price of unit area']
Y_train

2.Train model và dự đoán

Dữ liệu train đã có, giờ tiếp theo sẽ tiến hành train nào. Với vài dòng đơn giản thôi. Thư viện scikit-learn hỗ trợ.

from sklearn.linear_model import LinearRegression
reg = LinearRegression().fit(X_train,Y_train)

Sau khi train để biết được những anpha1 , anpha2 … là những số gì thì ta sử dụng lênh:

reg.coef_

Để biết được anpha0 là số gì ta dùng lệnh:

reg.intercept_

Và cuối cùng, phương trình chúng ta cần tìm để dự đoán nhà sẽ là:

OK! Như vậy đã ra được phương trình rồi, tiếp theo bạn có thể dựa vào phương trình để dự đoán với X1,X2,X3… đã có trong data để test giá trị dự đoán bằng cách thay từng giá trị vào phương trình. Hoặc bạn sẽ dùng thư viện scikit-learn để dự đoán lại tập dữ liệu train với lệnh:

x_test = X_train
y_predict=reg.predict(x_test)
y_predict

Hoặc dự đoán một dòng bất kỳ tròn data sẽ trả về giá trị Y.

3.Vẽ Biểu Đồ giá trị dự đoán

Cuối cùng,các bạn vẽ biểu đồ xem giá trị dự đoán với giá trị, thực tế nó như thế nào:

plt.scatter(x,y,  color='black')
plt.plot(y_predict, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()

Những đường màu xanh là giá trị dự đoán, chấm đen là giá trị thực tế. Cũng có nét giống nhau, tuy nhiên đây là mình dự đoán lại tập train sẽ không nói lên được điều gì, mình chỉ chứng minh là có thể dự đoán giá nhà với thuật toán này. Bạn có thể tự tạo giữ liệu và kiểm tra thử độ chính xác.

III. Kết Luận

Như vậy sơ sơ các bạn đã nắm được cách dùng thuật toán Linear Regression. Dễ dàng với thư viện scikit-learn. Bạn có thể tự lập trình lại bằng code của mình nhé!

Để biết thêm nhiều kiến thức hay ho các bạn có thể tham gia nhóm của mình tại link : https://www.facebook.com/groups/164371998723215

Các bạn cần thêm thông tin hay sự giúp đỡ từ mình có thể ấn theo dõi mình trên Facebook và Nhắn tin trực tiếp với mình qua link : https://www.facebook.com/sonnguyen16032000

Hoặc xem thêm nhiều bài viết hay khác tại Blog Hóng Tin

Cảm ơn các bạn đã theo dõi bài viết khá dài của mình , hy vọng qua bài viết các bạn có cái nhìn khái quát hơn về thuật toán. Xin chào tạm biệt và hẹn gặp lại vào ngày gần nhất!

Tài liệu tham khảo từ: https://scikit-learn.org/stable/getting_started.html, blog.vietnamlab.vn