HomeLập trìnhPythonHọc máy trong...

Học máy trong Python – Các tính năng Scikit-Learn 0.24 mới hàng đầu mà bạn nên biết


Scikit-learning là một trong những thư viện máy học mã nguồn mở và miễn phí phổ biến nhất dành cho Python.

Thư viện scikit-learning chứa rất nhiều công cụ hiệu quả để học máy và lập mô hình thống kê bao gồm phân loại, hồi quy, phân cụm và giảm kích thước.

Nhiều nhà khoa học dữ liệu, kỹ sư máy học và nhà nghiên cứu dựa vào thư viện này cho các dự án máy học của họ. Cá nhân tôi thích sử dụng thư viện scikit-learning vì nó mang lại rất nhiều tính linh hoạt và rất dễ hiểu tài liệu của nó với rất nhiều ví dụ.

Trong bài viết này, tôi rất vui được chia sẻ với bạn năm tính năng mới tốt nhất trong scikit-learning 0.24.

Trước tiên, hãy cài đặt Phiên bản mới nhất của Thư viện Scikit-Learn

Đầu tiên, đảm bảo rằng bạn đã cài đặt phiên bản mới nhất (với pip):

pip install --upgrade scikit-learn

Nếu bạn đang sử dụng conda, hãy sử dụng lệnh sau:

conda install -c conda-forge scikit-learn

Ghi chú: Phiên bản này hỗ trợ các phiên bản Python 3.6 đến 3.9.

Bây giờ, hãy xem xét các tính năng mới!

Lỗi tỷ lệ phần trăm tuyệt đối trung bình (MAPE)

Phiên bản mới của scikit-learning giới thiệu một số liệu đánh giá mới cho một vấn đề hồi quy có tên là Lỗi tỷ lệ phần trăm tuyệt đối trung bình (MAPE). Trước đây, bạn có thể tính toán MAPE bằng cách sử dụng một đoạn mã.

np.mean(np.abs((y_test — preds)/y_test))

Nhưng bây giờ bạn có thể gọi một chức năng gọi là mean_absolute_percentage_error từ sklearn.metrics mô-đun để đánh giá hiệu suất của mô hình hồi quy của bạn.

Ví dụ:

from sklearn.metrics import mean_absolute_percentage_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]

print(mean_absolute_percentage_error(y_true, y_pred))

0.3273809523809524

Ghi chú: Hãy nhớ rằng hàm không biểu thị đầu ra dưới dạng phần trăm trong phạm vi [0, 100]. Thay vào đó, chúng tôi đại diện cho nó trong phạm vi [0, 1/eps]. Giá trị tốt nhất là 0,0.

OneHotEncoder hỗ trợ các giá trị bị thiếu

OneHotEncoder hiện có thể xử lý các giá trị bị thiếu nếu được trình bày trong tập dữ liệu. Nó coi một giá trị bị thiếu là một danh mục. Hãy cùng hiểu thêm về cách thức hoạt động của nó trong ví dụ sau.

Đầu tiên nhập các gói quan trọng:

import pandas as pd 
import numpy as np
from sklearn.preprocessing import OneHotEncoder

Tạo một khung dữ liệu đơn giản với một tính năng phân loại có các giá trị bị thiếu:

# intialise data of lists.
data = {'education_level':['primary', 'secondary', 'bachelor', np.nan,'masters',np.nan]}
  
# Create DataFrame
df = pd.DataFrame(data)
  
# Print the output.
print(df)
zVaxL0LohRUpfDQhznRQ9z3y5tj1-1f9314q

Như bạn có thể thấy, chúng tôi có hai giá trị bị thiếu trong Trình độ học vấn cột.

Đọc thêm  Cách bảo mật cơ sở hạ tầng không dây tại nhà của bạn bằng Kismet và Python

Tạo phiên bản OneHotEncoder:

enc = OneHotEncoder()

Sau đó điều chỉnh và chuyển đổi dữ liệu của chúng tôi:

enc.fit_transform(df).toarray()
zVaxL0LohRUpfDQhznRQ9z3y5tj1-pn3531g0

Cột Education_level của chúng tôi đã được chuyển đổi và tất cả các giá trị bị thiếu được coi là một danh mục mới (kiểm tra cột cuối cùng của mảng trên).

Phương pháp mới để lựa chọn tính năng

Tính năng tuần tựBộ chọn là một phương pháp mới để lựa chọn tính năng trong scikit-learning. Nó có thể là lựa chọn chuyển tiếp hoặc lựa chọn ngược.

Lựa chọn chuyển tiếp

Lựa chọn chuyển tiếp lặp đi lặp lại tìm tính năng mới tốt nhất và sau đó thêm nó vào tập hợp các tính năng đã chọn.

Điều này có nghĩa là chúng tôi bắt đầu với các tính năng bằng không và sau đó tìm một tính năng tối đa hóa điểm xác thực chéo của một công cụ ước tính. Tính năng đã chọn được thêm vào tập hợp và quy trình được lặp lại cho đến khi chúng tôi đạt được số lượng tính năng đã chọn mong muốn.

Lựa chọn ngược

Lựa chọn thứ hai này theo cùng một ý tưởng nhưng theo một hướng khác. Ở đây, chúng tôi bắt đầu với tất cả các tính năng và sau đó xóa một tính năng khỏi bộ cho đến khi chúng tôi đạt được số lượng tính năng được chọn mong muốn.

Ví dụ

Nhập các gói quan trọng:

from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris

Tải tập dữ liệu iris và tên tính năng của nó:

X, y = load_iris(return_X_y=True, as_frame=True)
feature_names = X.columns

Tạo phiên bản của công cụ ước tính:

knn = KNeighborsClassifier(n_neighbors=3)

Tạo phiên bản của SequentialFeatureSelector, đặt số lượng tính năng cần chọn là 2và đặt hướng là “phía sau”:

sfs = SequentialFeatureSelector(knn, n_features_to_select=2,direction='backward')

Cuối cùng là tìm hiểu các tính năng để lựa chọn:

sfs.fit(X,y)

Hiển thị các tính năng đã chọn:

print("Features selected by backward sequential selection: "f{feature_names[sfs.get_support()].tolist()}")

Các tính năng được chọn theo lựa chọn tuần tự ngược: [‘petal length (cm)’, ‘petal width (cm)’].

Nhược điểm duy nhất của phương pháp lựa chọn tính năng mới này là nó có thể chậm hơn so với các phương pháp khác mà bạn đã biết (SelectFromModel & RFE ) vì nó đánh giá các mô hình bằng xác thực chéo.

Các phương pháp mới để điều chỉnh siêu tham số

Khi nói đến điều chỉnh siêu tham số, GridSearchCV và RandomizedSearchCv từ Scikit-learning là lựa chọn đầu tiên của nhiều nhà khoa học dữ liệu.

Nhưng trong phiên bản mới, chúng tôi có hai lớp mới để điều chỉnh siêu tham số được gọi là Giảm một nửaLướiTìm kiếmCVGiảm một nửaRandomSearchCV.

HalvingGridSearchCV và HalvingRandomSearchCV sử dụng một cách tiếp cận mới gọi là giảm một nửa liên tiếp để tìm các siêu tham số tốt nhất. Giảm một nửa liên tiếp giống như cuộc thi hoặc giải đấu giữa tất cả các tổ hợp siêu tham số.

Đọc thêm  Khoa học dữ liệu Python - Khóa học 12 giờ miễn phí cho người mới bắt đầu. Tìm hiểu Pandas, NumPy, Matplotlib, v.v.

Giảm một nửa liên tiếp hoạt động như thế nào?

Trong lần lặp đầu tiên, họ huấn luyện tổ hợp các siêu tham số trên một tập hợp con các quan sát (dữ liệu huấn luyện).

Sau đó, trong lần lặp tiếp theo, nó chỉ chọn tổ hợp các siêu tham số có hiệu suất tốt trong lần lặp đầu tiên và chúng sẽ được đào tạo trong một số lượng lớn các quan sát để cạnh tranh.

Vì vậy, nó lặp lại quá trình lựa chọn này trong mỗi lần lặp lại cho đến khi nó chọn được tổ hợp siêu tham số tốt nhất trong lần lặp lại cuối cùng.

Ghi chú: Các lớp này vẫn đang thử nghiệm:

Ví dụ:

Nhập các gói quan trọng:

from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.experimental import enable_halving_search_cv  
from sklearn.model_selection import HalvingRandomSearchCV
from scipy.stats import randint

Vì các lớp mới này vẫn đang trong quá trình thử nghiệm nên để sử dụng chúng, chúng tôi nhập một cách rõ ràng enable_halving_search_cv.

Tạo tập dữ liệu phân loại bằng cách sử dụng phương thức make_classification:

X, y = make_classification(n_samples=1000)

Tạo phiên bản của công cụ ước tính. Ở đây chúng tôi sử dụng Trình phân loại rừng ngẫu nhiên:

clf = RandomForestClassifier(n_estimators=20)

Tạo phân phối tham số để điều chỉnh:

param_dist = {"max_depth": [3, None],
              "max_features": randint(1, 11),
              "min_samples_split": randint(2, 11),
              "bootstrap": [True, False],
              "criterion": ["gini", "entropy"]}

Sau đó, chúng tôi khởi tạo lớp HalvingGridSearchCV với RandomForestClassifier làm công cụ ước tính và danh sách phân phối tham số:

rsh = HalvingRandomSearchCV(
    estimator=clf,
    param_distributions=param_dist,
    cv = 5,
    factor=2,
    min_resources = 20)

Có hai thông số quan trọng trong HalvingRandomSearchCV mà bạn cần biết.

  1. hệ số — Điều này xác định tỷ lệ kết hợp của các siêu tham số được chọn cho mỗi lần lặp lại tiếp theo. Ví dụ, thừa số=3 có nghĩa là chỉ một phần ba số ứng cử viên được chọn cho lần lặp tiếp theo.
  2. min_resource là lượng tài nguyên (số lượng quan sát) được phân bổ ở lần lặp đầu tiên cho mỗi tổ hợp siêu tham số.

Cuối cùng, chúng tôi có thể khớp đối tượng tìm kiếm mà chúng tôi đã tạo với tập dữ liệu của mình.

rsh.fit(X,y)

Sau khi đào tạo, chúng ta có thể thấy đầu ra khác nhau, chẳng hạn như:

Số lần lặp

print(rsh.n_iterations_ )

đó là 6.

Hoặc số lượng tham số ứng cử viên đã được đánh giá ở mỗi lần lặp

print(rsh.n_candidates_ )

đó là [50, 25, 13, 7, 4, 2].

Hoặc số lượng tài nguyên được sử dụng ở mỗi lần lặp:

print(rsh.n_resources_)

đó là [20, 40, 80, 160, 320, 640].

Hoặc cài đặt tham số mang lại kết quả tốt nhất trên dữ liệu tạm dừng:

print(rsh.best_params_)

{‘bootstrap’: Sai,
‘tiêu chí’: ‘entropy’,
‘max_depth’: Không có,
‘max_features’: 5,
‘min_samples_split’: 2}

Đọc thêm  Cách quản lý nhiều phiên bản Python và môi trường ảo

Scikit-learning 0.24 đã giới thiệu một triển khai tự đào tạo mới cho học bán giám sát được gọi là Máy phân loại SelfTraining. Bạn có thể sử dụng SelfTrainingClassifier với bất kỳ trình phân loại được giám sát nào có thể trả về ước tính xác suất cho từng lớp.

Điều này có nghĩa là bất kỳ trình phân loại được giám sát nào cũng có thể hoạt động như một trình phân loại bán giám sát, cho phép nó học hỏi từ các quan sát không được gắn nhãn trong tập dữ liệu.

Ghi chú: Các giá trị chưa được gắn nhãn trong cột mục tiêu phải có giá trị -1.

Hãy cùng hiểu thêm về cách thức hoạt động của nó trong ví dụ sau.

Nhập các gói quan trọng:

import numpy as np
from sklearn import datasets
from sklearn.semi_supervised import SelfTrainingClassifier
from sklearn.svm import SVC

Trong ví dụ này, chúng tôi sẽ sử dụng bộ dữ liệu mống mắt và thuật toán Super vector machine làm trình phân loại được giám sát (nó có thể triển khai Phù hợpdự đoán_proba).

Sau đó, chúng tôi tải tập dữ liệu và chọn ngẫu nhiên một số quan sát không được gắn nhãn:

rng = np.random.RandomState(42)
iris = datasets.load_iris()
random_unlabeled_points = rng.rand(iris.target.shape[0]) < 0.3
iris.target[random_unlabeled_points] = -1

Như bạn có thể thấy, các giá trị chưa được gắn nhãn trong cột mục tiêu có giá trị -1.

zVaxL0LohRUpfDQhznRQ9z3y5tj1-jcah31ok

Tạo một phiên bản của công cụ ước tính được giám sát:

svc = SVC(probability=True, gamma="auto")

Tạo một phiên bản của công cụ ước tính meta tự đào tạo và thêm svc làm công cụ ước tính cơ sở:

self_training_model = SelfTrainingClassifier(base_estimator=svc)

Cuối cùng, chúng ta có thể huấn luyện self_traning_model trên bộ dữ liệu mống mắt có một số quan sát chưa được gắn nhãn:

self_training_model.fit(iris.data, iris.target)

SelfTrainingClassifier(base_estimator=SVC(gamma=’auto’, xác suất=True))

Suy nghĩ cuối cùng về Scikit-Learn 0,24

Như tôi đã nói, scikit-learning vẫn là một trong những thư viện máy học mã nguồn mở phổ biến nhất. Và nó có tất cả các tính năng bạn cần để xây dựng một dự án máy học toàn diện.

Bạn cũng có thể triển khai các tính năng ấn tượng mới được trình bày trong bài viết này trong dự án máy học của mình.

Bạn có thể tìm thấy những điểm nổi bật của các tính năng khác được phát hành trong scikit-learning 0.24 tại đây.

Xin chúc mừng 👏👏, bạn đã đi đến cuối bài viết này! Tôi hy vọng bạn đã học được điều gì đó mới sẽ giúp ích cho bạn trong dự án khoa học dữ liệu hoặc máy học tiếp theo.

Nếu bạn đã học được điều gì đó mới hoặc thích đọc bài viết này, vui lòng chia sẻ nó để những người khác có thể thấy nó. Cho đến lúc đó, hẹn gặp lại bạn trong bài viết tiếp theo!

Bạn cũng có thể tìm thấy tôi trên Twitter @Davis_McDavid.

Bạn có thể đọc các bài viết khác đây.





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status