LGBMClassifier: Hướng dẫn Bắt đầu - KDnuggets

LGBMClassifier: Hướng dẫn Bắt đầu – KDnuggets

Nút nguồn: 2793517

LGBMClassifier: Hướng dẫn Bắt đầu
Hình ảnh của Editor 
 

Có rất nhiều thuật toán học máy có khả năng mô hình hóa các hiện tượng cụ thể. Trong khi một số mô hình sử dụng một tập hợp các thuộc tính để vượt trội hơn những mô hình khác, những mô hình khác bao gồm những người học yếu để sử dụng phần còn lại của các thuộc tính để cung cấp thông tin bổ sung cho mô hình, được gọi là mô hình tập hợp.

Tiền đề của các mô hình tập hợp là cải thiện hiệu suất của mô hình bằng cách kết hợp các dự đoán từ các mô hình khác nhau bằng cách giảm lỗi của chúng. Có hai kỹ thuật tập hợp phổ biến: đóng gói và tăng cường. 

Tính năng đóng gói, hay còn gọi là Bootstrapped Aggregation, huấn luyện nhiều mô hình riêng lẻ trên các tập hợp con ngẫu nhiên khác nhau của dữ liệu huấn luyện, sau đó tính trung bình các dự đoán của chúng để đưa ra dự đoán cuối cùng. Mặt khác, việc tăng cường liên quan đến việc đào tạo các mô hình riêng lẻ theo trình tự, trong đó mỗi mô hình cố gắng sửa các lỗi do các mô hình trước đó gây ra.

Bây giờ chúng ta đã có ngữ cảnh về các mô hình tập hợp, chúng ta hãy nhấp đúp vào mô hình tập hợp tăng cường, cụ thể là thuật toán Light GBM (LGBM) do Microsoft phát triển. 

LGBMClassifier là viết tắt của Light Gradient Boosting Machine Classifier. Nó sử dụng thuật toán cây quyết định để xếp hạng, phân loại và các nhiệm vụ học máy khác. LGBMClassifier sử dụng một kỹ thuật mới về Lấy mẫu một bên dựa trên Gradient (GOSS) và Gói tính năng độc quyền (EFB) để xử lý dữ liệu quy mô lớn với độ chính xác, giúp dữ liệu nhanh hơn và giảm mức sử dụng bộ nhớ một cách hiệu quả.

Lấy mẫu một phía dựa trên Gradient (GOSS) là gì?

Các thuật toán tăng cường độ dốc truyền thống sử dụng tất cả dữ liệu để đào tạo, điều này có thể tốn thời gian khi xử lý các tập dữ liệu lớn. Mặt khác, GOSS của LightGBM giữ tất cả các phiên bản có độ dốc lớn và thực hiện lấy mẫu ngẫu nhiên trên các phiên bản có độ dốc nhỏ. Trực giác đằng sau điều này là các trường hợp có độ dốc lớn sẽ khó khớp hơn và do đó mang nhiều thông tin hơn. GOSS giới thiệu một hệ số nhân không đổi cho các trường hợp dữ liệu có độ dốc nhỏ để bù cho việc mất thông tin trong quá trình lấy mẫu.

Gói tính năng độc quyền (EFB) là gì?

Trong một tập dữ liệu thưa thớt, hầu hết các tính năng là số không. EFB là một thuật toán gần như không mất dữ liệu, gói/kết hợp các tính năng loại trừ lẫn nhau (các tính năng không đồng thời khác không) để giảm số lượng thứ nguyên, do đó đẩy nhanh quá trình đào tạo. Vì các tính năng này là "độc quyền", không gian tính năng ban đầu được giữ lại mà không làm mất thông tin đáng kể.

Gói LightGBM có thể được cài đặt trực tiếp bằng pip – trình quản lý gói của python. Nhập lệnh được chia sẻ bên dưới trên thiết bị đầu cuối hoặc dấu nhắc lệnh để tải xuống và cài đặt thư viện LightGBM vào máy của bạn:

pip install lightgbm

 

Người dùng Anaconda có thể cài đặt nó bằng lệnh “cài đặt conda” như được liệt kê bên dưới.

conda install -c conda-forge lightgbm

 

Dựa trên hệ điều hành của bạn, bạn có thể chọn phương pháp cài đặt bằng cách sử dụng hướng dẫn này.

Bây giờ, hãy nhập LightGBM và các thư viện cần thiết khác:

import numpy as np
import pandas as pd
import seaborn as sns
import lightgbm as lgb
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

Chuẩn bị tập dữ liệu

Chúng tôi đang sử dụng bộ dữ liệu Titanic phổ biến, chứa thông tin về các hành khách trên tàu Titanic, với biến mục tiêu biểu thị liệu họ có sống sót hay không. Bạn có thể tải xuống tập dữ liệu từ Kaggle hoặc sử dụng đoạn mã sau để tải trực tiếp từ Seaborn, như hình bên dưới:

titanic = sns.load_dataset('titanic')

 

Bỏ các cột không cần thiết như “deck”, “embark_town” và “alive” vì chúng dư thừa hoặc không đóng góp vào sự sống còn của bất kỳ người nào trên tàu. Tiếp theo, chúng tôi quan sát thấy rằng các tính năng “tuổi”, “giá vé” và “đã bắt đầu” bị thiếu giá trị - lưu ý rằng các thuộc tính khác nhau được quy định bằng các biện pháp thống kê thích hợp.

# Drop unnecessary columns
titanic = titanic.drop(['deck', 'embark_town', 'alive'], axis=1) # Replace missing values with the median or mode
titanic['age'] = titanic['age'].fillna(titanic['age'].median())
titanic['fare'] = titanic['fare'].fillna(titanic['fare'].mode()[0])
titanic['embarked'] = titanic['embarked'].fillna(titanic['embarked'].mode()[0])

 

Cuối cùng, chúng tôi chuyển đổi các biến phân loại thành các biến số bằng cách sử dụng mã phân loại của gấu trúc. Bây giờ, dữ liệu đã được chuẩn bị để bắt đầu quá trình đào tạo mô hình.

# Convert categorical variables to numerical variables
titanic['sex'] = pd.Categorical(titanic['sex']).codes
titanic['embarked'] = pd.Categorical(titanic['embarked']).codes # Split the dataset into input features and the target variable
X = titanic.drop('survived', axis=1)
y = titanic['survived']

Đào tạo LGBMClassifier Model

Để bắt đầu đào tạo mô hình LGBMClassifier, chúng ta cần chia tập dữ liệu thành các tính năng đầu vào và biến mục tiêu, cũng như các bộ kiểm tra và đào tạo bằng cách sử dụng hàm train_test_split từ scikit-learning.

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

 

Hãy gắn nhãn mã hóa dữ liệu phân loại (“ai”) và dữ liệu thứ tự (“lớp”) để đảm bảo rằng mô hình được cung cấp dữ liệu số, vì LGBM không sử dụng dữ liệu phi số.

class_dict = { "Third": 3, "First": 1, "Second": 2
}
who_dict = { "child": 0, "woman": 1, "man": 2
}
X_train['class'] = X_train['class'].apply(lambda x: class_dict[x])
X_train['who'] = X_train['who'].apply(lambda x: who_dict[x])
X_test['class'] = X_test['class'].apply(lambda x: class_dict[x])
X_test['who'] = X_test['who'].apply(lambda x: who_dict[x])

 

Tiếp theo, chúng tôi chỉ định các siêu đường kính mô hình làm đối số cho hàm tạo hoặc chúng tôi có thể chuyển chúng dưới dạng từ điển cho phương thức set_params.  

Bước cuối cùng để bắt đầu đào tạo mô hình là tải tập dữ liệu bằng cách tạo một phiên bản của lớp LGBMClassifier và khớp nó với dữ liệu đào tạo. 

params = { 'objective': 'binary', 'boosting_type': 'gbdt', 'num_leaves': 31, 'learning_rate': 0.05, 'feature_fraction': 0.9
}
clf = lgb.LGBMClassifier(**params)
clf.fit(X_train, y_train)

 

Tiếp theo, hãy để chúng tôi đánh giá hiệu suất của trình phân loại được đào tạo trên tập dữ liệu thử nghiệm hoặc không nhìn thấy được.

predictions = clf.predict(X_test)
print(classification_report(y_test, predictions))

 

 precision recall f1-score support 0 0.84 0.89 0.86 105 1 0.82 0.76 0.79 74 accuracy 0.83 179 macro avg 0.83 0.82 0.82 179
weighted avg 0.83 0.83 0.83 179

Điều chỉnh siêu tham số

LGBMClassifier cho phép linh hoạt hơn nhiều thông qua siêu tham số mà bạn có thể điều chỉnh để có hiệu suất tối ưu. Ở đây, chúng ta sẽ thảo luận ngắn gọn về một số siêu đường kính chính:

  • num_lá: Đây là thông số chính để kiểm soát độ phức tạp của mô hình cây. Lý tưởng nhất là giá trị của num_leaves phải nhỏ hơn hoặc bằng 2^(max_depth).
  • min_data_in_leaf: Đây là một tham số quan trọng để ngăn chặn trang bị quá mức trong cây thông minh lá. Giá trị tối ưu của nó phụ thuộc vào số lượng mẫu đào tạo và num_leaves.
  • max_deep: Bạn có thể sử dụng điều này để giới hạn độ sâu của cây một cách rõ ràng. Tốt nhất là điều chỉnh thông số này trong trường hợp overfitting.

Hãy điều chỉnh các siêu tham số này và đào tạo một mô hình mới:

model = lgb.LGBMClassifier(num_leaves=31, min_data_in_leaf=20, max_depth=5)
model.fit(X_train, y_train)

 

predictions = model.predict(X_test)
print(classification_report(y_test, predictions))

 

 precision recall f1-score support 0 0.85 0.89 0.87 105 1 0.83 0.77 0.80 74 accuracy 0.84 179 macro avg 0.84 0.83 0.83 179
weighted avg 0.84 0.84 0.84 179

 

Lưu ý rằng việc điều chỉnh siêu tham số thực tế là một quá trình bao gồm thử và sai, đồng thời cũng có thể được hướng dẫn bởi kinh nghiệm và hiểu biết sâu hơn về thuật toán tăng cường cũng như kiến ​​thức chuyên môn về chủ đề (kiến thức miền) về vấn đề kinh doanh mà bạn đang giải quyết.

Trong bài đăng này, bạn đã tìm hiểu về thuật toán LightGBM và cách triển khai Python của nó. Đây là một kỹ thuật linh hoạt, hữu ích cho nhiều loại vấn đề phân loại khác nhau và nên là một phần trong bộ công cụ máy học của bạn.
 
 
Vidhi Chung là một nhà chiến lược AI và một nhà lãnh đạo chuyển đổi kỹ thuật số làm việc tại điểm giao nhau giữa sản phẩm, khoa học và kỹ thuật để xây dựng các hệ thống máy học có thể mở rộng. Cô ấy là một nhà lãnh đạo đổi mới từng đoạt giải thưởng, một tác giả và một diễn giả quốc tế. Cô ấy đang thực hiện sứ mệnh dân chủ hóa công nghệ máy học và phá vỡ các thuật ngữ để mọi người trở thành một phần của quá trình chuyển đổi này.
 

Dấu thời gian:

Thêm từ Xe đẩy