Professional Documents
Culture Documents
Thực hành xây dựng mô hình hồi quy tuyến tính
Thực hành xây dựng mô hình hồi quy tuyến tính
%matplotlib inline
# area
x = np.array([[73.5,75.,76.5,79.,81.5,82.5,84.,85.,86.5,87.5,89.,90.,91.5]]).T
# price
y = np.array([[1.49,1.50,1.51,1.54,1.58,1.59,1.60,1.62,1.63,1.64,1.66,1.67,1.6
8]]).T
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 1/11
9/14/23, 4:40 PM Thực hành xây dựng mô hình hồi quy tuyến tính
# mean price
ybar = np.mean(y)
plt.axhline(ybar, linestyle='--', linewidth=4, label="mean")
plt.axis([x_min*0.95, x_max*1.05, y_min*0.95, y_max*1.05])
plt.xlabel(xlabel, fontsize=16)
plt.ylabel(ylabel, fontsize=16)
plt.text(x_min, ybar*1.01, "mean", fontsize=16)
plt.legend(fontsize=15)
plt.title(title, fontsize=20)
plt.show()
_plot(x, y,
title='Giá nhà theo diện tích',
xlabel='Diện tích (m2)',
ylabel='Giá nhà (tỷ VND)')
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 2/11
9/14/23, 4:40 PM Thực hành xây dựng mô hình hồi quy tuyến tính
beta1: 0.011184099238793658
beta0: 0.6626458979418968
Do mô hình hồi quy tuyến tính đa bội cách tính toán sẽ phức tạp hơn đơn biến rất nhiều Nên chúng ta sẽ sử
dụng package Sklearn để huấn luyện mô hình Trong qui trình xây dựng và huấn luyện mô hình chung chúng ta
sẽ lần lượt đi qua các bước chính.
# area
x1 = np.array([[73.5,75.,76.5,79.,81.5,82.5,84.,85.,86.5,87.5,89.,90.,91.5]]).
T
# distance to center
x2 = np.array([[20, 18, 17, 16, 15, 14, 12, 10, 8, 7, 5, 2, 1]]).T
# input matrix X
X = np.concatenate([x1, x2], axis = 1)
# price
y = np.array([[1.49,1.50,1.51,1.54,1.58,1.59,1.60,1.62,1.63,1.64,1.66,1.67,1.6
8]]).T
Tiếp theo chúng ta sẽ vẽ biểu đồ giữa khoảng cách tới trung tâm và giá nhà. Quá trình vẽ biểu đồ này rấy quan
trọng vì nó giúp ta có một cái nhìn tổng quan về mối quan hệ giữa các điểm dữ liệu và phát hiện những bất
thường dữ liệu
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 3/11
9/14/23, 4:40 PM Thực hành xây dựng mô hình hồi quy tuyến tính
_plot(x2, y,
title='Giá nhà theo khoảng cách tới TT',
xlabel='Khoảng cách tới TT (km)',
ylabel='Giá nhà (tỷ VND)')
Ta nhận thấy rằng khi khoảng cách tới trung tâm giảm thì giá nhà càng tăng. Nhận định này càng củng cố thêm
việc lựa chọn biến khoảng cách tới trung tâm làm biến đầu vào là có ý nghĩa.
Tiếp theo ta sẽ huấn luyện mô hình. Trong sklearn cách thức chung khi huấn luyện mọi mô hình đều là khởi tạo
mô hình đó với các tham số và sau đó truyền dữ liệu vào hàm fit để huấn luyện. Đây là đặc điểm mà bạn cần
nhớ khi xây dựng mọi mô hình vì nó sẽ lặp lại như vậy.
regr.fit(X, y)
Vậy chúng ta có phương trình hồi quy như sau: y = 0.53665806 + 0.01252422x1 + 0.00130004x2 Trong đó y:
giá nhà (tỉ đồng) x1: diện tích nhà (m2) x2: Khoảng cách đến trung tâm (km)
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 4/11
9/14/23, 4:40 PM Thực hành xây dựng mô hình hồi quy tuyến tính
Sau khi đã huấn luyện thành công mô hình chúng ta cần trình bày kết quả của mình dưới một dạng trực quan,
dễ hiểu. Đây là một trong những kỹ năng quan trọng vì nó giúp mô hình của bạn trở nên có sức thuyết phục hơn
với mọi người.
Kỹ năng đồ thị hoá sẽ được mình giới thiệu sâu hơn ở một chương khác.
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 5/11
9/14/23, 4:40 PM Thực hành xây dựng mô hình hồi quy tuyến tính
_plot_act_pred(x2, y, ypred,
title='Giá nhà theo khoảng cách tới TT',
xlabel='Khoảng cách tới TT (km)',
ylabel='Giá nhà (tỷ VND)')
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 6/11
9/14/23, 4:40 PM Thực hành xây dựng mô hình hồi quy tuyến tính
Quá khớp là hiện tượng mà mô hình chỉ khớp tốt trên tập dữ liệu huấn luyện nhưng không dự báo tốt trên dữ
liệu kiểm tra. Đây là trường hợp thường gặp khi huấn luyện các mô hình machine learning. Hiện tượng này gây
ảnh hưởng xấu và dẫn tới mô hình không thể áp dụng được vì các dự báo bị sai khi áp dụng vào thực tiễn. Có
nhiều nguyên nhân dẫn tới quá khớp. Một trong những nguyên nhân phổ biến đó là tập dữ liệu huấn luyện và
dữ liệu dự báo có phân phối khác xa nhau dẫn tới các qui luật học được ở dữ liệu huấn luyện không còn đúng
trên dữ liệu dự báo. Hoặc cũng có thể xuất phát từ phía mô hình quá nhiều tham số nên khả năng biểu diễn dữ
liệu của nó không mang tính đại diện.
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 7/11
9/14/23, 4:40 PM Thực hành xây dựng mô hình hồi quy tuyến tính
# area
x1 = np.array([[73.5,75.,76.5,79.,81.5,82.5,84.,85.,86.5,87.5,89.,90.,91.5]]).
T
# distance to center
x2 = np.array([[20, 18, 17, 16, 15, 14, 12, 10, 8, 7, 5, 2, 1]]).T
# input matrix X
X = np.concatenate([x1, x2], axis = 1)
# price
y = np.array([[1.49,1.50,1.51,1.54,1.58,1.59,1.60,1.62,1.63,1.64,1.66,1.67,1.6
8]]).T
y_pred_rid = rid_regr.predict(X)
_plot_act_pred(x1, y, y_pred_rid,
title='Giá nhà theo khoảng cách tới TT',
xlabel='Khoảng cách tới TT',
ylabel='Giá nhà (tỷ VND)')
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 8/11
9/14/23, 4:40 PM Thực hành xây dựng mô hình hồi quy tuyến tính
y_pred_las = las_regr.predict(X)
_plot_act_pred(x1, y, y_pred_las,
title='Giá nhà theo khoảng cách tới TT',
xlabel='Khoảng cách tới TT',
ylabel='Giá nhà (tỷ VND)')
Để lựa chọn ra một hệ số alpha phù hợp với mô hình Ridge regression chúng ta sẽ cần phải tạo ra một list các
giá trị có thể của tham số này và dùng vòng lặp for để đánh giá mô hình với trên từng giá trị của tham số. Giá trị
được lựa chọn là giá trị mà có MSE trên tập kiểm tra là nhỏ nhất.
List các giá trị kể trên còn được gọi là không gian tìm kiếm grid search.
Tiếp theo chúng ta sẽ tuning hệ số điều chuẩn anpha cho mô hình hồi qui.
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 9/11
9/14/23, 4:40 PM Thực hành xây dựng mô hình hồi quy tuyến tính
(10, 2) (3, 2)
(10, 1) (3, 1)
models = {}
for alpha in grid_search:
models = _regression(round(alpha, 2), X_train, y_train, X_test, y_test, mode
ls)
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 10/11
9/14/23, 4:40 PM Thực hành xây dựng mô hình hồi quy tuyến tính
In [20]: #In kết quả huấn luyện và tìm ra mô hình tốt nhất.
i = 0
for k, v in models.items():
if i==0:
best_model = k
mse = models[k]["MSE"]
if models[k]["MSE"] < mse:
best_model = k
print("-----------------------------------------")
print("Best models: {}, MSE: {}".format(best_model, models[best_model]["MS
E"]))
localhost:8888/nbconvert/html/Thực hành xây dựng mô hình hồi quy tuyến tính.ipynb?download=false 11/11