scikit-learn 1.6 的發行重點#

我們很高興宣佈發佈 scikit-learn 1.6!新增了許多錯誤修正和改進,以及一些關鍵的新功能。以下我們將詳細說明此版本的重點。有關所有變更的詳盡列表,請參閱版本說明

使用 pip 安裝最新版本

pip install --upgrade scikit-learn

或使用 conda

conda install -c conda-forge scikit-learn

FrozenEstimator:凍結估算器#

這個元估算器允許您取得一個估算器並凍結其 fit 方法,這表示呼叫 fit 不會執行任何操作;此外,fit_predictfit_transform 會分別呼叫 predicttransform,而不會呼叫 fit。原始估算器的其他方法和屬性則保持不變。這個功能一個有趣的用例是在管線中使用預先擬合的模型作為轉換器步驟,或將預先擬合的模型傳遞給某些元估算器。以下是一個簡短的範例

import time
from sklearn.datasets import make_classification
from sklearn.frozen import FrozenEstimator
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import FixedThresholdClassifier

X, y = make_classification(n_samples=1000, random_state=0)

start = time.time()
classifier = SGDClassifier().fit(X, y)
print(f"Fitting the classifier took {(time.time() - start) * 1_000:.2f} milliseconds")

start = time.time()
threshold_classifier = FixedThresholdClassifier(
    estimator=FrozenEstimator(classifier), threshold=0.9
).fit(X, y)
print(
    f"Fitting the threshold classifier took {(time.time() - start) * 1_000:.2f} "
    "milliseconds"
)
Fitting the classifier took 3.67 milliseconds
Fitting the threshold classifier took 0.62 milliseconds

擬合閾值分類器跳過了擬合內部的 SGDClassifier。如需更多詳細資訊,請參閱範例 使用 FrozenEstimator 的範例

在管線中轉換 X 以外的資料#

如果需要,Pipeline 現在支援轉換傳遞的 X 以外的資料。可以透過設定新的 transform_input 參數來完成。當透過管線傳遞驗證集時,這特別有用。

舉例來說,假設 EstimatorWithValidationSet 是一個接受驗證集的估算器。我們現在可以有一個管線來轉換驗證集,並將其傳遞給估算器

sklearn.set_config(enable_metadata_routing=True)
est_gs = GridSearchCV(
    Pipeline(
        (
            StandardScaler(),
            EstimatorWithValidationSet(...).set_fit_request(X_val=True, y_val=True),
        ),
        # telling pipeline to transform these inputs up to the step which is
        # requesting them.
        transform_input=["X_val"],
    ),
    param_grid={"estimatorwithvalidationset__param_to_optimize": list(range(5))},
    cv=5,
).fit(X, y, X_val, y_val)

在上面的程式碼中,關鍵部分是呼叫 set_fit_request 來指定 X_valy_valEstimatorWithValidationSet.fit 方法所必需的,以及 transform_input 參數來告知管線在將 X_val 傳遞給 EstimatorWithValidationSet.fit 之前先轉換它。

請注意,目前尚未擴展 scikit-learn 估算器來接受使用者指定的驗證集。此功能會提早發佈以收集可能從中受益的第三方程式庫的回饋。

LogisticRegression(solver="newton-cholesky") 的多類別支援#

"newton-cholesky" 求解器(最初在 scikit-learn 版本 1.2 中引入)先前僅限於二元 LogisticRegression 和其他一些廣義線性迴歸估算器(即 PoissonRegressorGammaRegressorTweedieRegressor)。

此新版本包含對多類別(多項式)LogisticRegression 的支援。

當特徵數量為小到中等時,此求解器特別有用。經驗顯示,在某些具有單熱編碼分類特徵的中型資料集上,它比其他求解器更可靠且更快地收斂,如 pull-request 的基準測試結果所示。

額外樹狀結構的遺失值支援#

類別 ensemble.ExtraTreesClassifierensemble.ExtraTreesRegressor 現在支援遺失值。如需更多詳細資訊,請參閱使用者指南

import numpy as np
from sklearn.ensemble import ExtraTreesClassifier

X = np.array([0, 1, 6, np.nan]).reshape(-1, 1)
y = [0, 0, 1, 1]

forest = ExtraTreesClassifier(random_state=0).fit(X, y)
forest.predict(X)
array([0, 0, 1, 1])

從網站下載任何資料集#

函式 datasets.fetch_file 允許從任何給定的 URL 下載檔案。這個便利函式提供內建的本機磁碟快取、sha256 摘要完整性檢查,以及在網路錯誤時的自動重試機制。

目標是提供與資料集提取器相同的便利性和可靠性,同時提供彈性來處理來自任意線上來源和檔案格式的資料。

然後可以使用一般或特定領域的函式(例如 pandas.read_csvpandas.read_parquet 等)載入下載的檔案。

陣列 API 支援#

自 1.5 版以來,已更新更多估算器和函式來支援與陣列 API 相容的輸入,特別是來自 sklearn.model_selection 模組的超參數調整元估算器和來自 sklearn.metrics 模組的度量。

請參閱陣列 API 支援頁面,以取得使用與陣列 API 相容的程式庫(例如 PyTorch 或 CuPy)使用 scikit-learn 的說明。

幾乎完整的 Metadata Routing 支援#

除了 AdaBoost 之外,所有剩餘的估算器和函數都已加入對路由元數據的支援。請參閱Metadata Routing 使用者指南以取得更多詳細資訊。

Free-threaded CPython 3.13 支援#

scikit-learn 初步支援 free-threaded CPython,特別是我們所有支援的平台都提供了 free-threaded 的 wheels。

Free-threaded(也稱為 nogil)CPython 3.13 是 CPython 3.13 的實驗版本,旨在透過移除全域直譯器鎖 (GIL) 來實現高效的多執行緒使用案例。

有關 free-threaded CPython 的更多詳細資訊,請參閱py-free-threading 文件,特別是如何安裝 free-threaded CPython生態系統相容性追蹤

歡迎在您的使用案例中試用 free-threaded CPython 並回報任何問題!

針對第三方函式庫的開發者 API 進行改進#

我們一直在努力改進第三方函式庫的開發者 API。這項工作仍在進行中,但在此版本中已完成相當多的工作。此版本包含:

  • 引入了sklearn.utils.validation.validate_data,並取代了先前私有的 BaseEstimator._validate_data 方法。此函式擴展了 check_array,並新增了記住輸入特徵計數和名稱的支援。

  • 估算器標籤現在已更新,並透過 sklearn.utils.Tags 成為公共 API 的一部分。估算器現在應該覆寫 BaseEstimator.__sklearn_tags__ 方法,而不是實作 _more_tags 方法。如果您想要支援多個 scikit-learn 版本,您可以在您的類別中實作這兩種方法。

  • 由於開發了公共標籤 API,我們已移除 _xfail_checks 標籤,並且預期會失敗的測試直接傳遞至 check_estimatorparametrize_with_checks。請參閱其對應的 API 文件以取得更多詳細資訊。

  • 通用測試套件中的許多測試已更新,並會引發更有用的錯誤訊息。我們也新增了一些新的測試,這些測試應該能幫助您更輕鬆地解決估算器中潛在的問題。

我們也提供了更新版本的開發 scikit-learn 估算器,我們建議您查看。

腳本總執行時間:(0 分鐘 0.098 秒)

相關範例

scikit-learn 1.2 的發行重點

scikit-learn 1.2 的發行重點

scikit-learn 0.22 的發行重點

scikit-learn 0.22 的發行重點

scikit-learn 1.3 的發行重點

scikit-learn 1.3 的發行重點

scikit-learn 1.4 的發行重點

scikit-learn 1.4 的發行重點

由 Sphinx-Gallery 產生的圖庫