Chào mừng bạn đến với khóa học học máy trung cấp (Intermediate Machine Learning) từ Kaggle Learn!

Khoá học này dành cho các bạn đã có kiến thức cơ bản về học máy và đang tìm cách để cải thiện chất lượng mô hình của mình. Trong khóa học này, bạn sẽ học thêm các kỹ thuật mới để tăng tốc kiến thức về machine learning của mình bằng cách học cách:

  • Giải quyết các loại dữ liệu thường xuất hiện trong tập dữ liệu thực tế (giá trị bị thiếu, biến phân loại)
  • Cải thiện chất lượng code khi xây dựng mô hình học máy
  • Sử dụng cross-validation (tạm dịch là kiểm định chéo) cho việc đánh giá chất lượng mô hình
  • Xây dựng các mô hình với XGBoost (mô hình được sử dụng rộng rãi để chiến thắng các cuộc thi Kaggle)
  • Tránh những lỗi phổ biến trong khoa học dữ liệu (leakage).

Trong quá trình học, bạn sẽ áp dụng kiến thức của mình bằng cách hoàn thành một bài tập thực hành với dữ liệu thực tế. Các bài tập thực hành sử dụng dữ liệu từ cuộc thi dự đoán giá nhà cho người dùng của Kaggle Learn, bạn cần dự đoán giá nhà với 79 đặc trưng khác nhau (như số phòng ngủ, số phòng tắm, loại mái nhà, …). Bạn có thể đánh giá tiến triển của mình bằng cách gửi dự đoán của mình và quan sát vị trí của mình trên bảng xếp hạng. Sẽ rất tuyệt vời nếu bạn thử nghiệm một ý tưởng mới cho mô hình của mình và nó đạt được thứ hạng cao trên bảng xếp hạng đúng không?

Thực hành

Để đạt được hiệu quả tốt nhất từ khoá học này, bạn cần có một số kiến thức cơ bản về học máy như xây dựng và đánh giá chất lượng mô hình, khái niệm underfitting và overfitting, …

Nếu học máy là khái niệm hoàn toàn mới, bạn có thể tham khảo khoá học Giới thiệu về Machine Learning để làm quen với các khái niệm cơ bản rồi quay lại với khoá học này.

Đọc dữ liệu

Trước hết, hãy đăng kí tài khoản Kaggle và tham gia cuộc thi dự đoán giá nhà cho người dùng của Kaggle Learn. Cuộc thi này có 2 tập dữ liệu chính:

  • Tập huấn luyện (training data): chứa thông tin về đặc trưng của các ngôi nhà và giá nhà tương ứng
  • Tập đánh giá (testing data): chỉ bao gồm thông tin về đặc trưng của các ngôi nhà. Nhiệm vụ của chúng ta là xây dựng mô hình để có dự đoán chính xác nhất trên tập dữ liệu này.

Đoạn code dưới đây được dùng để đọc 2 tập dữ liệu nói trên và chia tập huấn luyện thành 2 phần để huấn luyện và kiểm định.

import pandas as pd
from sklearn.model_selection import train_test_split

# Đọc dữ liệu huấn luyện và kiểm tra
X_full = pd.read_csv('../input/train.csv', index_col='Id')
X_test_full = pd.read_csv('../input/test.csv', index_col='Id')

# Đặt biến mục tiêu y và đặc trưng X
y = X_full.SalePrice
features = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
X = X_full[features].copy()
X_test = X_test_full[features].copy()

# Chia dữ liệu thành tập huấn luyện và kiểm định
X_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2, random_state=0)

Chọn mô hình tốt nhất

Khi đã có tập huấn luyện và kiểm định, chúng ta có thể thử nghiệm nhiều mô hình khác nhau và chọn ra mô hình có chất lượng tốt nhất. Hãy tạm tiếp tục với sai số tuyệt đối trung bình (MAE) để lựa chọn mô hình.

from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

# Khởi tạo nhiều mô hình
model_1 = RandomForestRegressor(n_estimators=50, random_state=0)
model_2 = RandomForestRegressor(n_estimators=100, random_state=0)
model_3 = RandomForestRegressor(n_estimators=100, criterion='absolute_error', random_state=0)
model_4 = RandomForestRegressor(n_estimators=200, min_samples_split=20, random_state=0)
model_5 = RandomForestRegressor(n_estimators=100, max_depth=7, random_state=0)

models = [model_1, model_2, model_3, model_4, model_5]

# So sánh các mô hình khác nhau
def score_model(model, X_t=X_train, X_v=X_valid, y_t=y_train, y_v=y_valid):
    model.fit(X_t, y_t)
    preds = model.predict(X_v)
    return mean_absolute_error(y_v, preds)

for i in range(0, len(models)):
    mae = score_model(models[i])
    print("Model %d MAE: %d" % (i+1, mae))

Thực hiện dự đoán

Sau khi đã chọn ra được mô hình tốt nhất, chúng ta huấn luyện lại mô hình với toàn bộ tập huấn luyện và áp dụng mô hình đó trên tập đánh giá để dự đoán giá nhà.

# Huấn luyện mô hình với toàn bộ tập huấn luyện
my_model.fit(X, y)

# Dự đoán trên tập dữ liệu đánh giá
preds_test = my_model.predict(X_test)

# Lưu dự đoán theo định dạng của cuộc thi
output = pd.DataFrame({'Id': X_test.index, 'SalePrice': preds_test})
output.to_csv('submission.csv', index=False)

Gửi dự đoán

Nếu bạn chạy code trên Kaggle, bạn có thể gửi dự đoán bằng cách vào phần Output > Submit

Nếu bạn chạy code trên máy cá nhân, bạn có thể vào phần Leaderboard > Submission

Sau đó, bạn có thể thấy điểm cho bài dự đoán của mình cùng với vị trí trên bảng xếp hạng nữa.

Với dự đoán đầu tiên, có gần 80,000 người khác đứng trên mình, cũng tức là mình có thể học thêm nhiều thứ khác nữa. Hãy tiếp tục thử nghiệm các kỹ thuật và phương pháp mới trong các bài tiếp theo nhé.

Tham khảo

Leave a comment