XGBoost: thuật toán giành chiến thắng tại nhiều cuộc thi Kaggle

xgboost_illustrate

XGBoost là viết tắt của Extreme Gradient Boosting. Đây là thuật toán state-of-the-art nhằm giải quyết bài toán supervised learning cho độ chính xác khá cao bên cạnh mô hình Deep learning như chúng ta từng tìm hiểu.

Nếu Deep learning chỉ nhận đầu vào là raw data dạng numerical (ta thường phải chuyển đổi sang n-vector trong không gian số thực) thì XGBoost nhận đầu vào là tabular datasets với mọi kích thước và dạng dữ liệu bao gồm cả categorical mà dạng dữ liệu này thường được tìm thấy nhiều hơn trong business model, đây là lý do đầu tiên tại sao các cá nhân tham gia Kaggle thường sử dụng.

Bên cạnh đó, XGboost có tốc độ huấn luyện nhanh, có khả năng scale để tính toán song song trên nhiều server, có thể tăng tốc bằng cách sử dụng GPU, nhờ vậy mà Big Data không phải là vấn đề của mô hình này. Vì thế, XGBoost thường được sử dụng và đã giành được nhiều chiến thắng trong các cuộc thi tại Kaggle.
Continue reading “XGBoost: thuật toán giành chiến thắng tại nhiều cuộc thi Kaggle”

Python snippet: Linear regression

features_vs_target.png

Linear regression (Hồi quy tuyến tính) thường được ứng dụng vào dự đoán giá trị số thực khi cho trước dữ liệu đầu vào. Ví dụ một số ứng dụng của Linear regression:

  • Dự đoán mức lương sau khi ra trường của một người dựa vào các thông số như điểm trung bình khoá học, số lượng các hoạt động ngoại khoá đã tham gia, giới tính, …
  • Dự đoán giá chứng khoán ngày mai dựa vào lịch sử giá trước đó, các sự kiện xã hội, số lượng vốn đầu kỳ, …
  • Bao nhiêu người sẽ share bài viết của bạn trên facebook dựa trên số lượng bạn bè, số lượng bạn của bạn bè, độ phổ biến của hashtag, những bài viết trước đó, …
  • Điều chỉnh nhiệt độ phòng dựa trên thời gian trong ngày, nhiệt độ ngoài trời, ánh sáng trong phòng, …

Tiếp tục series Python snippet (Python snippet: Visualizing, Python snippet: Thu thập dữ liệu), tuần này tôi sẽ đưa vào một vài snippet liên quan đến linear regression áp dụng trên tập dữ liệu home_data để dự đoán giá nhà dựa trên một vài thuộc tính cơ bản như số lượng phòng ngủ, số lượng phòng tắm, điểm đánh giá, …

Lý thuyết: linear regression
Source code: data-science-works
Thư viện: matplotlib, pandas, scikit-learn
Notebooks: linear_regression_snippet.

Cài đặt Neural Network với Python

Neural Network
Neural Network

Trong bài viết này, tôi sẽ hướng dẫn mọi người cài đặt mô hình mạng nơ-ron đơn giản với ngôn ngữ lập trình Python. Tôi giả định mọi người đã biết sơ qua các khái niệm cơ bản về giải tích cũng như machine learning (thế nào là classification, regularization, tại sao sử dụng gradient descent để tối thiểu hóa độ lỗi, …).

Việc cài đặt lại Neural Network từ đầu sẽ giúp cho chúng ta hiểu được mô hình này hoạt động như thế nào. Từ đó, ta có thể mở rộng ra các mô hình tiên tiến hơn như Deep learning trong các bài viết sắp tới. Ngoài ra, khi áp dụng vào các dự án thực tế, ta có thể sử dụng các thư viện như Theano hay PyBrain để tăng tốc độ xử lý cũng như tiết kiệm thời gian cài đặt.

Notebooks: ann.

AdaBoost hỏi gì đáp nấy

AdaBoost
AdaBoost

Dùng để làm gì? AdaBoost là một thuật toán boosting dùng để xây dựng bộ phân lớp (classifier).

Như chúng ta đã biết, một classifier nhận vào một tập dữ liệu để học và cố gắng dự đoán hay phân lớp mẫu dữ liệu mới thuộc về phân lớp nào.

Boosting là gì? boosting là thuật toán học quần thể bằng cách xây dựng nhiều thuật toán học cùng lúc (ví dụ như cây quyết định) và kết hợp chúng lại. Mục đích là để có một cụm hoặc một nhóm các weak learner sau đó kết hợp chúng lại để tạo ra một strong learner duy nhất.

Continue reading “AdaBoost hỏi gì đáp nấy”

C4.5 hỏi gì đáp nấy

Decision tree 4
Decision tree

Dùng để làm gì? C4.5 xây dựng một phân lớp (classifier) dưới dạng một cây quyết định. Để làm điều này, dữ liệu đầu vào C4.5 là mẫu dữ liệu quan sát đã được gán nhãn phân lớp.

Classifier là gì? classifier là một công cụ trong khai thác dữ liệu nhận vào một loạt các dữ liệu đã được gán nhãn phân loại và cố gắng dự đoán dữ liệu mới thuộc về phân lớp nào.

Continue reading “C4.5 hỏi gì đáp nấy”

Expectation maximization (EM) hỏi gì đáp nấy

Expectation maximization
Expectation maximization

Dùng để làm gì? Trong khai thác dữ liệu, phương pháp tối đa hóa kì vọng (EM) là thuật toán gom nhóm (clustering) dữ liệu (như k-means) được dùng trong tác vụ khám phá tri thức (knowledge discovery).

Trong thống kê, thuật toán EM lặp (iterate) và tối ưu hóa (optimize) khả năng (likelihood) nhìn thấy dữ liệu quan sát (seeing observed data) thông qua việc ước lượng tham số (parameters estimation) cho mô hình thống kê (statistical model) cho các biến không quan sát được (unobserved variables).

Continue reading “Expectation maximization (EM) hỏi gì đáp nấy”

Support vector machine (SVM) hỏi gì đáp nấy

SVM classification
SVM classification

Dùng để làm gì? Support vector machine (SVM) xây dựng (learn) một siêu phẳng (hyperplane) để phân lớp (classify) tập dữ liệu thành 2 lớp riêng biệt.

Siêu phẳng là cái gì? Một siêu phẳng là một hàm tương tự như phương trình đường thẳng, y = ax + b. Trong thực tế, nếu ta cần phân lớp tập dữ liệu chỉ gồm 2 feature, siêu phẳng lúc này chính là một đường thẳng.

Continue reading “Support vector machine (SVM) hỏi gì đáp nấy”

Khai thác tập phổ biến (frequent itemsets) với thuật toán Apriori

Chips and soda
Chips and soda

Bài toán khai thác tập phổ biến (frequent itemset) là bài toán rất quan trọng trong lĩnh vực data mining. Bài toán khai thác tập phổ biến là bài toán tìm tất cả tập các hạng mục (itemset) S có độ phổ biến (support) thỏa mãn độ phổ biến tối thiểu minsupp: supp(S) \geq minsupp.

Dựa trên tính chất của tập phổ biến, ta có phương pháp tìm kiếm theo chiều rộng (thuật toán Apriori (1994)) hay phương pháp phát triển mẫu (thuật toán FP-Growth (2000)). Trong bài viết này, ta sẽ nói về Apriori cùng với một số ví dụ minh họa khi chạy thuật toán này.

Continue reading “Khai thác tập phổ biến (frequent itemsets) với thuật toán Apriori”

Scikit-learn: Naive Bayes Classifier

Bayes rule
Bayes rule

Trong bài viết này, ta sẽ làm quen với thuật toán phân lớp Naive Bayes. Đây là một thuật toán đơn giản, dễ dàng cài đặt, và có độ chính xác tốt trong hầu hết các trường hợp.

Đây là hướng tiếp cận phân lớp theo mô hình xác suất. Dự đoán xác suất một đối tượng mới thuộc về thành viên của lớp đang xét.

Notebooks: naive_bayes_classifier.

Scikit-learn: K-nearest neighbors

knn concept
knn concept

Trong bài viết này, ta sẽ tìm hiểu thuật toán K-láng giềng gần (K-nearest neighbors (KNN)). KNN thuộc nhóm phương pháp phân lớp dựa trên thể hiện (instance-based classification). Tôi sẽ trình bày ý tưởng đơn giản về thuật toán này. Sau đó, ta sẽ sử dụng thư viện scikit-learn phục vụ cho việc cài đặt mô hình dự đoán KNN.

Notebooks: knn.

Exploratory Data Analysis: K Means Clustering

 

K Means Clustering
K Means Clustering

Trong bài viết này, ta sẽ khảo sát về k-means clustering, một cách đơn giản khác để quan sát tập dữ liệu đa chiều (multi-dimensional data). Tương tự như hierarchical clustering, kĩ thuật này hữu ích khi bước đầu phân tích dữ liệu (quan sát mối quan hệ giữa các điểm dữ liệu, thuộc tính).

Notebooks: explore_kmeans_clustering.

Exploratory Data Analysis: Hierarchical Clustering

 

Hierarchical Clustering
Hierarchical Clustering

Hôm nay, chúng ta sẽ tìm hiểu về hierarchical clustering. Đây là kĩ thuật hữu ích trong giai đoạn đầu phân tích dữ liệu, nó giúp chúng ta hiểu rõ hơn về tập dữ liệu đang khảo sát (nhận dạng mẫu, mối quan hệ giữa các thuộc tính). Hierarchical clustering có nghĩa là tạo ra cây phân cấp các nhóm dữ liệu.

Notebooks: explore_hierarchical_clustering.