Thông thường khi bắt tay làm việc với Machine Learning, đa số chúng ta đều mong muốn áp dụng ngay các thuật toán đã học vào bài toán của mình. Tuy nhiên, trong thực tế, mọi thứ đều không đơn giản như vậy. Ngoài kĩ năng thu thập và tiền xử lý dữ liệu, trong bài viết này, tôi sẽ đề cập đến những kĩ năng cần thiết khác để góp phần cải tiến độ chính xác của mô hình dự đoán của mình.
Bạn đang xem: Điều chỉnh tham số mô hình (Model Parameter Tuning)
Feature Engineering
" data-image-caption="Feature Engineering" data-chuyenbentre.edu.vn-file="https://ongxuanhong.files.wordpress.com/2015/10/feature-engineering.jpg?w=300" data-large-file="https://ongxuanhong.files.wordpress.com/2015/10/feature-engineering.jpg?w=600" class="size-full wp-image-3488" src="https://ongxuanhong.files.wordpress.com/2015/10/feature-engineering.jpg?w=1100" alt="Feature Engineering" srcset="https://ongxuanhong.files.wordpress.com/2015/10/feature-engineering.jpg 600w, https://ongxuanhong.files.wordpress.com/2015/10/feature-engineering.jpg?w=150 150w, https://ongxuanhong.files.wordpress.com/2015/10/feature-engineering.jpg?w=300 300w" sizes="(max-width: 600px) 100vw, 600px" />Feature EngineeringTrong hầu hết các mô hình mà bạn xây dựng, thuộc tính (feature) đóng vai trò là thành phần cơ bản trong mô hình machine learning. Khi nói đến Feature Engineering, ta nói đến sự đóng góp của bàn tay con người bổ sung vào cải tiến mô hình bằng cách chọn lọc ra các feature phù hợp cho từng bài toán cụ thể. Trong đó, phải kể đến các kĩ năng như thu thập chính xác dữ liệu, điều chỉnh lại các feature sao cho đúng chuẩn, chọn lọc các feature phù hợp với mô hình hiện tại, thêm các feature mới vào dữ liệu, xử lý các thuộc tính bị thiếu dữ liệu, thay đổi kiểu dữ liệu của feature và chuẩn hóa toàn bộ feature trong cơ sở dữ liệu.
Kinh nghiệm cho thấy, bất cứ khi nào bạn tìm được một script về feature engineering, bạn nên thu thập và lưu trữ lại vào code repository của mình để làm snippet sau này. Feature engineering là quan trọng bởi vì nó ảnh hưởng đến độ chính xác chung cũng như đến tốc độ huấn luyện của mô hình dự đoán.
Model tuning
" data-image-caption="Model tuning" data-chuyenbentre.edu.vn-file="https://ongxuanhong.files.wordpress.com/2015/10/model-tuning.jpg?w=300" data-large-file="https://ongxuanhong.files.wordpress.com/2015/10/model-tuning.jpg?w=500" class="size-full wp-image-3490" src="https://ongxuanhong.files.wordpress.com/2015/10/model-tuning.jpg?w=1100" alt="Model tuning" srcset="https://ongxuanhong.files.wordpress.com/2015/10/model-tuning.jpg 500w, https://ongxuanhong.files.wordpress.com/2015/10/model-tuning.jpg?w=150 150w, https://ongxuanhong.files.wordpress.com/2015/10/model-tuning.jpg?w=300 300w" sizes="(max-width: 500px) 100vw, 500px" />Model tuningBạn có thể dễ dàng tìm thấy những thư viện cài đặt sẵn các thuật toán machine learning trong R hay Python. Nhưng tinh chỉnh mô hình (model tuning) lại là một câu chuyện khác. Hiểu được các thông số (parameter) của mô hình và tinh chỉnh các thông số này ra sao sẽ làm thay đổi đáng kể độ chính xác của mô hình dự đoán. Kĩ năng này đòi hỏi bạn phải có hiểu biết thấu đáo về các thuật toán machine learning. Có rất nhiều tutorial trên Youtube hay các bài viết về cách tinh chỉnh các thông số này mà bạn chưa rõ.
Hạn chế Overfitting
" data-image-caption="Overfitting" data-chuyenbentre.edu.vn-file="https://ongxuanhong.files.wordpress.com/2015/10/overfitting.png?w=300" data-large-file="https://ongxuanhong.files.wordpress.com/2015/10/overfitting.png?w=794" class="size-full wp-image-3494" src="https://ongxuanhong.files.wordpress.com/2015/10/overfitting.png?w=1100" alt="Overfitting" srcset="https://ongxuanhong.files.wordpress.com/2015/10/overfitting.png 794w, https://ongxuanhong.files.wordpress.com/2015/10/overfitting.png?w=150 150w, https://ongxuanhong.files.wordpress.com/2015/10/overfitting.png?w=300 300w, https://ongxuanhong.files.wordpress.com/2015/10/overfitting.png?w=768 768w" sizes="(max-width: 794px) 100vw, 794px" />OverfittingĐây là lỗi thường gặp và có ảnh hưởng đến độ chính xác chung của mô hình dự đoán. Overfitting (quá khớp với dữ liệu huấn luyện) được định nghĩa theo công thức toán như sau:
Xét độ lỗi (error) của mô hình dự đoán (hypothesis) h trên:_ tập huấn luyện (training data): error_train(h)._ quần thể dữ liệu (distribution) D: error_D(h).
Mô hình dự đoán h thuộc H quá khớp (overfitting) tập huấn luyện nếu tồn tại một mô hình dự đoán khác là h’ thuộc H sao cho:
_ error_train(h) error_D(h’)
Overfitting xảy ra khi mô hình dự đoán đạt được trên tập huấn luyện có độ lỗi nhỏ nhưng khi áp dụng lên tập dữ liệu test (dữ liệu mà mô hình chưa nhìn thấy) thì lại cho độ lỗi rất lớn, nên độ chính xác chung của mô hình bị giảm xuống. Mục tiêu của các mô hình dự đoán đó là dự đoán chính xác những mẫu dữ liệu chưa nhìn thấy trong tương lai. Nếu ta có thể dự đoán chính xác trên dữ liệu thu thập được nhưng lại không thể dự đoán chính xác những dữ liệu trong tương lai thì nhìn chung mô hình của ta không đạt yêu cầu. Do đó, khi xây dựng các mô hình, ta cần chú ý đến overfitting.
Nắm bắt các kĩ thuật machine learning mới
Bạn sẽ học được những kĩ thuật xử lý machine learning cơ bản trên trường cũng như các khóa học online nhưng còn rất nhiều các kĩ thuật khác trên thị trường cần ta tiếp tục khai thác. Vì vậy, bạn cần dành nhiều thời gian trau dồi thêm những kĩ thuật mới cho riêng mình, làm thế nào để cài đặt chúng bằng R/ Python/ Java, các thông số nào được truyền vào mô hình, …
Model Ensemble
" data-image-caption="Model Ensemble" data-chuyenbentre.edu.vn-file="https://ongxuanhong.files.wordpress.com/2015/10/model-ensemble.gif?w=300" data-large-file="https://ongxuanhong.files.wordpress.com/2015/10/model-ensemble.gif?w=373" class="size-full wp-image-3513" src="https://ongxuanhong.files.wordpress.com/2015/10/model-ensemble.gif?w=1100" alt="Model Ensemble" />Model EnsembleĐây là một chủ đề nóng về cách tăng độ chính xác của mô hình dự đoán. Nói ngắn gọn, đây là mô hình dựa trên các kĩ thuật machine learning khác nhau, lấy mẫu (sampling) dữ liệu và đưa ra kết quả dự đoán dựa vào sự kết hợp của nhiều mô hình gộp lại (ta có thể lấy kết quả trung bình từ một vài mô hình hay gán trọng số lên kết quả của từng mô hình, sau đó đưa ra kết luận dự đoán dựa trên điểm số cao nhất). Các kĩ thuật về Ensemble là một trong những thành tố quan trọng để chiến thắng trong các cuộc thi như Kaggle.
Cài đặt machine learning trên các platform khác nhau
Các thư viện tương thích đa nền tảng như R, Python, Java, Spark, … hiện đã có nhiều cài đặt về machine learning. Bạn có thể bắt đầu trên bất kì nền tảng nào mà bạn cảm thấy quen thuộc. Hầu hết các source code được cài đặt bằng Python hay R. Nếu gặp khó khăn trong quá trình tính toán như bị thiếu bộ nhớ ta có thể dựa vào các dịch vụ đám mây như Azure machine learning để thực nghiệm.
Visualization
" data-image-caption="Graph visualization" data-chuyenbentre.edu.vn-file="https://ongxuanhong.files.wordpress.com/2015/09/graph-visualization.jpg?w=300" data-large-file="https://ongxuanhong.files.wordpress.com/2015/09/graph-visualization.jpg?w=600" class="size-full wp-image-3189" src="https://ongxuanhong.files.wordpress.com/2015/09/graph-visualization.jpg?w=1100" alt="Graph visualization" srcset="https://ongxuanhong.files.wordpress.com/2015/09/graph-visualization.jpg 600w, https://ongxuanhong.files.wordpress.com/2015/09/graph-visualization.jpg?w=150 150w, https://ongxuanhong.files.wordpress.com/2015/09/graph-visualization.jpg?w=300 300w" sizes="(max-width: 600px) 100vw, 600px" />Graph visualizationVisualization cho dữ liệu và mô hình cơ bản là một lĩnh vực quan trọng. Công cụ này cung cấp cho ta cái nhìn toàn diện về dữ liệu được tổ chức như thế nào và làm thế nào mà mô hình của chúng ta có thể thực hiện được… Ta có thể bắt đầu với các hàm plotting dựng sẵn trong R. Ngoài ra, ta có thể sử dụng dữ liệu từ Kaggle để thực tập với dữ liệu thực tế.
Gradient boosting machine là một phương pháp rất hiệu quả trong bài toán supervised learning với dữ liệu dạng bảng (tabular data).
Trong bài viết này, chúng ta sẽ sử dụng gói lightgbm để chạy mô hình. Dữ liệu được lấy từ cuộc thi Home Credit Default Risk đang diễn ra trên kaggle. Ở đây để tiết kiệm thời gian và đơn giản, tôi sẽ chỉ sử dụng file application. Các file dữ liệu còn lại và cách xử lý chúng sẽ được giới thiệu trong một bài khác nếu có dịp.
Feature important
Vì mục đích là để thử nghiệm, tôi sẽ chỉ lấy khoảng 1/3 số bản ghi để tiết kiệm thời gian. Khi chia train/valid set, tôi sử dụng lệnh Stratified
Shuffle
Split của sklearn để đảm bảo tỷ lệ các nhãn giữa training set và valid set.
Tiếp đó tôi chạy mô hình để tìm ra biến quan trọng. Chúng ta sẽ chỉ lấy khoảng 25 biến có ảnh hưởng nhất tới mô hình.
Như vậy biến AMT_CREDIT hoặc AMT_GOODS_PRICE cần loại khỏi mô hình. Để biết nên loại biến nào, chúng ta chỉ cần chạy lại mô hình với input đã loại biến đó và xem auc nào cao hơn.
Tối ưu hyperparameters
Chiến lược chung của chúng ta sẽ như sau:
Cố định learning rate và number of estimators. Chọn learning rate cao, number of estimators vừa phải.Tối ưu Booster Parameters: max_depth, min_child_weight, min_split_gain, bagging_fraction, feature_fraction.Tối ưu Regularization Parameters: reg_alpha, reg_lambda.Quay trở lại tối ưu Core Parameters: n_estimators và learning_rate. Chọn learning_rate nhỏ và n_estimators lớn.Lưu ý rằng do số lượng nhãn chênh lệch lớn nên tôi lựa chọn is_unbalance = True khi khởi tạo mô hình.
Booster Parameters: max_depth và min_child_weight
Chúng ta chọn các kết hợp của các khoảng giá trị, các khoảng cách nhau 2 hoặc 3 đơn vị để thấy được giá trị tốt nhất. Sau đó sẽ xem chi tiết ở các khoảng nhỏ hơn.
Thấy rằng max_depth = 3 luôn cho auc cao hơn. Tuy nhiên với min_child_weight, chúng ta cần xem các giá trị lớn hơn chứ chưa vội chọn ngay giá trị 5.
Thấy rằng giá trị min_child_weight = 37 cho auc cao nhất.
Chúng ta sẽ xem 2 giá trị xung quanh 37 xem kết quả auc có được cải thiện không.
Kết quả cho thấy min_child_weight = 37 cho ra auc cao nhất.
Như vậy chúng ta xác định được max_depth = 3, min_child_weight = 37.
Booster Parameters: min_split_gain
Chọn các giá trị từ 0 tới 1.4.
Kết quả cho ra min_split_gain = 1.
Booster Parameters: bagging_fraction, feature_fraction
Chọn các giá trị từ 0.2 tới 1.
Kết quả cho ra bagging_fraction = 0.6, feature_fraction = 0.7.
Regularization Parameters: reg_alpha, reg_lambda
Chúng ta chọn các giá trị từ 0 tới 1.
Kết quả cho ra reg_alpha = 0.01, reg_lambda = 0.8.
Core Parameters: n_estimators and learning_rate
Ở bước này, chung ta sẽ giảm learning_rate và tăng n_estimators.
Cả n_estimators bằng 2000 và 4000 đều cho ra một auc. Nhưng chúng ta sẽ chọn n_estimators = 2000, learning_rate = 0.01 để giảm độ phức tạp của mô hình.
Dự đoán
Sử dụng các pameter đã xác định được để train vơi tất cả dữ liệu. Sau đó dự đoán test set.
Xem thêm: Cách comment bằng hình ảnh trên facebook bằng hình ảnh, cách comment bằng hình ảnh trên facebook
Khá tệ :D. Tuy nhiên chúng ta vẫn chưa sử dụng các file dữ liệu khác của cuộc thi. Và cũng chưa sử dụng các kĩ thuật là đặc sản của kaggle nữa.
Tôi sẽ quay lại với cuộc thi này nếu có dịp xem có thể làm gì để cải thiện kết quả trên bảng xếp hạng. Từ giờ tới lúc đó bạn có thể xem tạm notebook của tôi tại đây. :D