Gặp gỡ HistGradientBoostingClassifier

GradientBoostingClassifier linh hoạt và có thể mở rộng hơn

GradientBoostingClassifier của Scikit-learning (GBM từ đây trở đi) là một trong những thuật toán tổng hợp phổ biến nhất hoạt động tốt trên nhiều bộ dữ liệu. HistGradientBoostingClassifier (HGBM từ đây trở đi), một triển khai thay thế dựa trên biểu đồ của GBM, đã được giới thiệu trong v0.21.0 như một công cụ ước tính thử nghiệm. Kể từ phiên bản 1.0.0 , công cụ ước tính này đã trở thành một công cụ ước tính ổn định. Trong bài đăng này, chúng ta sẽ xem xét hai ưu điểm chính của việc sử dụng HGBM so với GBM.

Ngoài ra còn có tương đương hồi quy: HistGradientBoostingRegressor . Tuy nhiên, chúng tôi sẽ không đề cập đến nó để tránh lặp lại vì cùng một logic được áp dụng.

Ảnh của Sebastian Svenson trên Unsplash

1. Xử lý dữ liệu bị thiếu

Công cụ ước tính này có thể xử lý dữ liệu bị thiếu vì nó có hỗ trợ tích hợp cho các giá trị bị thiếu. Hãy xem điều này trong hành động. Chúng tôi sẽ bắt đầu bằng cách nhập các thư viện và tạo một dữ liệu mẫu với các giá trị bị thiếu:

import numpy as np
import pandas as pd
from time import perf_counter
pd.options.display.max_columns = 6
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import (GradientBoostingClassifier, 
                              HistGradientBoostingClassifier)
from sklearn.metrics import accuracy_score, roc_auc_score, f1_score
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='darkgrid', context='talk', palette='rainbow')
n = 10**4
X, y = make_classification(n, random_state=42)
X = pd.DataFrame(X, columns=[f'feature{i}' for i in range(X.shape[1])])
# Randomly add missing data for all columns
for i, col in enumerate(X.columns):
    np.random.seed(i)
    X.loc[np.random.choice(range(n), 1000, replace=False), col] = np.nan
print(f"Target shape: {y.shape}")
print(f"Features shape: {X.shape}")
X.head()

      
Image by author

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
print("========== Training data ========== ")
print(f"Features: {X_train.shape} | Target:{y_train.shape}")
print("========== Test data ========== ")
print(f"Features: {X_test.shape} | Target:{y_test.shape}")
gbm = GradientBoostingClassifier(random_state=42)
gbm.fit(X_train, y_train)
gbm.score(X_test, y_test)

      
Image by author | Partial output

Bây giờ, hãy xem điều gì sẽ xảy ra nếu chúng ta sử dụng HGBM:

hgbm = HistGradientBoostingClassifier(random_state=42)
hgbm.fit(X_train, y_train)
hgbm.score(X_test, y_test)

      
Image by author

2. Cân tốt với dữ liệu lớn hơn

HGBM là GBM triển khai nhanh hơn và mở rộng quy mô tốt với các bộ dữ liệu lớn hơn. Hãy xem cách cả hai công cụ ước tính so sánh trên dữ liệu mẫu với các kích thước khác nhau:

n_samples = 10**np.arange(2,7)
tuples = [*zip(np.repeat(n_samples,2), np.tile(['gbm', 'hgbm'], 2))]
summary = pd.DataFrame(
    index=pd.MultiIndex.from_tuples(tuples, 
                                    names=["n_records", "model"])
)
models = [('gbm', GradientBoostingClassifier(random_state=42)), 
          ('hgbm', HistGradientBoostingClassifier(random_state=42))]
for n in n_samples:
    X, y = make_classification(n, random_state=42)
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, random_state=42
    )
    
    for name, model in models:
        start = perf_counter()
        model.fit(X_train, y_train)
        end = perf_counter()
        summary.loc[(n, name), 'fit_time'] = end-start
start = perf_counter()
        y_proba = model.predict_proba(X_test)[:,1]
        end = perf_counter()
        summary.loc[(n, name), 'score_time'] = end-start
        
        summary.loc[(n, name), 'roc_auc'] = roc_auc_score(y_test, 
                                                          y_proba)
        y_pred = np.round(y_proba)
        summary.loc[(n, name), 'accuracy'] = accuracy_score(y_test, 
                                                            y_pred)
        summary.loc[(n, name), 'f1'] = f1_score(y_test, y_pred)
summary

      
Image by author

fig, ax = plt.subplots(2, 1, figsize=(9,6), sharex=True)
sns.lineplot(data=summary['fit_time'].reset_index(), 
             x='n_records', y='fit_time', hue='model', ax=ax[0])
ax[0].legend(loc='upper right', bbox_to_anchor=(1.3, 1))
sns.lineplot(data=summary['score_time'].reset_index(), 
             x='n_records', y='score_time', hue='model', 
             legend=False, ax=ax[1])
ax[1].set_xscale('log')
fig.tight_layout();

      
Image by author

fig, ax = plt.subplots(3, 1, figsize=(9,9), sharex=True)
sns.lineplot(data=summary['roc_auc'].reset_index(), 
             x='n_records', y='roc_auc', hue='model', ax=ax[0])
ax[0].legend(loc='upper right', bbox_to_anchor=(1.3, 1))
sns.lineplot(data=summary['accuracy'].reset_index(), 
             x='n_records', y='accuracy', hue='model', 
             legend=False, ax=ax[1])
sns.lineplot(data=summary['f1'].reset_index(), 
             x='n_records', y='f1', hue='model', 
             legend=False, ax=ax[2])
ax[2].set_xscale('log')
fig.tight_layout();

      
Image by author

Như bạn có thể nói bây giờ, lợi ích thứ hai của HGBM là nó mở rộng rất tốt với các bộ dữ liệu lớn so với GBM.

Đó là nó cho bài đăng này! Hy vọng bạn thích tìm hiểu về công cụ ước tính linh hoạt và có thể mở rộng này và vui mừng khám phá thêm về nó. Nếu bạn muốn tìm hiểu thêm, HGBM cũng có hỗ trợ bản địa cho các tính năng phân loại. Tài liệu này cho thấy một số ví dụ tuyệt vời về tính năng này.

Ảnh của Milad Fakurian trên Unsplash

Bạn có muốn truy cập thêm nội dung như thế này không? Các thành viên Medium có quyền truy cập không giới hạn vào bất kỳ bài báo nào trên Medium. Nếu bạn trở thành thành viên bằng cách sử dụng liên kết giới thiệu của tôi , một phần phí thành viên của bạn sẽ trực tiếp chuyển đến hỗ trợ tôi.

Cảm ơn bạn đã đọc bài viết này. Nếu bạn quan tâm, đây là liên kết đến một số bài đăng khác của tôi:
◼️️ Từ Mô hình ML đến Đường ống ML
◼️️ Giải thích mô hình Scikit-learning với
SHAP ◼️️ 4 mẹo đơn giản để vẽ nhiều biểu đồ trong Python
◼️ Làm chứng cho gấu trúc DataFrames
◼ Dữ liệu đơn giản hình ảnh trực quan bằng Python mà bạn sẽ thấy hữu ích ️
◼️ 6 mẹo đơn giản để có các mảnh đất tùy chỉnh và đẹp hơn trong Seaborn (Python)

Tạm biệt nhé

Suggested posts

Lời nói dối cao bồi

Làm thế nào các siêu tập đoàn đã bán cho người Mỹ một sự giả dối mạnh mẽ

Lời nói dối cao bồi

Đó là một buổi sáng vàng rực rỡ trên những ngọn đồi thoai thoải ở phía tây, khi những tia nắng đầu tiên chiếu sáng ngọn cỏ phủ sương trên đồng bằng. Một đàn gia súc Angus điềm đạm, đen tuyền và to lớn, in bóng dưới ánh bình minh khi chúng đi xuống con đường mòn bị đánh đập đến một địa phương mà tất cả chúng đều biết rõ; quán ăn sáng.

Tạp chí Ouvert

Tạp chí Ouvert

Mở Nhật ký: Một bức tranh mỗi ngày. Tôi luôn bị mê hoặc bởi những câu chuyện.

Related posts

3 cách đã được chứng minh để cải thiện kỹ năng viết của bạn

Lợi ích của việc viết và các chiến lược giúp bạn làm điều đó

3 cách đã được chứng minh để cải thiện kỹ năng viết của bạn

Vào năm 2022, với việc phát hành GPT-3, kỹ năng viết dường như trở nên ít quan trọng hơn. Với AI, những người viết kém cũng có thể tạo ra đội ngũ nhân viên chất lượng.

Cuốn sách đầu tiên của một đứa trẻ về việc cao

Cuốn sách đầu tiên của một đứa trẻ về việc cao

(Cảnh báo- Đây là tác phẩm Châm biếm, nhằm mục đích Lật đổ một cách vui vẻ- Chắc chắn không dành cho trẻ em) Bạn đã từng thấy bố mẹ mình trốn trong bếp và hút những điếu thuốc bốc mùi đó. Họ nói với bạn.

Cuộc đàn áp các Kitô hữu: Tội ác thù hận mà chúng ta không nói đến

Quên bài Hồi giáo đi: Cơ đốc nhân (và người Do Thái) là nạn nhân chính của tội ác căm thù tôn giáo.

Cuộc đàn áp các Kitô hữu: Tội ác thù hận mà chúng ta không nói đến

Bất kỳ lý trí nào cũng biết rằng giới chính trị và truyền thông bị chi phối bởi cánh tả, thậm chí là cực tả, một tình trạng tạo ra sự mất cân bằng trong diễn ngôn chính trị. Trong lĩnh vực tôn giáo, sự mất cân bằng này có thể thấy rõ ràng: các tờ báo và mạng lưới cánh tả không vội vàng bảo vệ đức tin Cơ đốc.

Tạo Môi Trường Làm Việc An Toàn

Tạo Môi Trường Làm Việc An Toàn

“Anh ấy sẽ bảo vệ tôi khi tôi gặp nguy hiểm. Anh ấy sẽ giấu tôi trong lều của anh ấy.